Skip to main content

Validobj gives you valid objects

Project description

https://github.com/Zaharid/validobj/actions?query=workflow%3A%22Python+package%22 https://pypi.org/project/validobj/

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

import dataclasses
import enum
from typing import Mapping, Set, Tuple, List

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],
        },
    ],
}


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)



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'},
#)
#

Installation

The package can be installed with pip:

python3 -m pip install validobj

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

Uploaded Source

Built Distribution

validobj-0.3.7-py2.py3-none-any.whl (9.6 kB view details)

Uploaded Python 2 Python 3

File details

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

File metadata

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

File hashes

Hashes for validobj-0.3.7.tar.gz
Algorithm Hash digest
SHA256 472f4630f248db4cfe30c8465dcd4a0005506d0648344b27324dff3d578f6c1b
MD5 1c7e2b728f69e520b65cf685542ccc48
BLAKE2b-256 acd8ce8d6d90288d6b258da6de7e1676018a5508b7e36904b30f7f428aedb61a

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for validobj-0.3.7-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 b240905d2cdfb607573eeaedc6f0a0c964f93ed5689895d331b3784427a00ab2
MD5 15afe45f93e411cef1acf113531480b3
BLAKE2b-256 4178e36ae4bd875a6db1031e97933c7e1a22f056110991ab728b3e94281e9acc

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