class SCHEMA_CLS(BaseSchema): organization_addr = BackendOrganizationAddrField(required=True) device_id = DeviceIDField(required=True) device_label = fields.String(allow_none=True, missing=None) human_handle = HumanHandleField(allow_none=True, missing=None) signing_key = fields.SigningKey(required=True) private_key = fields.PrivateKey(required=True) # `profile` replaces `is_admin` field (which is still required for backward # compatibility), hence `None` is not allowed is_admin = fields.Boolean(required=True) profile = UserProfileField(allow_none=False) user_manifest_id = EntryIDField(required=True) user_manifest_key = fields.SecretKey(required=True) local_symkey = fields.SecretKey(required=True) @post_load def make_obj(self, data): # Handle legacy `is_admin` field default_profile = UserProfile.ADMIN if data.pop( "is_admin") else UserProfile.STANDARD try: profile = data["profile"] except KeyError: data["profile"] = default_profile else: if default_profile == UserProfile.ADMIN and profile != UserProfile.ADMIN: raise ValidationError( "Fields `profile` and `is_admin` have incompatible values" ) return LocalDevice(**data)
class SCHEMA_CLS(BaseSchema): type = fields.EnumCheckedConstant( LocalManifestType.LOCAL_USER_MANIFEST, required=True) base = fields.Nested(RemoteUserManifest.SCHEMA_CLS, required=True) need_sync = fields.Boolean(required=True) updated = fields.DateTime(required=True) last_processed_message = fields.Integer(required=True, validate=validate.Range(min=0)) workspaces = fields.FrozenList(fields.Nested( WorkspaceEntry.SCHEMA_CLS), required=True) @post_load def make_obj(self, data): data.pop("type") return LocalUserManifest(**data)
class SCHEMA_CLS(BaseSchema): type = fields.EnumCheckedConstant( LocalManifestType.LOCAL_FILE_MANIFEST, required=True) base = fields.Nested(RemoteFileManifest.SCHEMA_CLS, required=True) need_sync = fields.Boolean(required=True) updated = fields.DateTime(required=True) size = fields.Integer(required=True, validate=validate.Range(min=0)) blocksize = fields.Integer(required=True, validate=validate.Range(min=8)) blocks = fields.FrozenList(fields.FrozenList( fields.Nested(Chunk.SCHEMA_CLS)), required=True) @post_load def make_obj(self, data): data.pop("type") return LocalFileManifest(**data)
class SCHEMA_CLS(BaseSchema): type = fields.EnumCheckedConstant( LocalManifestType.LOCAL_FOLDER_MANIFEST, required=True) base = fields.Nested(RemoteFolderManifest.SCHEMA_CLS, required=True) need_sync = fields.Boolean(required=True) updated = fields.DateTime(required=True) children = fields.FrozenMap(EntryNameField(), EntryIDField(required=True), required=True) confined_entries = fields.FrozenSet(EntryIDField(required=True)) filtered_entries = fields.FrozenSet(EntryIDField(required=True)) @post_load def make_obj(self, data): data.pop("type") data.setdefault("confined_entries", frozenset()) data.setdefault("filtered_entries", frozenset()) return LocalFolderManifest(**data)
class SCHEMA_CLS(OneOfSchema, BaseSchema): type_field = "type" base = fields.Nested(BaseRemoteManifest.SCHEMA_CLS, required=True) need_sync = fields.Boolean(required=True) updated = fields.DateTime(required=True) @property def type_schemas(self): return { LocalManifestType.LOCAL_FILE_MANIFEST: LocalFileManifest.SCHEMA_CLS, LocalManifestType.LOCAL_FOLDER_MANIFEST: LocalFolderManifest.SCHEMA_CLS, LocalManifestType.LOCAL_WORKSPACE_MANIFEST: LocalWorkspaceManifest.SCHEMA_CLS, LocalManifestType.LOCAL_USER_MANIFEST: LocalUserManifest.SCHEMA_CLS, } def get_obj_type(self, obj): return obj["type"]
class APIV1_UserFindReqSchema(BaseReqSchema): query = fields.String(missing=None) omit_revoked = fields.Boolean(missing=False) page = fields.Int(missing=1, validate=lambda n: n > 0) per_page = fields.Integer(missing=100, validate=lambda n: 0 < n <= 100)
class HumanFindResultItemSchema(BaseSchema): user_id = UserIDField(required=True) human_handle = HumanHandleField(allow_none=True, missing=None) revoked = fields.Boolean(required=True)
class BirdSchema(BaseSchema): animal_type = fields_constant(bird) flying = fields.Boolean()
class BirdSchema(BaseSchema): flying = fields.Boolean(required=True)
class RealmStatusRepSchema(BaseRepSchema): in_maintenance = fields.Boolean(required=True) maintenance_type = MaintenanceTypeField(allow_none=True) maintenance_started_on = fields.DateTime(required=True, allow_none=True) maintenance_started_by = DeviceIDField(required=True, allow_none=True) encryption_revision = fields.Integer(required=True)
class EventsListenReqSchema(BaseReqSchema): wait = fields.Boolean(missing=True)
class APIV1_OrganizationStatusRepSchema(BaseRepSchema): is_bootstrapped = fields.Boolean(required=True) expiration_date = fields.DateTime(allow_none=True, required=False)
class InviteNewDeviceReqSchema(BaseReqSchema): type = fields.EnumCheckedConstant(InvitationType.DEVICE, required=True) send_email = fields.Boolean(required=True)
class InviteNewUserReqSchema(BaseReqSchema): type = fields.EnumCheckedConstant(InvitationType.USER, required=True) claimer_email = fields.String(required=True) send_email = fields.Boolean(required=True)