def __init__(self): self.db = MongoClient(config.environ['database']).goatwars self.goats = self.db.goats self.factory = dataclass_factory.Factory() self.sync_all_goats() self.field = list()
@dataclass class Book: title: str price: int author: str = "Unknown author" data = { "title": "Fahrenheit 451", "price": 100, } invalid_data = { "title": "1984", "price": -100, } def validate_book(book: Book) -> Book: if not book.title: raise ValueError("Empty title") if book.price <= 0: raise ValueError("InvalidPrice") return book factory = dataclass_factory.Factory( schemas={Book: Schema(post_parse=validate_book)}) book = factory.load(data, Book) # No error other_book = factory.load(invalid_data, Book) # ValueError: InvalidPrice
from dataclasses import dataclass import dataclass_factory from dataclass_factory import Schema @dataclass class Book: title: str price: int extra: str = "" data = { "title": "Fahrenheit 451", "price": 100, "extra": "some extra string" } # using `only`: factory = dataclass_factory.Factory(schemas={Book: Schema(only=["title", "price"])}) book: Book = factory.load(data, Book) # Same as Book(title="Fahrenheit 451", price=100) serialized = factory.dump(book) # no `extra` key will be in serialized # using `exclude` factory = dataclass_factory.Factory(schemas={Book: Schema(exclude=["extra"])}) book: Book = factory.load(data, Book) # Same as Book(title="Fahrenheit 451", price=100) serialized = factory.dump(book) # no `extra` key will be in serialized
from dataclasses import dataclass import dataclass_factory @dataclass class Person: name: str @dataclass class Book: title: str price: int author: Person data = { "title": "Fahrenheit 451", "price": 100, "author": { "name": "Ray Bradbury" } } factory = dataclass_factory.Factory() # Book(title="Fahrenheit 451", price=100, author=Person("Ray Bradbury")) book: Book = factory.load(data, Book) serialized = factory.dump(book)
from dataclasses import dataclass import dataclass_factory from dataclass_factory import Schema @dataclass class Book: title: str price: int _total: int = 0 data = { "title": "Fahrenheit 451", "price": 100, "_total": 1000, } factory = dataclass_factory.Factory(default_schema=Schema(skip_internal=True)) book: Book = factory.load(data, Book) # Same as Book(title="Fahrenheit 451", price=100) serialized = factory.dump(book) # no `_total` key will be produced
def __init__(self): self.factory = dataclass_factory.Factory() self.sync_all_users()
from dataclasses import dataclass import dataclass_factory from dataclass_factory import Schema @dataclass class Book: title: str price: int data = { "title": "Fahrenheit 451", "book price": 100, } book_schema = Schema(name_mapping={"price": "book price"}) factory = dataclass_factory.Factory(schemas={Book: book_schema}) book: Book = factory.load(data, Book) serialized = factory.dump(book) print(book)
from dataclasses import dataclass import dataclass_factory from dataclass_factory import Schema @dataclass class Period: from_: int to_: int data = { "from_": 1, "to_": 100, } factory = dataclass_factory.Factory(default_schema=Schema( trim_trailing_underscore=False)) period = factory.load(data, Period) factory.dump(period)
def load_schema(schema, args: dict) -> dict: factory = dataclass_factory.Factory() selection = factory.load(args, schema) serialized: dict = factory.dump(selection) return serialized
from dataclass_factory import Schema @dataclass class Book: title: str price: int _author: str = "Unknown author" data = { "title": "Fahrenheit 451", "price": 100, } class DataSchema(Schema[Any]): skip_internal = True def post_parse(self, data): print("parsing done") return data factory = dataclass_factory.Factory( schemas={Book: DataSchema(trim_trailing_underscore=False)}) book: Book = factory.load( data, Book) # Same as Book(title="Fahrenheit 451", price=100) serialized = factory.dump(book)
from typing import Optional, List from dataclasses import dataclass, field import dataclass_factory from dataclass_factory import Schema @dataclass class Book: title: str price: Optional[int] = None authors: List[str] = field(default_factory=list) data = { "title": "Fahrenheit 451", } factory = dataclass_factory.Factory(default_schema=Schema(omit_default=True)) book = Book(title="Fahrenheit 451", price=None, authors=[]) serialized = factory.dump( book) # no `price` and `authors` key will be produced assert data == serialized
def __init__(self): self.db = MongoClient(config.environ['database']).library self.books = self.db.books self.factory = dataclass_factory.Factory() self.sync_all_books()
year: str = "" rated: str = "" released: str = "" runtime: str = "" genre: str = "" director: str = "" writer: str = "" actors: str = "" plot: str = "" language: str = "" country: str = "" awards: str = "" poster: str = "" metascore: str = "" imdb_rating: str = "" imdb_votes: str = "" imdb_id: str = "" type: str = "" total_seasons: str = "" response: str = "" @dataclass class Movies: movies_list: List[UniqueMovie] = field(default_factory=list) mapping_factory = dataclass_factory.Factory(schemas={UniqueMovie: Schema( name_mapping={"imdb_rating": "imdbRating", "imdb_votes": "imdbVotes", "imdb_id": "imdbID", "total_seasons": "totalSeasons"}, name_style=NameStyle.camel)})