A descriptor package
Project description
descriptor
import datetime
import json
import typing
from descriptor import validator
from descriptor.base import Field, ValidatableField, TransientField
from descriptor.error import FieldSetError
from descriptor.support.base import BaseDecoder
from descriptor.support.interface import Serializable
from descriptor.support.json import JSONEncoder, HookFactory
class DataTest(Serializable):
a: int = Field('a', 'aaa')
b: float = ValidatableField('b', '1.1 ≤ bbb ≤ 10').add_validator(validator.MaxMinValidator(1.1, 10))
c: str = ValidatableField('c', 'ccc not blank').add_validator(validator.NotBlankValidator())
d: datetime.timedelta = TransientField('d', 'Need to check')
e: bool = Field('e', 'none')
f: datetime.datetime = Field('f')
def __init__(self):
self.a = 1
self.b = 2.1
self.d = datetime.datetime.now() - datetime.datetime.min
self.c = 'c'
self.f = datetime.datetime.now()
class JSONEncoderTest(JSONEncoder):
def default(self, o):
if isinstance(o, datetime.datetime):
return o.strftime('%Y-%m-%d %H:%M:%S')
return super().default(o)
class JSONDecoderTest(BaseDecoder):
def _default(self, t: typing.Optional[type], val: typing.Any) -> typing.Any:
if issubclass(t, datetime.datetime) and isinstance(val, str):
return datetime.datetime.strptime(val, '%Y-%m-%d %H:%M:%S')
return super()._default(t, val)
print(json.dumps(DataTest(), cls=JSONEncoderTest))
print(json.loads('{"a": 1, "b": 2.1, "c": "c", "f": "2021-09-03 13:57:54"}',
object_hook=HookFactory.make_hook(JSONDecoderTest(DataTest))))
try:
DataTest().b = 100.
except FieldSetError as e:
print(repr(e))
try:
DataTest().c = 100
except FieldSetError as e:
print(repr(e))
try:
DataTest().c = ' '
except FieldSetError as e:
print(repr(e))
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
field-descriptor-1.0.0.tar.gz
(8.6 kB
view hashes)
Built Distribution
Close
Hashes for field_descriptor-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 503c423e596dc37c6e2e7ad8adde54d3fe27f1f8fc79efd787fd0c5aa3cd7b5b |
|
MD5 | c19ba4071cd0bb8e213582915db3ad58 |
|
BLAKE2b-256 | 37bfdb657aaa352a0e84bf8861799ba7b54fca9a5c312884510783fda2411bc7 |