Skip to main content

A small collections of modular components useful in other projects.

Project description

projectutils

Documentation Status Unit Tests codecov

A small collections of modular components useful in other projects.

projectutils.init

The init module is helpful when you need to create a complex directory structure. You can create objects that represent Directories and Files to create a tree.

from pathlib import Path
from projectutils.init import Tree, Directory, File


tree = Tree([
    Directory("dir1"),
    Directory("dir2", [
        File("file.txt", "file content")
    ])
])

tree.create(Path("~/project").expanduser())

# $ tree ~/project
# ~/project
# ├── dir1
# └── dir2
#     └── file.txt

projectutils.config

The config module allows you to define a configuration schema and dinamically load configurations from multiple sources.

schema.json:

{
    "string": {"doc": "String config", "format": "string", "default": "DEFAULT"},
    "integer": {"doc": "Integer config", "format": "int", "default": 1},
    "float": {"doc": "Float config", "format": "float", "default": 1.1},
    "list": {"doc": "List config", "format": "list", "default": ["a", "b", "c"]},
    "bool": {"doc": "Bool config", "format": "bool", "default": true},
    "nested.string": {"doc": "String config", "format": "string", "default": "DEFAULT"},
}

/etc/myapp/config.json:

{
    "float": 2.2,
    "string": "loaded from json",
    "nested": {
        "string": "loaded from json"
    }
}

/etc/myapp/.env:

MYAPP_CONF_LIST="e,n,v"
MYAPP_CONF_BOOL="False"
MYAPP_CONF_NESTED_STRING="loaded from env"

app.py:

import json
from pathlib import Path
from projectutils.config import Config, ENVSource, JSONSource, ConfigSchema


# Load schema
schema = ConfigSchema.from_json_file("schema.json")

# Define Sources
envs_prefix = "MYAPP_CONF_"
configs_root = Path("/etc/myapp")
sources = [
    JSONSource(configs_root / "config.json"),
    ENVSource(envs_prefix, configs_root),
]
# Source definition dictates precedence.
# In this case ENV values will override JSON values.

# Load config
config = Config(schema, sources)


config.get("integer")
# 1

config.get("float")
# 2.2

config.get("bool")
# False

config.get("list")
# ['e', 'n', 'v']

config.get("nested.string")
# 'loaded from env'

config.get("string")
# 'loaded from json'

config.get("nested")
# {'nested': 'loaded from env'}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

projectutils-1.2.tar.gz (20.0 kB view hashes)

Uploaded Source

Built Distribution

projectutils-1.2-py3-none-any.whl (20.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page