1from marshmallow import Schema, fields 2 3 4class PetSchema(Schema): 5 description = dict(id="Pet id", name="Pet name", password="Password") 6 id = fields.Int(dump_only=True, metadata={"description": description["id"]}) 7 name = fields.Str( 8 required=True, 9 metadata={ 10 "description": description["name"], 11 "deprecated": False, 12 "allowEmptyValue": False, 13 }, 14 ) 15 password = fields.Str( 16 load_only=True, metadata={"description": description["password"]} 17 ) 18 19 20class SampleSchema(Schema): 21 runs = fields.Nested("RunSchema", many=True) 22 23 count = fields.Int() 24 25 26class RunSchema(Schema): 27 sample = fields.Nested(SampleSchema) 28 29 30class AnalysisSchema(Schema): 31 sample = fields.Nested(SampleSchema) 32 33 34class AnalysisWithListSchema(Schema): 35 samples = fields.List(fields.Nested(SampleSchema)) 36 37 38class PatternedObjectSchema(Schema): 39 count = fields.Int(dump_only=True, metadata={"x-count": 1}) 40 count2 = fields.Int(dump_only=True, metadata={"x_count2": 2}) 41 42 43class SelfReferencingSchema(Schema): 44 id = fields.Int() 45 single = fields.Nested(lambda: SelfReferencingSchema()) 46 many = fields.Nested(lambda: SelfReferencingSchema(many=True)) 47 48 49class OrderedSchema(Schema): 50 field1 = fields.Int() 51 field2 = fields.Int() 52 field3 = fields.Int() 53 field4 = fields.Int() 54 field5 = fields.Int() 55 56 class Meta: 57 ordered = True 58 59 60class DefaultValuesSchema(Schema): 61 number_auto_default = fields.Int(load_default=12) 62 number_manual_default = fields.Int(load_default=12, metadata={"default": 42}) 63 string_callable_default = fields.Str(load_default=lambda: "Callable") 64 string_manual_default = fields.Str( 65 load_default=lambda: "Callable", metadata={"default": "Manual"} 66 ) 67 numbers = fields.List(fields.Int, load_default=list) 68 69 70class CategorySchema(Schema): 71 id = fields.Int() 72 name = fields.Str(required=True) 73 breed = fields.Str(dump_only=True) 74 75 76class CustomList(fields.List): 77 pass 78 79 80class CustomStringField(fields.String): 81 pass 82 83 84class CustomIntegerField(fields.Integer): 85 pass 86