* fix(chalice): fixed Math-operators validation refactor(chalice): search for sessions that have events for heatmaps * refactor(chalice): search for sessions that have at least 1 location event for heatmaps * fix(chalice): fixed Math-operators validation refactor(chalice): search for sessions that have events for heatmaps * refactor(chalice): search for sessions that have at least 1 location event for heatmaps * feat(chalice): get top 10 values for autocomplete CH * feat(chalice): autocomplete return top 10 with stats * fix(chalice): fixed autocomplete top 10 meta-filters * fix(chalice): fixed predefined metrics refactor(chalice): refactored schemas refactor(chalice): refactored routers refactor(chalice): refactored unprocessed sessions
39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
from typing import TypeVar, Annotated, Union
|
|
from enum import Enum as _Enum
|
|
from pydantic import BaseModel as _BaseModel
|
|
from pydantic import ConfigDict, TypeAdapter, Field
|
|
from pydantic.types import AnyType
|
|
|
|
|
|
def attribute_to_camel_case(snake_str: str) -> str:
|
|
components = snake_str.split("_")
|
|
return components[0] + ''.join(x.title() for x in components[1:])
|
|
|
|
|
|
def schema_extra(schema: dict, _):
|
|
props = {}
|
|
for k, v in schema.get('properties', {}).items():
|
|
if not v.get("doc_hidden", False):
|
|
props[k] = v
|
|
schema["properties"] = props
|
|
|
|
|
|
class BaseModel(_BaseModel):
|
|
model_config = ConfigDict(alias_generator=attribute_to_camel_case,
|
|
use_enum_values=True,
|
|
json_schema_extra=schema_extra)
|
|
|
|
|
|
class Enum(_Enum):
|
|
@classmethod
|
|
def has_value(cls, value) -> bool:
|
|
return value in cls._value2member_map_
|
|
|
|
|
|
T = TypeVar('T')
|
|
|
|
|
|
class ORUnion:
|
|
def __new__(cls, union_types: Union[AnyType], discriminator: str) -> T:
|
|
return lambda **args: TypeAdapter(Annotated[union_types, Field(discriminator=discriminator)]) \
|
|
.validate_python(args)
|