# [DEF:get_dataset_structure:Module] # # @SEMANTICS: superset, dataset, structure, debug, json # @PURPOSE: Этот модуль предназначен для получения и сохранения структуры данных датасета из Superset. Он используется для отладки и анализа данных, возвращаемых API. # @LAYER: App # @RELATION: DEPENDS_ON -> superset_tool.client # @RELATION: DEPENDS_ON -> superset_tool.utils.init_clients # @RELATION: DEPENDS_ON -> superset_tool.utils.logger # @PUBLIC_API: get_and_save_dataset # [SECTION: IMPORTS] import argparse import json from superset_tool.utils.init_clients import setup_clients from superset_tool.utils.logger import SupersetLogger # [/SECTION] # [DEF:get_and_save_dataset:Function] # @PURPOSE: Получает структуру датасета из Superset и сохраняет ее в JSON-файл. # @RELATION: CALLS -> setup_clients # @RELATION: CALLS -> superset_client.get_dataset # @PARAM: env (str) - Среда (dev, prod, и т.д.) для подключения. # @PARAM: dataset_id (int) - ID датасета для получения. # @PARAM: output_path (str) - Путь для сохранения JSON-файла. def get_and_save_dataset(env: str, dataset_id: int, output_path: str): """ Получает структуру датасета и сохраняет в файл. """ logger = SupersetLogger(name="DatasetStructureRetriever") logger.info("[get_and_save_dataset][Enter] Starting to fetch dataset structure for ID %d from env '%s'.", dataset_id, env) try: clients = setup_clients(logger=logger) superset_client = clients.get(env) if not superset_client: logger.error("[get_and_save_dataset][Failure] Environment '%s' not found.", env) return dataset_response = superset_client.get_dataset(dataset_id) dataset_data = dataset_response.get('result') if not dataset_data: logger.error("[get_and_save_dataset][Failure] No result in dataset response.") return with open(output_path, 'w', encoding='utf-8') as f: json.dump(dataset_data, f, ensure_ascii=False, indent=4) logger.info("[get_and_save_dataset][Success] Dataset structure saved to %s.", output_path) except Exception as e: logger.error("[get_and_save_dataset][Failure] An error occurred: %s", e, exc_info=True) # [/DEF:get_and_save_dataset:Function] if __name__ == "__main__": parser = argparse.ArgumentParser(description="Получение структуры датасета из Superset.") parser.add_argument("--dataset-id", required=True, type=int, help="ID датасета.") parser.add_argument("--env", required=True, help="Среда для подключения (например, dev).") parser.add_argument("--output-path", default="dataset_structure.json", help="Путь для сохранения JSON-файла.") args = parser.parse_args() get_and_save_dataset(args.env, args.dataset_id, args.output_path) # [/DEF:get_dataset_structure:Module]