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 a modern Python version and has no other dependencies. It progressively supports typing features as they are implemented in the standard library and language: A limited subset of the parsing facilities work with Python 3.8, which is the minimum version. The custom validation module requires at least Python 3.9.

Documentation

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

Example

  1. Define a schema using dataclasses
    import dataclasses
    import enum
    from typing import Literal
    
    
    class DiskPermissions(enum.Flag):
        READ = enum.auto()
        WRITE = enum.auto()
        EXECUTE = enum.auto()
    
    
    
    
    @dataclasses.dataclass
    class Job:
        name: str
        os: set[Literal['windows', 'mac', 'linux']]
        script_path: str
        framework_version: tuple[int, int] = (1, 0)
        disk_permissions: DiskPermissions = DiskPermissions.READ
    
    
    @dataclasses.dataclass
    class CIConf:
        stages: list[Job]
        global_environment: dict[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={'linux', 'mac'},
    #                    script_path='build.sh',
    #                    framework_version=(1, 0),
    #                    disk_permissions=<DiskPermissions.READ|WRITE|EXECUTE: 7>),
    #                Job(name='test',
    #                    os={'linux', 'mac'},
    #                    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-1.6.tar.gz (27.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

validobj-1.6-py3-none-any.whl (16.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for validobj-1.6.tar.gz
Algorithm Hash digest
SHA256 75752f227358925d74cdd190849ea1d49a8236567e56cbf09c431bdb18faa8e0
MD5 dcbca62bb09c541f2c10323917e54df4
BLAKE2b-256 211ebabee4da2cbc8311e604bf2e850d0fa7b44edbe93cf33e5385197b5f1a9d

See more details on using hashes here.

File details

Details for the file validobj-1.6-py3-none-any.whl.

File metadata

  • Download URL: validobj-1.6-py3-none-any.whl
  • Upload date:
  • Size: 16.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.5

File hashes

Hashes for validobj-1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 953d909a39610f7b4421cc61200fe7882677844aed84a45d5d3af930e281abfe
MD5 5501f67a22d781cbb539be618142aa2b
BLAKE2b-256 41adac1ae033243265798d55cdaebe95f1441fae97e322bcdf63d6037f387ac4

See more details on using hashes here.

Supported by

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