from marshmallow import fields as ma_fields
from marshmallow import validate as ma_validate
from marshmallow.fields import Email
from ereuse_devicehub.marshmallow import NestedOn
from ereuse_devicehub.resources.models import STR_SIZE, STR_SM_SIZE
from ereuse_devicehub.resources.schemas import Thing
from ereuse_devicehub.teal import enums
from ereuse_devicehub.teal.marshmallow import EnumField, Phone, SanitizedStr
class Agent(Thing):
id = ma_fields.UUID(dump_only=True)
name = SanitizedStr(validate=ma_validate.Length(max=STR_SM_SIZE))
tax_id = SanitizedStr(
lower=True, validate=ma_validate.Length(max=STR_SM_SIZE), data_key='taxId'
)
country = EnumField(enums.Country)
telephone = Phone()
email = Email()
class Organization(Agent):
members = NestedOn('Membership')
default_of = NestedOn('Inventory')
class Membership(Thing):
organization = NestedOn(Organization)
individual = NestedOn('Individual')
id = SanitizedStr(lower=True, validate=ma_validate.Length(max=STR_SIZE))
class Individual(Agent):
member_of = NestedOn(Membership, many=True)
class Person(Individual):
pass
class System(Individual):