Skip to main content

Validobj gives you valid objects

Project description

Tests Coverage PyPI Conda Version RTD

Validobj

Validobj is library that takes semistructured data (for example JSON and YAML configuration files) and converts it to more structured Python objects. It places the emphasis on:

  • Good error messages (rather than avoiding extra work in the error handling code).
  • Schema defined in terms of dataclasses and other high level objects such as enums, as well as a subset of the typing module.
  • Simplicity of implementation (rather than full generality).

Validobj requires Python 3.7 and has no other dependencies.

Documentation

https://validobj.readthedocs.io/en/latest/

Example

  1. Define a schema using dataclasses
    import dataclasses
    import enum
    from typing import Mapping, Set, Tuple, List
    
    
    class DiskPermissions(enum.Flag):
        READ = enum.auto()
        WRITE = enum.auto()
        EXECUTE = enum.auto()
    
    
    class OS(enum.Enum):
        mac = enum.auto()
        windows = enum.auto()
        linux = enum.auto()
    
    
    @dataclasses.dataclass
    class Job:
        name: str
        os: Set[OS]
        script_path: str
        framework_version: Tuple[int, int] = (1, 0)
        disk_permissions: DiskPermissions = DiskPermissions.READ
    
    
    @dataclasses.dataclass
    class CIConf:
        stages: List[Job]
        global_environment: Mapping[str, str] = dataclasses.field(default_factory=dict)
    
  2. Process a dictionary input into it using Validobj
    from validobj import parse_input
    
    inp = {
        'global_environment': {'CI_ACTIVE': '1'},
        'stages': [
            {
                'name': 'compile',
                'os': ['linux', 'mac'],
                'script_path': 'build.sh',
                'disk_permissions': ['READ', 'WRITE', 'EXECUTE'],
            },
            {
                'name': 'test',
                'os': ['linux', 'mac'],
                'script_path': 'test.sh',
                'framework_version': [4, 0],
            },
        ],
    }
    print(parse_input(inp, CIConf))
    # This results in a dataclass instance with the correct types:
    #
    #CIConf(
    #    stages=[
    #        Job(
    #            name='compile',
    #            os={<OS.linux: 3>, <OS.mac:1>},
    #            script_path='build.sh',
    #            framework_version=(1, 0),
    #            disk_permissions=<DiskPermissions.EXECUTE|WRITE|READ: 7>,
    #        ),
    #        Job(
    #            name='test',
    #            os={<OS.linux: 3>, <OS.mac: 1>},
    #            script_path='test.sh',
    #            framework_version=(4, 0),
    #            disk_permissions='<DiskPermissions.READ: 1>',
    #        ),
    #    ],
    #    global_environment={'CI_ACTIVE': '1'},
    #)
    #
    

The set of applied transformations as well as the interface to customise processing are described in the documentation

Installation

The package can be installed with pip:

python3 -m pip install validobj

As well as with conda, from the conda-forge channel:

conda install validobj -c conda-forge

The code is hosted at

https://github.com/Zaharid/validobj

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

validobj-0.5.0.tar.gz (24.5 kB view details)

Uploaded Source

Built Distribution

validobj-0.5.0-py2.py3-none-any.whl (13.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file validobj-0.5.0.tar.gz.

File metadata

  • Download URL: validobj-0.5.0.tar.gz
  • Upload date:
  • Size: 24.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.27.1

File hashes

Hashes for validobj-0.5.0.tar.gz
Algorithm Hash digest
SHA256 31467c3260c3490d14641371fa468e6fbb333d2cc3ec22bdacbacb2931dfe6e5
MD5 2884e66b83f1659a94073cbcdceff92c
BLAKE2b-256 7397a276a89cddfd06d081625d90ab51bdf068be43222887c47cd3fe365dd654

See more details on using hashes here.

File details

Details for the file validobj-0.5.0-py2.py3-none-any.whl.

File metadata

  • Download URL: validobj-0.5.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 13.7 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.27.1

File hashes

Hashes for validobj-0.5.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 2b52113fe6e9309e4ab2aee2a797ce2f465faab8ceecfbc6a449b100703c528f
MD5 57881efddb15bbec6c8b4549ddb06d76
BLAKE2b-256 41f0474eee0adaa97c69c70c6b380fea345536cdfca54f1668f3cb80c75e1337

See more details on using hashes here.

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