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