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 hashes)

Uploaded Source

Built Distribution

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

Uploaded Python 3

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