A collection of Osprey rules for ATProto
1ActionName=GetActionName()
2
3UserId: Entity[str] = EntityJson(
4 type='UserId',
5 path='$.did',
6 required=False,
7)
8
9Handle: Entity[str] = EntityJson(
10 type='Handle',
11 path='$.eventMetadata.handle',
12 required=False,
13)
14
15PdsHost: Entity[str] = EntityJson(
16 type='PdsHost',
17 path='$.eventMetadata.pdsHost',
18 required=False,
19)
20
21DisplayName: str = JsonData(
22 path='$.eventMetadata.profile.displayName',
23 required=False,
24 coerce_type=True,
25)
26
27Description: str = JsonData(
28 path='$.eventMetadata.profile.description',
29 required=False,
30 coerce_type=True,
31)
32
33FollowersCount: int = JsonData(
34 path='$.eventMetadata.profile.followersCount',
35 required=False,
36 coerce_type=True,
37)
38
39FollowingCount: int = JsonData(
40 path='$.eventMetadata.profile.followingCount',
41 required=False,
42 coerce_type=True,
43)
44
45PostsCount: int = JsonData(
46 path='$.eventMetadata.profile.postsCount',
47 required=False,
48 coerce_type=True,
49)
50
51Avatar: Optional[str] = JsonData(
52 path='$.eventMetadata.profile.avatar',
53 required=False,
54)
55
56Banner: Optional[str] = JsonData(
57 path='$.eventMetadata.profile.banner',
58 required=False,
59)
60
61HasAvatar = Avatar != None
62
63HasBanner = Banner != None
64
65AccountCreatedAt: Optional[str] = JsonData(
66 path='$.eventMetadata.didCreatedAt',
67 required=False,
68)
69
70AccountAgeSeconds: Optional[int] = JsonData(
71 path='$.eventMetadata.accountAge',
72 required=False,
73)
74
75AccountAgeSecondsUnwrapped: int = ResolveOptional(
76 optional_value=AccountAgeSeconds,
77 default_value=999999999,
78)
79
80OperationKind: Optional[str] = JsonData(
81 path='$.operation.action',
82 required=False,
83)
84
85IsOperation = OperationKind != None
86
87
88Second: int = 1
89Minute: int = Second * 60
90FiveMinute: int = Minute * 5
91TenMinute: int = Minute * 10
92ThirtyMinute: int = Minute * 30
93Hour: int = Minute * 60
94Day: int = Hour * 24
95Week: int = Day * 7