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 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 is 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.3.11.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

validobj-0.3.11-py2.py3-none-any.whl (10.4 kB view details)

Uploaded Python 2 Python 3

File details

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

File metadata

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

File hashes

Hashes for validobj-0.3.11.tar.gz
Algorithm Hash digest
SHA256 b1d32a0cf193fca4155f9d1dd42a4554e4518cd1e8b76be45a25545bf3285f22
MD5 2c27aa42c43177189675745cf5c05179
BLAKE2b-256 853e84bc62e515da915d683a702d3884e33795d964837a69f9bb005a70ba18cf

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for validobj-0.3.11-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 659dfd3f41478bcd2b1ca96e97448a2141320ea7dc1c17f9aa92cc27497dab20
MD5 1933c66f2dc8881a9d39ed4c87f9d784
BLAKE2b-256 dffe17f570cd588fb83e1c19151a8f363791aeac322d46f66ed9150c298d796a

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