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
Release history Release notifications | RSS feed
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.3.0.tar.gz
(3.3 kB
view hashes)
Built Distribution
Close
Hashes for lazy_schema-0.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c66f1156eeed4ba7a07cfddd5206d47f412398c9c322d21292ac5a62d9d9c6e |
|
MD5 | 222af8a43b2f24fe6594738b38e26f17 |
|
BLAKE2b-256 | 6167e4f0506d670af20f9d7d82a3921ade1a28c7f54d1a803eceffeea0d26fa2 |