Reputation: 119
I have events represented like this:
event = {
"properties": {
"http.requestMethod": "POST",
"http.userAgent": "wget",
"device.product": "ASA",
"device.vendor": "Cisco"
}
}
I would like to represent and validate these events using pydantic, but I am required to split all of the different namespaces into their own classes like this:
from pydantic import BaseModel, Field
class Http(BaseModel):
http_requestmethod = Field(alias="http.requestMethod")
http_useragent = Field(alias="http.userAgent")
class Device(BaseModel):
device_product = Field(alias="device.product")
device_vendor = Field(alias="device.vendor")
Does anyone know how I can achieve this?
Upvotes: 2
Views: 529
Reputation: 32083
It is not entirely clear what you want to get as a result, but, for example, one of the cases may look like this:
from pydantic import BaseModel, Field, validator
event = {
"properties": {
"http.requestMethod": "POST",
"http.userAgent": "wget",
"device.product": "ASA",
"device.vendor": "Cisco"
}
}
class Http(BaseModel):
http_requestmethod: str = Field(..., alias="http.requestMethod")
http_useragent: str = Field(..., alias="http.userAgent")
class Device(BaseModel):
device_product: str = Field(..., alias="device.product")
device_vendor: str = Field(..., alias="device.vendor")
class Properties(BaseModel):
http: Http
device: Device
class Event(BaseModel):
properties: Properties
@validator('properties', pre=True)
def prop_validator(v):
return Properties(http=Http(**v).dict(by_alias=True),
device=Device(**v).dict(by_alias=True))
Upvotes: 1