+22
-6
models.py
+22
-6
models.py
···
1
from datetime import datetime
2
from typing import Any, Dict, Optional
3
4
-
from pydantic import BaseModel, Field
5
6
7
class RecordEvent(BaseModel):
···
9
A model for record events that come from Tap, in Kafka mode
10
"""
11
12
-
live: bool
13
did: str
14
rev: str
15
collection: str
16
rkey: str
17
action: str
18
-
record: Optional[Dict[str, Any]]
19
-
cid: Optional[str]
20
21
22
class IdentityEvent(BaseModel):
···
37
38
id: int
39
type: str
40
-
record: RecordEvent
41
-
identity: IdentityEvent
42
43
44
# class AtKafkaOp(BaseModel):
···
1
+
import base64
2
+
3
from datetime import datetime
4
+
import logging
5
from typing import Any, Dict, Optional
6
7
+
from pydantic import BaseModel, Field, field_validator
8
+
9
+
logger = logging.getLogger(__name__)
10
11
12
class RecordEvent(BaseModel):
···
14
A model for record events that come from Tap, in Kafka mode
15
"""
16
17
+
live: Optional[bool] = False
18
did: str
19
rev: str
20
collection: str
21
rkey: str
22
action: str
23
+
record: Optional[Dict[str, Any]] = None
24
+
cid: Optional[str] = None
25
26
27
class IdentityEvent(BaseModel):
···
42
43
id: int
44
type: str
45
+
record: Optional[RecordEvent] = None
46
+
identity: Optional[IdentityEvent] = None
47
+
48
+
@field_validator("record", "identity", mode="before")
49
+
@classmethod
50
+
def decode_base64(cls, v: Any):
51
+
if v is not None and isinstance(v, str):
52
+
try:
53
+
return base64.b64decode(v).decode("utf-8")
54
+
except Exception as e:
55
+
logger.error(f"Error decoding event base64: {e}")
56
+
return v
57
+
return v
58
59
60
# class AtKafkaOp(BaseModel):