From 1c8c231d13a9dc233e6ed80112a465adeb078e30 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 11 Mar 2025 11:57:09 +0100 Subject: [PATCH] refactor(chalice): metafilters-autocomplete lazy initialization --- api/chalicelib/core/events.py | 8 +- .../core/sessions/sessions_metas.py | 131 +++++++++--------- 2 files changed, 72 insertions(+), 67 deletions(-) diff --git a/api/chalicelib/core/events.py b/api/chalicelib/core/events.py index dd6ca960a..081673644 100644 --- a/api/chalicelib/core/events.py +++ b/api/chalicelib/core/events.py @@ -1,8 +1,8 @@ from typing import Optional import schemas -from chalicelib.core.autocomplete import autocomplete from chalicelib.core import issues +from chalicelib.core.autocomplete import autocomplete from chalicelib.core.sessions import sessions_metas from chalicelib.utils import pg_client, helper from chalicelib.utils.TimeUTC import TimeUTC @@ -206,13 +206,13 @@ def search(text, event_type, project_id, source, key): rows = SUPPORTED_TYPES[event_type].get(project_id=project_id, value=text, key=key, source=source) elif event_type + "_MOBILE" in SUPPORTED_TYPES.keys(): rows = SUPPORTED_TYPES[event_type + "_MOBILE"].get(project_id=project_id, value=text, key=key, source=source) - elif event_type in sessions_metas.SUPPORTED_TYPES.keys(): + elif event_type in sessions_metas.supported_types().keys(): return sessions_metas.search(text, event_type, project_id) elif event_type.endswith("_IOS") \ - and event_type[:-len("_IOS")] in sessions_metas.SUPPORTED_TYPES.keys(): + and event_type[:-len("_IOS")] in sessions_metas.supported_types().keys(): return sessions_metas.search(text, event_type, project_id) elif event_type.endswith("_MOBILE") \ - and event_type[:-len("_MOBILE")] in sessions_metas.SUPPORTED_TYPES.keys(): + and event_type[:-len("_MOBILE")] in sessions_metas.supported_types().keys(): return sessions_metas.search(text, event_type, project_id) else: return {"errors": ["unsupported event"]} diff --git a/api/chalicelib/core/sessions/sessions_metas.py b/api/chalicelib/core/sessions/sessions_metas.py index 1b538ec9c..79cc8138c 100644 --- a/api/chalicelib/core/sessions/sessions_metas.py +++ b/api/chalicelib/core/sessions/sessions_metas.py @@ -1,76 +1,81 @@ +from functools import lru_cache + import schemas from chalicelib.core.autocomplete import autocomplete from chalicelib.utils.event_filter_definition import SupportedFilter -SUPPORTED_TYPES = { - schemas.FilterType.USER_OS: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_OS), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_OS)), - schemas.FilterType.USER_BROWSER: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_BROWSER), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_BROWSER)), - schemas.FilterType.USER_DEVICE: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_DEVICE), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_DEVICE)), - schemas.FilterType.USER_COUNTRY: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_COUNTRY), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_COUNTRY)), - schemas.FilterType.USER_CITY: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_CITY), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_CITY)), - schemas.FilterType.USER_STATE: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_STATE), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_STATE)), - schemas.FilterType.USER_ID: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ID), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ID)), - schemas.FilterType.USER_ANONYMOUS_ID: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ANONYMOUS_ID), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ANONYMOUS_ID)), - schemas.FilterType.REV_ID: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.REV_ID), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.REV_ID)), - schemas.FilterType.REFERRER: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.REFERRER), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.REFERRER)), - schemas.FilterType.UTM_CAMPAIGN: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.UTM_CAMPAIGN), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.UTM_CAMPAIGN)), - schemas.FilterType.UTM_MEDIUM: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.UTM_MEDIUM), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.UTM_MEDIUM)), - schemas.FilterType.UTM_SOURCE: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.UTM_SOURCE), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.UTM_SOURCE)), - # Mobile - schemas.FilterType.USER_OS_MOBILE: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_OS_MOBILE), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_OS_MOBILE)), - schemas.FilterType.USER_DEVICE_MOBILE: SupportedFilter( - get=autocomplete.generic_autocomplete_metas( - typename=schemas.FilterType.USER_DEVICE_MOBILE), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_DEVICE_MOBILE)), - schemas.FilterType.USER_COUNTRY_MOBILE: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_COUNTRY_MOBILE), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_COUNTRY_MOBILE)), - schemas.FilterType.USER_ID_MOBILE: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ID_MOBILE), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ID_MOBILE)), - schemas.FilterType.USER_ANONYMOUS_ID_MOBILE: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ANONYMOUS_ID_MOBILE), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ANONYMOUS_ID_MOBILE)), - schemas.FilterType.REV_ID_MOBILE: SupportedFilter( - get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.REV_ID_MOBILE), - query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.REV_ID_MOBILE)), -} +@lru_cache +def supported_types(): + return { + schemas.FilterType.USER_OS: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_OS), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_OS)), + schemas.FilterType.USER_BROWSER: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_BROWSER), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_BROWSER)), + schemas.FilterType.USER_DEVICE: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_DEVICE), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_DEVICE)), + schemas.FilterType.USER_COUNTRY: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_COUNTRY), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_COUNTRY)), + schemas.FilterType.USER_CITY: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_CITY), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_CITY)), + schemas.FilterType.USER_STATE: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_STATE), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_STATE)), + schemas.FilterType.USER_ID: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ID), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ID)), + schemas.FilterType.USER_ANONYMOUS_ID: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ANONYMOUS_ID), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ANONYMOUS_ID)), + schemas.FilterType.REV_ID: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.REV_ID), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.REV_ID)), + schemas.FilterType.REFERRER: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.REFERRER), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.REFERRER)), + schemas.FilterType.UTM_CAMPAIGN: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.UTM_CAMPAIGN), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.UTM_CAMPAIGN)), + schemas.FilterType.UTM_MEDIUM: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.UTM_MEDIUM), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.UTM_MEDIUM)), + schemas.FilterType.UTM_SOURCE: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.UTM_SOURCE), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.UTM_SOURCE)), + # Mobile + schemas.FilterType.USER_OS_MOBILE: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_OS_MOBILE), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_OS_MOBILE)), + schemas.FilterType.USER_DEVICE_MOBILE: SupportedFilter( + get=autocomplete.generic_autocomplete_metas( + typename=schemas.FilterType.USER_DEVICE_MOBILE), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_DEVICE_MOBILE)), + schemas.FilterType.USER_COUNTRY_MOBILE: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_COUNTRY_MOBILE), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_COUNTRY_MOBILE)), + schemas.FilterType.USER_ID_MOBILE: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ID_MOBILE), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ID_MOBILE)), + schemas.FilterType.USER_ANONYMOUS_ID_MOBILE: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ANONYMOUS_ID_MOBILE), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.USER_ANONYMOUS_ID_MOBILE)), + schemas.FilterType.REV_ID_MOBILE: SupportedFilter( + get=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.REV_ID_MOBILE), + query=autocomplete.generic_autocomplete_metas(typename=schemas.FilterType.REV_ID_MOBILE)), + + } def search(text: str, meta_type: schemas.FilterType, project_id: int): rows = [] - if meta_type not in list(SUPPORTED_TYPES.keys()): + if meta_type not in list(supported_types().keys()): return {"errors": ["unsupported type"]} - rows += SUPPORTED_TYPES[meta_type].get(project_id=project_id, text=text) + rows += supported_types()[meta_type].get(project_id=project_id, text=text) # for IOS events autocomplete # if meta_type + "_IOS" in list(SUPPORTED_TYPES.keys()): # rows += SUPPORTED_TYPES[meta_type + "_IOS"].get(project_id=project_id, text=text)