Skip to main content

No project description provided

Project description

Lazy Schema

Quick and simple schema validator.

Installation

pip install lazy-schema

How to Use

from lazy_schema import schema
from datetime import datetime
from bson import ObjectId

exampleSchema = schema(
    stringField="Hello World!",
    numberField=123,
    booleanField=True,
    lambdaField=lambda: datetime.utcnow(),
)

document = exampleSchema(
    stringField="Hi World!",
)

print(document)
{
    "stringField": "Hi World!",
    "numberField": 123,
    "booleanField": True,
    "lambdaField": [datetime Object]
}

Loading JSON Files

{
    "stringField": "Hi World!",
    "numberField": 123,
    "booleanField": true
}
from lazy_schema import schema

exampleSchema = schema(
    "path/to/file.json",
    lambdaField=lambda: datetime.utcnow(),
)

document = exampleSchema(
    stringField="Hi World!",
)

print(document)
{
    "stringField": "Hi World!",
    "numberField": 123,
    "booleanField": True,
    "lambdaField": [datetime Object]
}

SchemaPool

Just a collection where you can keep all your schemas.

from lazy_schema import SchemaPool

schemas = SchemaPool()

schemas.set(
    "my_schema",
    hello="world!",
    number=123,
)

schemas.set(
    "my_other_schema",
    hello="there!",
    number=456,
)

print(schemas.my_schema())
print(schemas.my_other_schema())
{
    "hello": "world!",
    "number": 123
}

{
    "hello": "there!",
    "number": 456
}

Loading from MongoDB with SchemaPool

You can load MongoDB documents with SchemaPool!

MongoDB Document

{
    "_id": [ObjectId],
    "__im_a_comment__": null,
    "hello": "world!",
    "number": 123
}

Script

from pymongo import MongoClient
from lazy_schema import SchemaPool

mongo = MongoClient(...)
collection = mongo.my_database.my_schemas

schemas = SchemaPool()

schema = schemas.pymongo(
    collection,
    query={
        "_id": ObjectId(...),
    },
)

print(schema())

Result

{
    // `_id` is always excluded.
    "hello": "world!",
    "number": 123
}

You can also add it into the SchemaPool.

...
schema.add_to("my_schema", schemas)

Special Keywords

Field names that are enclosed with double underscores _ are special keywords. They are not included in the schema.

These can be used when creating a schema,

exampleSchema = schema(
    __discrete__=True,
    ...
)

inside a schema validation,

document = exampleSchema(
    __discrete__=True,
    ...
)

and inside a JSON file.

{
    "__discrete__": true,
    ...
}

__discrete__

Excludes fields with a None default value.

from lazy_schema import schema

exampleSchema = schema(
    __discrete__=True,
    fieldA="Hello World!",
    fieldB=None,
    fieldC="Hi World!",
)

document = exampleSchema(
    fieldA=None,
)

print(document)
{
    "fieldA": None,
    "fieldC": "Hi World!"
}

__no_default__

Default values are not written.

from lazy_schema import schema

exampleSchema = schema(
    __no_default__=True,
    fieldA="Hello World!",
    fieldB=None,
    fieldC="Hi World!",
)

document = exampleSchema(
    fieldA="Hi There!",
)

print(document)
{
    "fieldA": "Hi There!"
}

__no_null__

None values will never be written.

from lazy_schema import schema

exampleSchema = schema(
    __no_null__=True,
    fieldA="Hello World!",
    fieldB=None,
    fieldC="Hi World!",
)

document = exampleSchema(
    fieldA=None,
)

print(document)
{
    "fieldC": "Hi World!"
}

Comments

Any field names enclosed with double underscores __name__ will never be written.

from lazy_schema import schema

exampleSchema = schema(
    __comment__="fieldA should not be None!",
    fieldA="Hello World!",
    __yet_another_comment__="fieldB is always None...",
    fieldB=None,
    __fieldC__="fieldC should always have 'World' in it!",
    fieldC="Hi World!",
)

document = exampleSchema(
    fieldA=None,
)

print(document)
{
    "fieldA": "Hello World!",
    "fieldB": None,
    "fieldC": "Hi World!"
}

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

lazy_schema-0.4.0.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

lazy_schema-0.4.0-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file lazy_schema-0.4.0.tar.gz.

File metadata

  • Download URL: lazy_schema-0.4.0.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.8.10 Linux/5.15.0-107-generic

File hashes

Hashes for lazy_schema-0.4.0.tar.gz
Algorithm Hash digest
SHA256 4f38b048cd16d76dc92441232814aa6e3c940a3029df178e836ff40ddd5dae10
MD5 809f60324e552908e6f692f421792949
BLAKE2b-256 d59be1ded099ee4f20d533770b8f201ab8c1863468d18217074c2907e47edbb7

See more details on using hashes here.

File details

Details for the file lazy_schema-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: lazy_schema-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.8.10 Linux/5.15.0-107-generic

File hashes

Hashes for lazy_schema-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 29714be5bc76d51e906a172e008605995522728081952137c621f91e8a90f7d1
MD5 84fafa28cc00382afc78d10c4089108d
BLAKE2b-256 652f3e4784058eb6acf78bd74caaef11c8ecc04a3268828ba25642d683e833a9

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