File size: 2,244 Bytes
161d75f
a725af0
161d75f
21dae66
161d75f
 
a725af0
161d75f
21dae66
161d75f
 
21dae66
a725af0
161d75f
21dae66
161d75f
21dae66
a725af0
161d75f
21dae66
161d75f
21dae66
a725af0
161d75f
21dae66
161d75f
21dae66
 
 
 
 
161d75f
 
21dae66
 
 
 
 
161d75f
 
21dae66
a725af0
161d75f
21dae66
161d75f
21dae66
 
 
 
 
161d75f
 
21dae66
a725af0
161d75f
21dae66
161d75f
21dae66
 
 
 
 
161d75f
 
21dae66
a725af0
161d75f
21dae66
161d75f
 
 
 
 
 
 
 
 
 
 
21dae66
161d75f
 
21dae66
161d75f
 
88563b5
a725af0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from pydantic import BaseModel, Field
from typing import Literal, List, Union, Optional


class Behavior(BaseModel):
    type: str
    description: Optional[str] = None  # Making the description field optional


# --- Specific Behavior classes ---
class AbnormalBreathing(Behavior):
    type: Literal["abnormal breathing"]
    description: Optional[Literal["Problems breathing, breathing sounds"]] = None


class CrashFalling(Behavior):
    type: Literal["crash, falling from the sky"]
    description: Optional[Literal["Suddenly falling from the sky"]] = None


class Diarrhea(Behavior):
    type: Literal["diarrhea"]
    description: Optional[Literal["Observed diarrhea"]] = None


class Lameness(Behavior):
    type: Literal["lameness"]
    description: Optional[
        Literal["Apparent limping or not able to walk properly"]
    ] = None


class Neurological(Behavior):
    type: Literal["neurological"]
    description: Optional[
        Literal["Circling, incoordination, tremors, convulsions, fast eye movements"]
    ] = None


class OtherAbnormalBehavior(Behavior):
    type: Literal["other abnormal behavior"]
    description: Optional[Literal["Other than weakness, other than neurologic"]] = None


class UnableToFly(Behavior):
    type: Literal["unable to fly"]
    description: Optional[
        Literal["Animal alert and tries to fly but can not take off"]
    ] = None


class Vomiting(Behavior):
    type: Literal["vomiting"]
    description: Optional[Literal["Throwing up undigested food, regurgitating"]] = None


class Weakness(Behavior):
    type: Literal["weakness"]
    description: Optional[
        Literal["Non responsive, does not fly away when approached, lethargy"]
    ] = None


class NoChanges(Behavior):
    type: Literal["no changes"]
    description: Optional[Literal["Animal is acting normally"]] = None


# Union of all possible behaviors
BehaviorType = Union[
    AbnormalBreathing,
    CrashFalling,
    Diarrhea,
    Lameness,
    Neurological,
    OtherAbnormalBehavior,
    UnableToFly,
    Vomiting,
    Weakness,
    NoChanges,
]


# Main class that logs multiple behaviors
class Behaviors(BaseModel):
    behaviors_radio: str  # e.g., "Yes"
    behaviors_type: Optional[List[BehaviorType]] = None