class Shelf(typesystem.Schema): id = typesystem.Integer(allow_null=True) organization = typesystem.Reference(Organization, allow_null=True) size = typesystem.Integer(allow_null=True) async def get_object(self) -> warehouse_models.Shelf: return await warehouse_models.Shelf.objects.get(id=self.id)
def __init__(self, username, table, columns=None): self.name = table["name"] self.url = url_for("table", username=username, table_id=table["identity"]) self.username = username self.table = table self.columns = columns self.query_limit = None self.query_offset = None self.uuid_filter = None self.search_term = None self.sort_func = None self.sort_reverse = False if columns is not None: fields = {} for column in columns: if column["datatype"] == "string": fields[column["identity"]] = typesystem.String( title=column["name"], max_length=100) elif column["datatype"] == "integer": fields[column["identity"]] = typesystem.Integer( title=column["name"]) self.schema = type("Schema", (typesystem.Schema, ), fields)
class Organization(typesystem.Schema): id = typesystem.Integer(allow_null=True) name = typesystem.String(max_length=50, allow_blank=True) user = typesystem.Reference(users_serializers.UserRef, allow_null=True) async def get_object(self) -> warehouse_models.Organization: return await warehouse_models.Organization.objects.get(id=self.id)
class AuthenticationResultType(typesystem.Schema): AccessToken = typesystem.String(pattern=r"[A-Za-z0-9_=.-]+") ExpiresIn = typesystem.Integer() TokenType = typesystem.String() RefreshToken = typesystem.String(pattern=r"[A-Za-z0-9_=.-]+") IdToken = typesystem.String(pattern=r"[A-Za-z0-9_=.-]+") NewDeviceMetadata = typesystem.Reference(NewDeviceMetadataType, allow_null=True)
class JSONRPCResponse(typesystem.Schema): jsonrpc = typesystem.String(pattern="2.0", trim_whitespace=False) id = typesystem.Union(any_of=[ typesystem.String(allow_null=True, min_length=1, trim_whitespace=False), typesystem.Integer(allow_null=True), ]) result = typesystem.Object()
class JSONRPCRequest(typesystem.Schema): jsonrpc = typesystem.String(pattern="2.0", trim_whitespace=False) id = typesystem.Union( any_of=[ typesystem.String(allow_null=True, min_length=1, trim_whitespace=False), typesystem.Integer(allow_null=True), ] ) params = typesystem.Union( any_of=[typesystem.Object(additional_properties=True), typesystem.Array()] ) method = typesystem.String()
class Settings(BaseSchema): enforce_https = typesystem.Boolean(default=False) mode = typesystem.Choice( choices=( ("proxy", "Proxy"), ("redirect", "Redirect"), ), default="proxy", ) headers = typesystem.Object(default={}, properties=typesystem.String(max_length=100)) ttl = typesystem.Integer(allow_null=True) certificate_path = typesystem.String(allow_null=True) key_path = typesystem.String(allow_null=True)
class Config(typesystem.Schema): port = typesystem.Integer() logLevel = typesystem.Choice( title="LogLevel", choices=[(x, x) for x in ["debug", "info", "warn", "error", "critical"]], ) # not supported # secondary = typesystem.Reference( # to="Config", allow_null=True, definitions=definitions # ) xxxAPI = typesystem.Reference(to=XXXAPI, allow_null=True, definitions=definitions)
class Transaction(typesystem.Schema): sender = typesystem.String(title='Sender account', format='uuid') recipient = typesystem.String(title='Recipient account', format='uuid') amount = typesystem.Integer(title='Transaction amount', exclusive_minimum=0) label = typesystem.String(title='Label', max_length=100, default='') created_at = typesystem.DateTime(title='Date created', default=datetime.utcnow()) @classmethod def validate(cls, *args, **kwargs): ret = super().validate(*args, **kwargs) if ret['sender'] == ret['recipient']: raise typesystem.ValidationError( text='Sender and recipient account should be different', code='identical_accounts' ) return ret
def app(): users = dashboard.MockDataSource( schema=typesystem.Schema( fields={ "pk": typesystem.Integer(title="Identity", read_only=True, default=dashboard.autoincrement()), "username": typesystem.String(title="Username", max_length=100), "is_admin": typesystem.Boolean(title="Is Admin", default=False), "joined": typesystem.DateTime(title="Joined", read_only=True, default=datetime.datetime.now), }), initial=[{ "username": f"user{i}@example.org", "is_admin": False, } for i in range(123)], ) user_table = dashboard.DashboardTable(ident="users", title="Users", datasource=users) admin = dashboard.Dashboard(tables=[user_table]) return Starlette(routes=[ Mount( "/admin", admin, name="dashboard", ), Mount("/statics", ..., name="static"), ])
class Example(typesystem.Schema): field = typesystem.Integer(default=0)
class Product(typesystem.Schema): name = typesystem.String(max_length=100, allow_blank=False) rating = typesystem.Integer(default=None)
class Album(typesystem.Schema): title = typesystem.String(max_length=100) release_year = typesystem.Integer() artist = typesystem.Reference(Artist, allow_null=True)
class ErrorSchema(typesystem.Schema): code = typesystem.Integer() message = typesystem.String() data = typesystem.Object(additional_properties=True)
class Wallet(typesystem.Schema): id = typesystem.String(title='Wallet ID') name = typesystem.String(title='Wallet name') balance = typesystem.Integer(title='Balance in pennies') last_transaction = typesystem.DateTime(title='Last transaction')
class Player(typesystem.Schema): name = typesystem.String() age = typesystem.Integer()
class FooSchema(typesystem.Schema): a = typesystem.Integer()
class NumberName(typesystem.Schema): pair = typesystem.Array([typesystem.Integer(), typesystem.String()])
class MealSchedule(typesystem.Schema): guest_id = typesystem.Integer() breakfast_at = typesystem.Time() dinner_at = typesystem.Time(allow_null=True)
class UserRef(typesystem.Schema): id = typesystem.Integer() async def get_object(self) -> users_models.User: return await users_models.User.objects.get(id=self.id)
class GameGuessSerializer(typesystem.Schema): number0 = typesystem.Integer(minimum=0, maximum=3) number1 = typesystem.Integer(minimum=0, maximum=3) number2 = typesystem.Integer(minimum=0, maximum=3)
"items": JSON_SCHEMA, # TODO: Should actually be a restricted subset "collectionFormat": typesystem.Choice(choices=["csv", "ssv", "tsv", "pipes", "multi"]), "default": typesystem.Any(), "maximum": typesystem.Number(), "exclusiveMaximum": typesystem.Boolean(), "minimum": typesystem.Number(), "exclusiveMinimum": typesystem.Boolean(), "maxLength": typesystem.Integer(), "minLength": typesystem.Integer(), "pattern": typesystem.String(allow_blank=True), "maxItems": typesystem.Integer(), "minItems": typesystem.Integer(), "uniqueItems": typesystem.Boolean(), "enum": typesystem.Array(items=typesystem.Any()), "multipleOf": typesystem.Integer(), },
class Album(typesystem.Schema): title = typesystem.String(max_length=100) release_year = typesystem.Integer() artist = typesystem.Nested(Artist)
class BarSchema(typesystem.Schema): id = typesystem.Integer(allow_null=True) foo = typesystem.Reference(to=FooSchema)
class Example(typesystem.Schema): field = typesystem.Integer(allow_null=True, default=0)
class Guest(typesystem.Schema): id = typesystem.Integer() name = typesystem.String() check_in = typesystem.DateTime() check_out = typesystem.DateTime(allow_null=True)
class Person(typesystem.Schema): name = typesystem.String(max_length=100, allow_blank=False) age = typesystem.Integer()
class Album(typesystem.Schema): title = typesystem.String(max_length=100) release_year = typesystem.Integer() artists = typesystem.Array(items=typesystem.Reference(Artist))
JSON_SCHEMA = ( typesystem.Object( properties={ "$ref": typesystem.String(), "type": typesystem.String() | typesystem.Array(items=typesystem.String()), "enum": typesystem.Array(unique_items=True, min_items=1), "definitions": typesystem.Object(additional_properties=typesystem.Reference( "JSONSchema", definitions=definitions)), # String "minLength": typesystem.Integer(minimum=0), "maxLength": typesystem.Integer(minimum=0), "pattern": typesystem.String(format="regex"), "format": typesystem.String(), # Numeric "minimum": typesystem.Number(), "maximum": typesystem.Number(), "exclusiveMinimum": typesystem.Number(), "exclusiveMaximum": typesystem.Number(),
class Box(typesystem.Schema): id = typesystem.Integer(allow_null=True) shelf = typesystem.Reference(Shelf, allow_null=True) async def get_object(self) -> warehouse_models.Box: return await warehouse_models.Box.objects.get(id=self.id)