У меня есть общий родительский класс OMDManager, который обрабатывает общие функции, такие как get_api_assets(). Это позволяет мне сделать запрос на получение к API общим способом, передав любые необходимые мне параметры.
Код: Выделить всё
class OMDManager:
def __init__(self, omd_client: OpenMetadataClient):
self.omd_client = omd_client
def get_omd_assets(
self,
endpoint: str,
limit: int = 100,
params: Optional[Dict[str, Any]] = None
) -> list:
query_params = {"limit": limit}
if params:
query_params.update(params)
return self.omd_client.api_request_pages(endpoint=endpoint, params=query_params)
Мои дочерние классы на данный момент просто используют get_omd_assets() для получения ресурсов, например DashboardManager получает все информационные панели, а UserManager получает всех пользователей. На данный момент я просто вызываю get_omd_assets(), поскольку он передается из OMDManager, передавая соответствующие параметры, специфичные для панелей мониторинга или пользователей. Поэтому у них нет собственной реализации получения информационных панелей или пользователей.
Код: Выделить всё
class DashboardManager(OMDManager):
def function_for_db_manager():
do something ...
class UserManager(OMDManager):
def function_for_user_manager():
do something ...
Это означает, что когда я хочу получить информационные панели, я делаю что-то вроде этого
Код: Выделить всё
dashboards = db_manager.get_omd_assets(endpoint=endpoint, params={"service": myservice})
и для пользователей
Код: Выделить всё
users = user_manager.get_omd_assets(endpoint=endpoint, params={"isBot": "false"})
По моему мнению, благодаря этому классы становятся очень простыми. Однако интерфейс очень общий, каждый класс менеджера имеет только get_omd_assets, и вам нужно знать, какие параметры вы можете передать для конкретных конечных точек.
Мой вопрос о том, что лучше использовать. Оставьте все как есть, или мне следует сделать что-то вроде расширения функции get_omd_assets() в UserManager как get_users(), где функция принимает аргументы, такие как isBot ?
Код: Выделить всё
class UserManager(OMDManager):
def get_users(self, limit=100, is_bot=False):
params = {"isBot": is_bot, "limit": limit}
return self.get_omd_assets(endpoint="/users", params=params)
И если я это сделаю, как мне проводить тесты? Я уже тестировал get_omd_assets(), следует ли мне затем также реализовать тесты для get_users(), который по сути просто вызывает get_omd_assets() с конкретными аргументами?