[docs]classSource(BaseModel):"""A source of news and information for RavenPack"""model_config=ConfigDict(populate_by_name=True,alias_generator=to_camel)id:strname:strvolume:Optional[int]=Nonedescription:Optional[str]=Noneentity_type:Literal["SRCE"]=Field(default="SRCE")publication_type:strlanguage:Optional[str]=Field(default=None)country:Optional[str]=Nonesource_rank:Optional[str]=Field(default=None)provider_id:strurl:Optional[str]=None
[docs]@model_validator(mode="before")@classmethoddefapply_second_alias_generator(cls,values):""" Applied before validating to replace some alias in the input @values so we can make the model in 3 ways: snake_case/camel_case/alias. This is required because not all endpoints are resolving the groupN into the correct field name. """values=values.copy()# keep original input unmutated for Unionsautosuggest_validation_alias_map={"key":"id","group1":"publicationType","group2":"language","group3":"country","group4":"sourceRank","metadata1":"providerId","metadata2":"url",}forkeyinautosuggest_validation_alias_map:ifkeyinvalues:values[autosuggest_validation_alias_map[key]]=values.pop(key)returnvalues