from marshmallow import Schema, fields, post_dump class PaginatedApiResponseSchema(Schema): SKIP_NONE_FIELDS = ("previous", "next") count = fields.Int() limit = fields.Int() previous = fields.Url() next = fields.Url() results = fields.List(fields.Dict(), attribute="items") @post_dump def remove_skip_none_fields(self, data, *args, **kwargs): return { key: value for key, value in data.items() if not (key in self.SKIP_NONE_FIELDS and value is None) } class ResourceGroupSchema(Schema): id = fields.Str(attribute="external_id") name = fields.Str() class ResourceGroupsResponseSchema(PaginatedApiResponseSchema): results = fields.List( fields.Nested(ResourceGroupSchema), attribute="items" ) class ClaimResponseSchema(Schema): pass class ClaimNameSchema(Schema): id = fields.Str(attribute="external_id") friendly = fields.Str() class ClaimNamesResponseSchema(PaginatedApiResponseSchema): results = fields.List(fields.Nested(ClaimNameSchema), attribute="items") class ClaimValueSchema(Schema): id = fields.Str(attribute="external_id") friendly = fields.Str() components = fields.Dict() class ClaimValuesResponseSchema(PaginatedApiResponseSchema): results = fields.List(fields.Nested(ClaimValueSchema), attribute="items") class UserSchema(Schema): id = fields.Str(attribute="sub") email = fields.Email() given_name = fields.Str() family_name = fields.Str() status = fields.Str() class UsersResponseSchema(PaginatedApiResponseSchema): results = fields.List(fields.Nested(UserSchema), attribute="items") class UserDetailsResponseSchema(UserSchema): preferred_username = fields.Str() business_unit = fields.Str() job_category = fields.Str() job_title = fields.Str() personnel_type = fields.Str() location = fields.Str() is_vip = fields.Boolean() is_sony_employee = fields.Boolean() supervisor_email = fields.Email() supervisor_name = fields.Str()