exabel 8.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- exabel/__init__.py +1 -0
- exabel/client/__init__.py +0 -0
- exabel/client/api/__init__.py +0 -0
- exabel/client/api/api_client/__init__.py +0 -0
- exabel/client/api/api_client/calendar_api_client.py +43 -0
- exabel/client/api/api_client/data_set_api_client.py +37 -0
- exabel/client/api/api_client/derived_signal_api_client.py +31 -0
- exabel/client/api/api_client/entity_api_client.py +75 -0
- exabel/client/api/api_client/exabel_api_group.py +38 -0
- exabel/client/api/api_client/grpc/__init__.py +0 -0
- exabel/client/api/api_client/grpc/base_grpc_client.py +85 -0
- exabel/client/api/api_client/grpc/calendar_grpc_client.py +61 -0
- exabel/client/api/api_client/grpc/data_set_grpc_client.py +45 -0
- exabel/client/api/api_client/grpc/derived_signal_grpc_client.py +47 -0
- exabel/client/api/api_client/grpc/entity_grpc_client.py +91 -0
- exabel/client/api/api_client/grpc/holiday_grpc_client.py +63 -0
- exabel/client/api/api_client/grpc/kpi_grpc_client.py +71 -0
- exabel/client/api/api_client/grpc/library_grpc_client.py +82 -0
- exabel/client/api/api_client/grpc/namespace_grpc_client.py +26 -0
- exabel/client/api/api_client/grpc/prediction_model_grpc_client.py +28 -0
- exabel/client/api/api_client/grpc/relationship_grpc_client.py +92 -0
- exabel/client/api/api_client/grpc/signal_grpc_client.py +78 -0
- exabel/client/api/api_client/grpc/tag_grpc_client.py +67 -0
- exabel/client/api/api_client/grpc/time_series_grpc_client.py +75 -0
- exabel/client/api/api_client/grpc/user_grpc_client.py +30 -0
- exabel/client/api/api_client/holiday_api_client.py +43 -0
- exabel/client/api/api_client/kpi_api_client.py +58 -0
- exabel/client/api/api_client/library_api_client.py +72 -0
- exabel/client/api/api_client/namespace_api_client.py +16 -0
- exabel/client/api/api_client/prediction_model_api_client.py +16 -0
- exabel/client/api/api_client/relationship_api_client.py +66 -0
- exabel/client/api/api_client/signal_api_client.py +37 -0
- exabel/client/api/api_client/tag_api_client.py +55 -0
- exabel/client/api/api_client/time_series_api_client.py +51 -0
- exabel/client/api/api_client/user_api_client.py +22 -0
- exabel/client/api/bulk_import.py +266 -0
- exabel/client/api/bulk_insert.py +165 -0
- exabel/client/api/calendar_api.py +143 -0
- exabel/client/api/data_classes/__init__.py +0 -0
- exabel/client/api/data_classes/company.py +28 -0
- exabel/client/api/data_classes/company_kpi_mapping_results.py +59 -0
- exabel/client/api/data_classes/company_kpi_model_result.py +38 -0
- exabel/client/api/data_classes/company_kpi_models.py +44 -0
- exabel/client/api/data_classes/data_set.py +101 -0
- exabel/client/api/data_classes/derived_signal.py +258 -0
- exabel/client/api/data_classes/entity.py +86 -0
- exabel/client/api/data_classes/entity_type.py +67 -0
- exabel/client/api/data_classes/fiscal_period.py +48 -0
- exabel/client/api/data_classes/folder.py +79 -0
- exabel/client/api/data_classes/folder_accessor.py +47 -0
- exabel/client/api/data_classes/folder_item.py +156 -0
- exabel/client/api/data_classes/group.py +57 -0
- exabel/client/api/data_classes/kpi.py +60 -0
- exabel/client/api/data_classes/kpi_hierarchy.py +81 -0
- exabel/client/api/data_classes/kpi_mapping_group_reference.py +30 -0
- exabel/client/api/data_classes/kpi_mapping_model.py +31 -0
- exabel/client/api/data_classes/kpi_mapping_result_data.py +107 -0
- exabel/client/api/data_classes/kpi_model.py +42 -0
- exabel/client/api/data_classes/kpi_model_data.py +105 -0
- exabel/client/api/data_classes/kpi_model_run.py +54 -0
- exabel/client/api/data_classes/kpi_model_runs.py +39 -0
- exabel/client/api/data_classes/kpi_model_weight_groups.py +90 -0
- exabel/client/api/data_classes/kpi_screen_results.py +38 -0
- exabel/client/api/data_classes/kpi_source.py +23 -0
- exabel/client/api/data_classes/model_quality.py +31 -0
- exabel/client/api/data_classes/model_results.py +59 -0
- exabel/client/api/data_classes/namespace.py +33 -0
- exabel/client/api/data_classes/paging_result.py +42 -0
- exabel/client/api/data_classes/prediction_model_run.py +126 -0
- exabel/client/api/data_classes/relationship.py +79 -0
- exabel/client/api/data_classes/relationship_type.py +73 -0
- exabel/client/api/data_classes/request_error.py +91 -0
- exabel/client/api/data_classes/signal.py +52 -0
- exabel/client/api/data_classes/tag.py +105 -0
- exabel/client/api/data_classes/time_series.py +271 -0
- exabel/client/api/data_classes/user.py +49 -0
- exabel/client/api/data_set_api.py +93 -0
- exabel/client/api/derived_signal_api.py +75 -0
- exabel/client/api/entity_api.py +308 -0
- exabel/client/api/error_handler.py +105 -0
- exabel/client/api/export_api.py +291 -0
- exabel/client/api/holiday_api.py +122 -0
- exabel/client/api/kpi_api.py +215 -0
- exabel/client/api/library_api.py +195 -0
- exabel/client/api/namespace_api.py +42 -0
- exabel/client/api/pageable_resource.py +44 -0
- exabel/client/api/prediction_model_api.py +29 -0
- exabel/client/api/proto_utils.py +22 -0
- exabel/client/api/relationship_api.py +401 -0
- exabel/client/api/resource_creation_result.py +262 -0
- exabel/client/api/search_service.py +234 -0
- exabel/client/api/signal_api.py +155 -0
- exabel/client/api/tag_api.py +146 -0
- exabel/client/api/time_series_api.py +686 -0
- exabel/client/api/user_api.py +33 -0
- exabel/client/client_config.py +104 -0
- exabel/client/exabel_client.py +109 -0
- exabel/examples/__init__.py +0 -0
- exabel/examples/create_time_series_example.py +96 -0
- exabel/examples/get_company_example.py +103 -0
- exabel/query/__init__.py +0 -0
- exabel/query/column.py +53 -0
- exabel/query/dashboard.py +41 -0
- exabel/query/literal.py +25 -0
- exabel/query/predicate.py +53 -0
- exabel/query/query.py +30 -0
- exabel/query/signals.py +84 -0
- exabel/query/table.py +9 -0
- exabel/scripts/__init__.py +0 -0
- exabel/scripts/actions.py +57 -0
- exabel/scripts/base_script.py +124 -0
- exabel/scripts/check_company_identifiers_in_csv.py +128 -0
- exabel/scripts/command_line_script.py +31 -0
- exabel/scripts/create_data_set.py +70 -0
- exabel/scripts/create_derived_signal.py +79 -0
- exabel/scripts/create_entity.py +54 -0
- exabel/scripts/create_entity_mapping_from_csv.py +238 -0
- exabel/scripts/create_entity_type.py +66 -0
- exabel/scripts/create_folder.py +31 -0
- exabel/scripts/create_prediction_model_run.py +39 -0
- exabel/scripts/create_relationship.py +58 -0
- exabel/scripts/create_relationship_type.py +61 -0
- exabel/scripts/create_signal.py +56 -0
- exabel/scripts/csv_script.py +108 -0
- exabel/scripts/csv_script_with_entity_mapping.py +49 -0
- exabel/scripts/delete_data_set.py +30 -0
- exabel/scripts/delete_entities.py +96 -0
- exabel/scripts/delete_entity.py +48 -0
- exabel/scripts/delete_entity_type.py +30 -0
- exabel/scripts/delete_folder.py +31 -0
- exabel/scripts/delete_relationship.py +47 -0
- exabel/scripts/delete_relationship_type.py +31 -0
- exabel/scripts/delete_signal.py +30 -0
- exabel/scripts/delete_time_series.py +110 -0
- exabel/scripts/delete_time_series_point.py +55 -0
- exabel/scripts/delete_time_series_points.py +118 -0
- exabel/scripts/delete_time_series_points_from_file.py +108 -0
- exabel/scripts/export_data.py +49 -0
- exabel/scripts/export_signals.py +125 -0
- exabel/scripts/file_utils.py +44 -0
- exabel/scripts/get_data_set.py +34 -0
- exabel/scripts/get_entity.py +33 -0
- exabel/scripts/get_entity_type.py +30 -0
- exabel/scripts/get_folder.py +32 -0
- exabel/scripts/get_relationship.py +56 -0
- exabel/scripts/get_relationship_type.py +33 -0
- exabel/scripts/get_signal.py +31 -0
- exabel/scripts/get_time_series.py +80 -0
- exabel/scripts/list_data_sets.py +26 -0
- exabel/scripts/list_entities.py +94 -0
- exabel/scripts/list_entity_types.py +24 -0
- exabel/scripts/list_folder_accessors.py +34 -0
- exabel/scripts/list_folders.py +21 -0
- exabel/scripts/list_groups.py +20 -0
- exabel/scripts/list_items.py +39 -0
- exabel/scripts/list_relationship_types.py +33 -0
- exabel/scripts/list_relationships.py +81 -0
- exabel/scripts/list_signals.py +53 -0
- exabel/scripts/list_time_series.py +182 -0
- exabel/scripts/list_users.py +20 -0
- exabel/scripts/load_entities_from_csv.py +140 -0
- exabel/scripts/load_relationships_from_csv.py +203 -0
- exabel/scripts/load_signals_from_csv.py +75 -0
- exabel/scripts/load_time_series_from_csv.py +10 -0
- exabel/scripts/load_time_series_from_file.py +188 -0
- exabel/scripts/load_time_series_metadata_from_file.py +122 -0
- exabel/scripts/move_items.py +41 -0
- exabel/scripts/search_entities.py +109 -0
- exabel/scripts/share_folder.py +44 -0
- exabel/scripts/sql/__init__.py +0 -0
- exabel/scripts/sql/read_athena.py +58 -0
- exabel/scripts/sql/read_bigquery.py +49 -0
- exabel/scripts/sql/read_snowflake.py +96 -0
- exabel/scripts/sql/sql_script.py +52 -0
- exabel/scripts/unshare_folder.py +35 -0
- exabel/scripts/update_data_set.py +115 -0
- exabel/scripts/update_entity_type.py +74 -0
- exabel/scripts/update_folder.py +39 -0
- exabel/scripts/update_relationship_type.py +78 -0
- exabel/scripts/upsert_time_series_unit.py +79 -0
- exabel/scripts/utils.py +119 -0
- exabel/services/__init__.py +0 -0
- exabel/services/csv_entity_loader.py +269 -0
- exabel/services/csv_exception.py +5 -0
- exabel/services/csv_loading_constants.py +9 -0
- exabel/services/csv_loading_result.py +5 -0
- exabel/services/csv_reader.py +83 -0
- exabel/services/csv_relationship_loader.py +546 -0
- exabel/services/csv_time_series_loader.py +86 -0
- exabel/services/csv_writer.py +32 -0
- exabel/services/entity_mapping_file_reader.py +89 -0
- exabel/services/excel_writer.py +16 -0
- exabel/services/feather_reader.py +45 -0
- exabel/services/feather_writer.py +28 -0
- exabel/services/file_constants.py +12 -0
- exabel/services/file_loading_exception.py +18 -0
- exabel/services/file_loading_result.py +118 -0
- exabel/services/file_time_series_loader.py +898 -0
- exabel/services/file_time_series_parser.py +1152 -0
- exabel/services/file_writer.py +26 -0
- exabel/services/file_writer_provider.py +33 -0
- exabel/services/sql/__init__.py +0 -0
- exabel/services/sql/athena_reader_configuration.py +98 -0
- exabel/services/sql/bigquery_reader_configuration.py +75 -0
- exabel/services/sql/exceptions.py +6 -0
- exabel/services/sql/snowflake_reader.py +74 -0
- exabel/services/sql/snowflake_reader_configuration.py +70 -0
- exabel/services/sql/sql_reader.py +65 -0
- exabel/services/sql/sql_reader_configuration.py +35 -0
- exabel/services/sql/sqlalchemy_reader.py +61 -0
- exabel/stubs/__init__.py +0 -0
- exabel/stubs/__init__.pyi +2 -0
- exabel/stubs/exabel/__init__.py +0 -0
- exabel/stubs/exabel/__init__.pyi +1 -0
- exabel/stubs/exabel/api/__init__.py +0 -0
- exabel/stubs/exabel/api/__init__.pyi +5 -0
- exabel/stubs/exabel/api/all_pb2.py +3 -0
- exabel/stubs/exabel/api/all_pb2_grpc.py +3 -0
- exabel/stubs/exabel/api/analytics/__init__.py +0 -0
- exabel/stubs/exabel/api/analytics/__init__.pyi +1 -0
- exabel/stubs/exabel/api/analytics/all_pb2.py +3 -0
- exabel/stubs/exabel/api/analytics/all_pb2_grpc.py +3 -0
- exabel/stubs/exabel/api/analytics/v1/__init__.py +0 -0
- exabel/stubs/exabel/api/analytics/v1/__init__.pyi +13 -0
- exabel/stubs/exabel/api/analytics/v1/all_pb2.py +16 -0
- exabel/stubs/exabel/api/analytics/v1/all_pb2_grpc.py +16 -0
- exabel/stubs/exabel/api/analytics/v1/common_messages_pb2.py +37 -0
- exabel/stubs/exabel/api/analytics/v1/common_messages_pb2.pyi +39 -0
- exabel/stubs/exabel/api/analytics/v1/common_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/analytics/v1/derived_signal_messages_pb2.py +59 -0
- exabel/stubs/exabel/api/analytics/v1/derived_signal_messages_pb2.pyi +205 -0
- exabel/stubs/exabel/api/analytics/v1/derived_signal_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/analytics/v1/derived_signal_service_pb2.py +67 -0
- exabel/stubs/exabel/api/analytics/v1/derived_signal_service_pb2.pyi +109 -0
- exabel/stubs/exabel/api/analytics/v1/derived_signal_service_pb2_grpc.py +273 -0
- exabel/stubs/exabel/api/analytics/v1/item_messages_pb2.py +49 -0
- exabel/stubs/exabel/api/analytics/v1/item_messages_pb2.pyi +54 -0
- exabel/stubs/exabel/api/analytics/v1/item_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/analytics/v1/kpi_mapping_messages_pb2.py +59 -0
- exabel/stubs/exabel/api/analytics/v1/kpi_mapping_messages_pb2.pyi +236 -0
- exabel/stubs/exabel/api/analytics/v1/kpi_mapping_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/analytics/v1/kpi_mapping_service_pb2.py +70 -0
- exabel/stubs/exabel/api/analytics/v1/kpi_mapping_service_pb2.pyi +166 -0
- exabel/stubs/exabel/api/analytics/v1/kpi_mapping_service_pb2_grpc.py +234 -0
- exabel/stubs/exabel/api/analytics/v1/kpi_messages_pb2.py +91 -0
- exabel/stubs/exabel/api/analytics/v1/kpi_messages_pb2.pyi +1078 -0
- exabel/stubs/exabel/api/analytics/v1/kpi_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/analytics/v1/kpi_service_pb2.py +101 -0
- exabel/stubs/exabel/api/analytics/v1/kpi_service_pb2.pyi +372 -0
- exabel/stubs/exabel/api/analytics/v1/kpi_service_pb2_grpc.py +356 -0
- exabel/stubs/exabel/api/analytics/v1/prediction_model_messages_pb2.py +45 -0
- exabel/stubs/exabel/api/analytics/v1/prediction_model_messages_pb2.pyi +92 -0
- exabel/stubs/exabel/api/analytics/v1/prediction_model_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/analytics/v1/prediction_model_service_pb2.py +49 -0
- exabel/stubs/exabel/api/analytics/v1/prediction_model_service_pb2.pyi +40 -0
- exabel/stubs/exabel/api/analytics/v1/prediction_model_service_pb2_grpc.py +126 -0
- exabel/stubs/exabel/api/analytics/v1/service_pb2.py +36 -0
- exabel/stubs/exabel/api/analytics/v1/service_pb2.pyi +8 -0
- exabel/stubs/exabel/api/analytics/v1/service_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/analytics/v1/tag_messages_pb2.py +50 -0
- exabel/stubs/exabel/api/analytics/v1/tag_messages_pb2.pyi +56 -0
- exabel/stubs/exabel/api/analytics/v1/tag_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/analytics/v1/tag_service_pb2.py +101 -0
- exabel/stubs/exabel/api/analytics/v1/tag_service_pb2.pyi +305 -0
- exabel/stubs/exabel/api/analytics/v1/tag_service_pb2_grpc.py +436 -0
- exabel/stubs/exabel/api/data/__init__.py +0 -0
- exabel/stubs/exabel/api/data/__init__.pyi +1 -0
- exabel/stubs/exabel/api/data/all_pb2.py +3 -0
- exabel/stubs/exabel/api/data/all_pb2_grpc.py +3 -0
- exabel/stubs/exabel/api/data/v1/__init__.py +0 -0
- exabel/stubs/exabel/api/data/v1/__init__.pyi +20 -0
- exabel/stubs/exabel/api/data/v1/all_pb2.py +23 -0
- exabel/stubs/exabel/api/data/v1/all_pb2_grpc.py +23 -0
- exabel/stubs/exabel/api/data/v1/calendar_messages_pb2.py +47 -0
- exabel/stubs/exabel/api/data/v1/calendar_messages_pb2.pyi +87 -0
- exabel/stubs/exabel/api/data/v1/calendar_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/data/v1/calendar_service_pb2.py +81 -0
- exabel/stubs/exabel/api/data/v1/calendar_service_pb2.pyi +215 -0
- exabel/stubs/exabel/api/data/v1/calendar_service_pb2_grpc.py +286 -0
- exabel/stubs/exabel/api/data/v1/common_messages_pb2.py +37 -0
- exabel/stubs/exabel/api/data/v1/common_messages_pb2.pyi +50 -0
- exabel/stubs/exabel/api/data/v1/common_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/data/v1/data_set_messages_pb2.py +55 -0
- exabel/stubs/exabel/api/data/v1/data_set_messages_pb2.pyi +75 -0
- exabel/stubs/exabel/api/data/v1/data_set_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/data/v1/data_set_service_pb2.py +73 -0
- exabel/stubs/exabel/api/data/v1/data_set_service_pb2.pyi +145 -0
- exabel/stubs/exabel/api/data/v1/data_set_service_pb2_grpc.py +313 -0
- exabel/stubs/exabel/api/data/v1/entity_messages_pb2.py +60 -0
- exabel/stubs/exabel/api/data/v1/entity_messages_pb2.pyi +98 -0
- exabel/stubs/exabel/api/data/v1/entity_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/data/v1/entity_service_pb2.py +126 -0
- exabel/stubs/exabel/api/data/v1/entity_service_pb2.pyi +451 -0
- exabel/stubs/exabel/api/data/v1/entity_service_pb2_grpc.py +651 -0
- exabel/stubs/exabel/api/data/v1/holiday_messages_pb2.py +40 -0
- exabel/stubs/exabel/api/data/v1/holiday_messages_pb2.pyi +89 -0
- exabel/stubs/exabel/api/data/v1/holiday_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/data/v1/holiday_service_pb2.py +72 -0
- exabel/stubs/exabel/api/data/v1/holiday_service_pb2.pyi +147 -0
- exabel/stubs/exabel/api/data/v1/holiday_service_pb2_grpc.py +291 -0
- exabel/stubs/exabel/api/data/v1/import_job_service_pb2.py +48 -0
- exabel/stubs/exabel/api/data/v1/import_job_service_pb2.pyi +41 -0
- exabel/stubs/exabel/api/data/v1/import_job_service_pb2_grpc.py +118 -0
- exabel/stubs/exabel/api/data/v1/namespace_service_pb2.py +46 -0
- exabel/stubs/exabel/api/data/v1/namespace_service_pb2.pyi +49 -0
- exabel/stubs/exabel/api/data/v1/namespace_service_pb2_grpc.py +117 -0
- exabel/stubs/exabel/api/data/v1/namespaces_messages_pb2.py +42 -0
- exabel/stubs/exabel/api/data/v1/namespaces_messages_pb2.pyi +35 -0
- exabel/stubs/exabel/api/data/v1/namespaces_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/data/v1/relationship_messages_pb2.py +58 -0
- exabel/stubs/exabel/api/data/v1/relationship_messages_pb2.pyi +109 -0
- exabel/stubs/exabel/api/data/v1/relationship_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/data/v1/relationship_service_pb2.py +113 -0
- exabel/stubs/exabel/api/data/v1/relationship_service_pb2.pyi +356 -0
- exabel/stubs/exabel/api/data/v1/relationship_service_pb2_grpc.py +531 -0
- exabel/stubs/exabel/api/data/v1/search_messages_pb2.py +47 -0
- exabel/stubs/exabel/api/data/v1/search_messages_pb2.pyi +98 -0
- exabel/stubs/exabel/api/data/v1/search_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/data/v1/service_pb2.py +36 -0
- exabel/stubs/exabel/api/data/v1/service_pb2.pyi +8 -0
- exabel/stubs/exabel/api/data/v1/service_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/data/v1/signal_messages_pb2.py +74 -0
- exabel/stubs/exabel/api/data/v1/signal_messages_pb2.pyi +159 -0
- exabel/stubs/exabel/api/data/v1/signal_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/data/v1/signal_service_pb2.py +95 -0
- exabel/stubs/exabel/api/data/v1/signal_service_pb2.pyi +311 -0
- exabel/stubs/exabel/api/data/v1/signal_service_pb2_grpc.py +433 -0
- exabel/stubs/exabel/api/data/v1/time_series_messages_pb2.py +78 -0
- exabel/stubs/exabel/api/data/v1/time_series_messages_pb2.pyi +309 -0
- exabel/stubs/exabel/api/data/v1/time_series_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/data/v1/time_series_service_pb2.py +133 -0
- exabel/stubs/exabel/api/data/v1/time_series_service_pb2.pyi +538 -0
- exabel/stubs/exabel/api/data/v1/time_series_service_pb2_grpc.py +448 -0
- exabel/stubs/exabel/api/management/__init__.py +0 -0
- exabel/stubs/exabel/api/management/__init__.pyi +1 -0
- exabel/stubs/exabel/api/management/all_pb2.py +3 -0
- exabel/stubs/exabel/api/management/all_pb2_grpc.py +3 -0
- exabel/stubs/exabel/api/management/v1/__init__.py +0 -0
- exabel/stubs/exabel/api/management/v1/__init__.pyi +5 -0
- exabel/stubs/exabel/api/management/v1/all_pb2.py +8 -0
- exabel/stubs/exabel/api/management/v1/all_pb2_grpc.py +8 -0
- exabel/stubs/exabel/api/management/v1/folder_messages_pb2.py +65 -0
- exabel/stubs/exabel/api/management/v1/folder_messages_pb2.pyi +222 -0
- exabel/stubs/exabel/api/management/v1/folder_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/management/v1/library_service_pb2.py +127 -0
- exabel/stubs/exabel/api/management/v1/library_service_pb2.pyi +377 -0
- exabel/stubs/exabel/api/management/v1/library_service_pb2_grpc.py +596 -0
- exabel/stubs/exabel/api/management/v1/service_pb2.py +36 -0
- exabel/stubs/exabel/api/management/v1/service_pb2.pyi +8 -0
- exabel/stubs/exabel/api/management/v1/service_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/management/v1/user_messages_pb2.py +44 -0
- exabel/stubs/exabel/api/management/v1/user_messages_pb2.pyi +71 -0
- exabel/stubs/exabel/api/management/v1/user_messages_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/management/v1/user_service_pb2.py +52 -0
- exabel/stubs/exabel/api/management/v1/user_service_pb2.pyi +79 -0
- exabel/stubs/exabel/api/management/v1/user_service_pb2_grpc.py +155 -0
- exabel/stubs/exabel/api/math/__init__.py +0 -0
- exabel/stubs/exabel/api/math/__init__.pyi +2 -0
- exabel/stubs/exabel/api/math/aggregation_pb2.py +37 -0
- exabel/stubs/exabel/api/math/aggregation_pb2.pyi +61 -0
- exabel/stubs/exabel/api/math/aggregation_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/math/all_pb2.py +5 -0
- exabel/stubs/exabel/api/math/all_pb2_grpc.py +5 -0
- exabel/stubs/exabel/api/math/change_pb2.py +37 -0
- exabel/stubs/exabel/api/math/change_pb2.pyi +41 -0
- exabel/stubs/exabel/api/math/change_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/time/__init__.py +0 -0
- exabel/stubs/exabel/api/time/__init__.pyi +2 -0
- exabel/stubs/exabel/api/time/all_pb2.py +5 -0
- exabel/stubs/exabel/api/time/all_pb2_grpc.py +5 -0
- exabel/stubs/exabel/api/time/date_pb2.py +37 -0
- exabel/stubs/exabel/api/time/date_pb2.pyi +39 -0
- exabel/stubs/exabel/api/time/date_pb2_grpc.py +24 -0
- exabel/stubs/exabel/api/time/time_range_pb2.py +38 -0
- exabel/stubs/exabel/api/time/time_range_pb2.pyi +49 -0
- exabel/stubs/exabel/api/time/time_range_pb2_grpc.py +24 -0
- exabel/stubs/protoc_gen_openapiv2/__init__.py +0 -0
- exabel/stubs/protoc_gen_openapiv2/__init__.pyi +1 -0
- exabel/stubs/protoc_gen_openapiv2/options/__init__.py +0 -0
- exabel/stubs/protoc_gen_openapiv2/options/__init__.pyi +2 -0
- exabel/stubs/protoc_gen_openapiv2/options/annotations_pb2.py +37 -0
- exabel/stubs/protoc_gen_openapiv2/options/annotations_pb2.pyi +49 -0
- exabel/stubs/protoc_gen_openapiv2/options/annotations_pb2_grpc.py +24 -0
- exabel/stubs/protoc_gen_openapiv2/options/openapiv2_pb2.py +128 -0
- exabel/stubs/protoc_gen_openapiv2/options/openapiv2_pb2.pyi +1342 -0
- exabel/stubs/protoc_gen_openapiv2/options/openapiv2_pb2_grpc.py +24 -0
- exabel/util/__init__.py +0 -0
- exabel/util/batcher.py +16 -0
- exabel/util/case_insensitive_column.py +14 -0
- exabel/util/deprecate_arguments.py +146 -0
- exabel/util/exceptions.py +14 -0
- exabel/util/handle_missing_imports.py +47 -0
- exabel/util/import_.py +51 -0
- exabel/util/logging_thread_pool_executor.py +40 -0
- exabel/util/parse_property_columns.py +32 -0
- exabel/util/resource_name_normalization.py +420 -0
- exabel/util/type_converter.py +23 -0
- exabel/util/warnings.py +2 -0
- exabel-8.0.0.dist-info/METADATA +111 -0
- exabel-8.0.0.dist-info/RECORD +402 -0
- exabel-8.0.0.dist-info/WHEEL +4 -0
- exabel-8.0.0.dist-info/licenses/LICENSE +21 -0
exabel/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .client.exabel_client import ExabelClient
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
|
|
3
|
+
from exabel.stubs.exabel.api.data.v1.calendar_service_pb2 import (
|
|
4
|
+
BatchCreateFiscalPeriodsRequest,
|
|
5
|
+
BatchCreateFiscalPeriodsResponse,
|
|
6
|
+
CompanyCalendar,
|
|
7
|
+
DeleteFiscalPeriodRequest,
|
|
8
|
+
GetCompanyCalendarRequest,
|
|
9
|
+
ListCompaniesWithFiscalPeriodsRequest,
|
|
10
|
+
ListCompaniesWithFiscalPeriodsResponse,
|
|
11
|
+
ListFiscalPeriodsRequest,
|
|
12
|
+
ListFiscalPeriodsResponse,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class CalendarApiClient(ABC):
|
|
17
|
+
"""Superclass for clients that send calendar requests to the Exabel Data API."""
|
|
18
|
+
|
|
19
|
+
@abstractmethod
|
|
20
|
+
def get_company_calendar(self, request: GetCompanyCalendarRequest) -> CompanyCalendar:
|
|
21
|
+
"""Get the fiscal calendar for a company."""
|
|
22
|
+
|
|
23
|
+
@abstractmethod
|
|
24
|
+
def batch_create_fiscal_periods(
|
|
25
|
+
self, request: BatchCreateFiscalPeriodsRequest
|
|
26
|
+
) -> BatchCreateFiscalPeriodsResponse:
|
|
27
|
+
"""Add fiscal periods for a company."""
|
|
28
|
+
|
|
29
|
+
@abstractmethod
|
|
30
|
+
def list_company_fiscal_periods(
|
|
31
|
+
self, request: ListFiscalPeriodsRequest
|
|
32
|
+
) -> ListFiscalPeriodsResponse:
|
|
33
|
+
"""List the fiscal periods for a company."""
|
|
34
|
+
|
|
35
|
+
@abstractmethod
|
|
36
|
+
def delete_fiscal_periods(self, request: DeleteFiscalPeriodRequest) -> None:
|
|
37
|
+
"""Delete fiscal periods for a company."""
|
|
38
|
+
|
|
39
|
+
@abstractmethod
|
|
40
|
+
def list_companies_with_fiscal_periods(
|
|
41
|
+
self, request: ListCompaniesWithFiscalPeriodsRequest
|
|
42
|
+
) -> ListCompaniesWithFiscalPeriodsResponse:
|
|
43
|
+
"""List the companies for which there are uploaded fiscal periods."""
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
|
|
3
|
+
from exabel.stubs.exabel.api.data.v1.all_pb2 import (
|
|
4
|
+
CreateDataSetRequest,
|
|
5
|
+
DataSet,
|
|
6
|
+
DeleteDataSetRequest,
|
|
7
|
+
GetDataSetRequest,
|
|
8
|
+
ListDataSetsRequest,
|
|
9
|
+
ListDataSetsResponse,
|
|
10
|
+
UpdateDataSetRequest,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class DataSetApiClient(ABC):
|
|
15
|
+
"""
|
|
16
|
+
Superclass for clients that send data set requests to the Exabel Data API.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
@abstractmethod
|
|
20
|
+
def list_data_sets(self, request: ListDataSetsRequest) -> ListDataSetsResponse:
|
|
21
|
+
"""List all data sets."""
|
|
22
|
+
|
|
23
|
+
@abstractmethod
|
|
24
|
+
def get_data_set(self, request: GetDataSetRequest) -> DataSet:
|
|
25
|
+
"""Get a data set."""
|
|
26
|
+
|
|
27
|
+
@abstractmethod
|
|
28
|
+
def create_data_set(self, request: CreateDataSetRequest) -> DataSet:
|
|
29
|
+
"""Create a data set."""
|
|
30
|
+
|
|
31
|
+
@abstractmethod
|
|
32
|
+
def update_data_set(self, request: UpdateDataSetRequest) -> DataSet:
|
|
33
|
+
"""Update a data set."""
|
|
34
|
+
|
|
35
|
+
@abstractmethod
|
|
36
|
+
def delete_data_set(self, request: DeleteDataSetRequest) -> None:
|
|
37
|
+
"""Delete a data set."""
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
|
|
3
|
+
from exabel.stubs.exabel.api.analytics.v1.all_pb2 import (
|
|
4
|
+
CreateDerivedSignalRequest,
|
|
5
|
+
DeleteDerivedSignalRequest,
|
|
6
|
+
DerivedSignal,
|
|
7
|
+
GetDerivedSignalRequest,
|
|
8
|
+
UpdateDerivedSignalRequest,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class DerivedSignalApiClient(ABC):
|
|
13
|
+
"""
|
|
14
|
+
Superclass for clients that send derived signal requests to the Exabel Analytics API.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
@abstractmethod
|
|
18
|
+
def create_derived_signal(self, request: CreateDerivedSignalRequest) -> DerivedSignal:
|
|
19
|
+
"""Create a derived signal."""
|
|
20
|
+
|
|
21
|
+
@abstractmethod
|
|
22
|
+
def get_derived_signal(self, request: GetDerivedSignalRequest) -> DerivedSignal:
|
|
23
|
+
"""Get a derived signal."""
|
|
24
|
+
|
|
25
|
+
@abstractmethod
|
|
26
|
+
def update_derived_signal(self, request: UpdateDerivedSignalRequest) -> DerivedSignal:
|
|
27
|
+
"""Update a derived signal."""
|
|
28
|
+
|
|
29
|
+
@abstractmethod
|
|
30
|
+
def delete_derived_signal(self, request: DeleteDerivedSignalRequest) -> None:
|
|
31
|
+
"""Delete a derived signal."""
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
|
|
3
|
+
from exabel.stubs.exabel.api.data.v1.all_pb2 import (
|
|
4
|
+
CreateEntityRequest,
|
|
5
|
+
CreateEntityTypeRequest,
|
|
6
|
+
DeleteEntitiesRequest,
|
|
7
|
+
DeleteEntityRequest,
|
|
8
|
+
DeleteEntityTypeRequest,
|
|
9
|
+
Entity,
|
|
10
|
+
EntityType,
|
|
11
|
+
GetEntityRequest,
|
|
12
|
+
GetEntityTypeRequest,
|
|
13
|
+
ListEntitiesRequest,
|
|
14
|
+
ListEntitiesResponse,
|
|
15
|
+
ListEntityTypesRequest,
|
|
16
|
+
ListEntityTypesResponse,
|
|
17
|
+
SearchEntitiesRequest,
|
|
18
|
+
SearchEntitiesResponse,
|
|
19
|
+
UpdateEntityRequest,
|
|
20
|
+
UpdateEntityTypeRequest,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class EntityApiClient(ABC):
|
|
25
|
+
"""
|
|
26
|
+
Superclass for clients that send entity requests to the Exabel Data API.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
@abstractmethod
|
|
30
|
+
def list_entity_types(self, request: ListEntityTypesRequest) -> ListEntityTypesResponse:
|
|
31
|
+
"""List all known entity types."""
|
|
32
|
+
|
|
33
|
+
@abstractmethod
|
|
34
|
+
def get_entity_type(self, request: GetEntityTypeRequest) -> EntityType:
|
|
35
|
+
"""Get an entity type."""
|
|
36
|
+
|
|
37
|
+
@abstractmethod
|
|
38
|
+
def create_entity_type(self, request: CreateEntityTypeRequest) -> EntityType:
|
|
39
|
+
"""Create an entity type."""
|
|
40
|
+
|
|
41
|
+
@abstractmethod
|
|
42
|
+
def update_entity_type(self, request: UpdateEntityTypeRequest) -> EntityType:
|
|
43
|
+
"""Update an entity type."""
|
|
44
|
+
|
|
45
|
+
@abstractmethod
|
|
46
|
+
def delete_entity_type(self, request: DeleteEntityTypeRequest) -> None:
|
|
47
|
+
"""Delete an entity type."""
|
|
48
|
+
|
|
49
|
+
@abstractmethod
|
|
50
|
+
def list_entities(self, request: ListEntitiesRequest) -> ListEntitiesResponse:
|
|
51
|
+
"""List all entities of a given entity type."""
|
|
52
|
+
|
|
53
|
+
@abstractmethod
|
|
54
|
+
def get_entity(self, request: GetEntityRequest) -> Entity:
|
|
55
|
+
"""Get an entity."""
|
|
56
|
+
|
|
57
|
+
@abstractmethod
|
|
58
|
+
def create_entity(self, request: CreateEntityRequest) -> Entity:
|
|
59
|
+
"""Create an entity."""
|
|
60
|
+
|
|
61
|
+
@abstractmethod
|
|
62
|
+
def update_entity(self, request: UpdateEntityRequest) -> Entity:
|
|
63
|
+
"""Update an entity."""
|
|
64
|
+
|
|
65
|
+
@abstractmethod
|
|
66
|
+
def delete_entity(self, request: DeleteEntityRequest) -> None:
|
|
67
|
+
"""Delete an entity."""
|
|
68
|
+
|
|
69
|
+
@abstractmethod
|
|
70
|
+
def delete_entities(self, request: DeleteEntitiesRequest) -> None:
|
|
71
|
+
"""Delete all entities of a given entity type."""
|
|
72
|
+
|
|
73
|
+
@abstractmethod
|
|
74
|
+
def search_entities(self, request: SearchEntitiesRequest) -> SearchEntitiesResponse:
|
|
75
|
+
"""Search for entities."""
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from enum import Enum, auto
|
|
2
|
+
|
|
3
|
+
from exabel.client.client_config import ClientConfig
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ExabelApiGroup(Enum):
|
|
7
|
+
"""
|
|
8
|
+
Exabel API groups.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# Data API.
|
|
12
|
+
DATA_API = auto()
|
|
13
|
+
|
|
14
|
+
# Analytics API.
|
|
15
|
+
ANALYTICS_API = auto()
|
|
16
|
+
|
|
17
|
+
# Management API.
|
|
18
|
+
MANAGEMENT_API = auto()
|
|
19
|
+
|
|
20
|
+
def get_host(self, config: ClientConfig) -> str:
|
|
21
|
+
"""Return the API host for this API group."""
|
|
22
|
+
if self == ExabelApiGroup.DATA_API:
|
|
23
|
+
return config.data_api_host
|
|
24
|
+
if self == ExabelApiGroup.ANALYTICS_API:
|
|
25
|
+
return config.analytics_api_host
|
|
26
|
+
if self == ExabelApiGroup.MANAGEMENT_API:
|
|
27
|
+
return config.management_api_host
|
|
28
|
+
raise ValueError(f"Unknown ExabelApiGroup: {self.name}")
|
|
29
|
+
|
|
30
|
+
def get_port(self, config: ClientConfig) -> int:
|
|
31
|
+
"""Return the API port for this API group."""
|
|
32
|
+
if self == ExabelApiGroup.DATA_API:
|
|
33
|
+
return config.data_api_port
|
|
34
|
+
if self == ExabelApiGroup.ANALYTICS_API:
|
|
35
|
+
return config.analytics_api_port
|
|
36
|
+
if self == ExabelApiGroup.MANAGEMENT_API:
|
|
37
|
+
return config.management_api_port
|
|
38
|
+
raise ValueError(f"Unknown ExabelApiGroup: {self.name}")
|
|
File without changes
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import json
|
|
2
|
+
|
|
3
|
+
import grpc
|
|
4
|
+
|
|
5
|
+
from exabel.client.api.api_client.exabel_api_group import ExabelApiGroup
|
|
6
|
+
from exabel.client.client_config import ClientConfig
|
|
7
|
+
|
|
8
|
+
SIXTEEN_MEGABYTES_IN_BYTES = 16 * 1024 * 1024
|
|
9
|
+
|
|
10
|
+
# Retry parameters
|
|
11
|
+
DEFAULT_MAX_ATTEMPTS = 5
|
|
12
|
+
DEFAULT_INITIAL_BACKOFF_SECONDS = 0.1
|
|
13
|
+
DEFAULT_MAX_BACKOFF_SECONDS = 5
|
|
14
|
+
DEFAULT_BACKOFF_MULTIPLIER = 2
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class BaseGrpcClient:
|
|
18
|
+
"""
|
|
19
|
+
Base class for clients that access the Exabel API with gRPC.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def __init__(self, config: ClientConfig, api_group: ExabelApiGroup):
|
|
23
|
+
self.config = config
|
|
24
|
+
self.metadata = [("x-client-name", config.client_name)]
|
|
25
|
+
common_kwargs = {
|
|
26
|
+
"target": f"{api_group.get_host(config)}:{api_group.get_port(config)}",
|
|
27
|
+
# When importing time series, we may receive a large amount of precondition failure
|
|
28
|
+
# violations in the trailing metadata, therefore we increase the maximum metadata size.
|
|
29
|
+
"options": (
|
|
30
|
+
("grpc.max_metadata_size", SIXTEEN_MEGABYTES_IN_BYTES),
|
|
31
|
+
("grpc.service_config", self._get_service_config()),
|
|
32
|
+
),
|
|
33
|
+
}
|
|
34
|
+
if config.api_key == "NO_KEY":
|
|
35
|
+
# Use an insecure channel. This can be used for local testing.
|
|
36
|
+
self.channel = grpc.insecure_channel(**common_kwargs)
|
|
37
|
+
else:
|
|
38
|
+
if config.access_token is not None:
|
|
39
|
+
self.metadata.append(("authorization", "Bearer " + config.access_token))
|
|
40
|
+
else:
|
|
41
|
+
assert config.api_key is not None
|
|
42
|
+
self.metadata.append(("x-api-key", config.api_key))
|
|
43
|
+
self.channel = grpc.secure_channel(
|
|
44
|
+
credentials=grpc.ssl_channel_credentials(
|
|
45
|
+
root_certificates=config.root_certificates
|
|
46
|
+
),
|
|
47
|
+
**common_kwargs,
|
|
48
|
+
)
|
|
49
|
+
for header in self.config.extra_headers:
|
|
50
|
+
self.metadata.append(header)
|
|
51
|
+
|
|
52
|
+
def _get_service_config(
|
|
53
|
+
self,
|
|
54
|
+
max_attempts: int = DEFAULT_MAX_ATTEMPTS,
|
|
55
|
+
initial_backoff: float = DEFAULT_INITIAL_BACKOFF_SECONDS,
|
|
56
|
+
max_backoff: float = DEFAULT_MAX_BACKOFF_SECONDS,
|
|
57
|
+
backoff_multiplier: int = DEFAULT_BACKOFF_MULTIPLIER,
|
|
58
|
+
) -> str:
|
|
59
|
+
"""
|
|
60
|
+
Returns a JSON string to use for grpc.service_config option when creating a grpc channel
|
|
61
|
+
"""
|
|
62
|
+
return json.dumps(
|
|
63
|
+
{
|
|
64
|
+
"methodConfig": [
|
|
65
|
+
{
|
|
66
|
+
"name": [{}],
|
|
67
|
+
"retryPolicy": {
|
|
68
|
+
"maxAttempts": max_attempts,
|
|
69
|
+
"initialBackoff": f"{initial_backoff}s",
|
|
70
|
+
"maxBackoff": f"{max_backoff}s",
|
|
71
|
+
"backoffMultiplier": backoff_multiplier,
|
|
72
|
+
"retryableStatusCodes": [
|
|
73
|
+
"CANCELLED",
|
|
74
|
+
"UNKNOWN",
|
|
75
|
+
"DEADLINE_EXCEEDED",
|
|
76
|
+
"RESOURCE_EXHAUSTED",
|
|
77
|
+
"ABORTED",
|
|
78
|
+
"INTERNAL",
|
|
79
|
+
"UNAVAILABLE",
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
from exabel.client.api.api_client.calendar_api_client import CalendarApiClient
|
|
2
|
+
from exabel.client.api.api_client.exabel_api_group import ExabelApiGroup
|
|
3
|
+
from exabel.client.api.api_client.grpc.base_grpc_client import BaseGrpcClient
|
|
4
|
+
from exabel.client.api.error_handler import handle_grpc_error
|
|
5
|
+
from exabel.client.client_config import ClientConfig
|
|
6
|
+
from exabel.stubs.exabel.api.data.v1.calendar_service_pb2 import (
|
|
7
|
+
BatchCreateFiscalPeriodsRequest,
|
|
8
|
+
BatchCreateFiscalPeriodsResponse,
|
|
9
|
+
CompanyCalendar,
|
|
10
|
+
DeleteFiscalPeriodRequest,
|
|
11
|
+
GetCompanyCalendarRequest,
|
|
12
|
+
ListCompaniesWithFiscalPeriodsRequest,
|
|
13
|
+
ListCompaniesWithFiscalPeriodsResponse,
|
|
14
|
+
ListFiscalPeriodsRequest,
|
|
15
|
+
ListFiscalPeriodsResponse,
|
|
16
|
+
)
|
|
17
|
+
from exabel.stubs.exabel.api.data.v1.calendar_service_pb2_grpc import CalendarServiceStub
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class CalendarGrpcClient(CalendarApiClient, BaseGrpcClient):
|
|
21
|
+
"""
|
|
22
|
+
Client which sends calendar requests to the Exabel Data API with gRPC.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(self, config: ClientConfig):
|
|
26
|
+
super().__init__(config, ExabelApiGroup.DATA_API)
|
|
27
|
+
self.stub = CalendarServiceStub(self.channel)
|
|
28
|
+
|
|
29
|
+
@handle_grpc_error
|
|
30
|
+
def get_company_calendar(self, request: GetCompanyCalendarRequest) -> CompanyCalendar:
|
|
31
|
+
return self.stub.GetCompanyCalendar(
|
|
32
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
@handle_grpc_error
|
|
36
|
+
def batch_create_fiscal_periods(
|
|
37
|
+
self, request: BatchCreateFiscalPeriodsRequest
|
|
38
|
+
) -> BatchCreateFiscalPeriodsResponse:
|
|
39
|
+
return self.stub.BatchCreateFiscalPeriods(
|
|
40
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
@handle_grpc_error
|
|
44
|
+
def list_company_fiscal_periods(
|
|
45
|
+
self, request: ListFiscalPeriodsRequest
|
|
46
|
+
) -> ListFiscalPeriodsResponse:
|
|
47
|
+
return self.stub.ListFiscalPeriods(
|
|
48
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
@handle_grpc_error
|
|
52
|
+
def delete_fiscal_periods(self, request: DeleteFiscalPeriodRequest) -> None:
|
|
53
|
+
self.stub.DeleteFiscalPeriod(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
54
|
+
|
|
55
|
+
@handle_grpc_error
|
|
56
|
+
def list_companies_with_fiscal_periods(
|
|
57
|
+
self, request: ListCompaniesWithFiscalPeriodsRequest
|
|
58
|
+
) -> ListCompaniesWithFiscalPeriodsResponse:
|
|
59
|
+
return self.stub.ListCompaniesWithFiscalPeriods(
|
|
60
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
61
|
+
)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from exabel.client.api.api_client.data_set_api_client import DataSetApiClient
|
|
2
|
+
from exabel.client.api.api_client.exabel_api_group import ExabelApiGroup
|
|
3
|
+
from exabel.client.api.api_client.grpc.base_grpc_client import BaseGrpcClient
|
|
4
|
+
from exabel.client.api.error_handler import handle_grpc_error
|
|
5
|
+
from exabel.client.client_config import ClientConfig
|
|
6
|
+
from exabel.stubs.exabel.api.data.v1.all_pb2 import (
|
|
7
|
+
CreateDataSetRequest,
|
|
8
|
+
DataSet,
|
|
9
|
+
DeleteDataSetRequest,
|
|
10
|
+
GetDataSetRequest,
|
|
11
|
+
ListDataSetsRequest,
|
|
12
|
+
ListDataSetsResponse,
|
|
13
|
+
UpdateDataSetRequest,
|
|
14
|
+
)
|
|
15
|
+
from exabel.stubs.exabel.api.data.v1.all_pb2_grpc import DataSetServiceStub
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class DataSetGrpcClient(DataSetApiClient, BaseGrpcClient):
|
|
19
|
+
"""
|
|
20
|
+
Client which sends data set requests to the Exabel Data API with gRPC.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
def __init__(self, config: ClientConfig):
|
|
24
|
+
super().__init__(config, ExabelApiGroup.DATA_API)
|
|
25
|
+
self.stub = DataSetServiceStub(self.channel)
|
|
26
|
+
|
|
27
|
+
@handle_grpc_error
|
|
28
|
+
def list_data_sets(self, request: ListDataSetsRequest) -> ListDataSetsResponse:
|
|
29
|
+
return self.stub.ListDataSets(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
30
|
+
|
|
31
|
+
@handle_grpc_error
|
|
32
|
+
def get_data_set(self, request: GetDataSetRequest) -> DataSet:
|
|
33
|
+
return self.stub.GetDataSet(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
34
|
+
|
|
35
|
+
@handle_grpc_error
|
|
36
|
+
def create_data_set(self, request: CreateDataSetRequest) -> DataSet:
|
|
37
|
+
return self.stub.CreateDataSet(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
38
|
+
|
|
39
|
+
@handle_grpc_error
|
|
40
|
+
def update_data_set(self, request: UpdateDataSetRequest) -> DataSet:
|
|
41
|
+
return self.stub.UpdateDataSet(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
42
|
+
|
|
43
|
+
@handle_grpc_error
|
|
44
|
+
def delete_data_set(self, request: DeleteDataSetRequest) -> None:
|
|
45
|
+
return self.stub.DeleteDataSet(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
from exabel.client.api.api_client.derived_signal_api_client import DerivedSignalApiClient
|
|
2
|
+
from exabel.client.api.api_client.exabel_api_group import ExabelApiGroup
|
|
3
|
+
from exabel.client.api.api_client.grpc.base_grpc_client import BaseGrpcClient
|
|
4
|
+
from exabel.client.api.error_handler import handle_grpc_error
|
|
5
|
+
from exabel.client.client_config import ClientConfig
|
|
6
|
+
from exabel.stubs.exabel.api.analytics.v1.all_pb2 import (
|
|
7
|
+
CreateDerivedSignalRequest,
|
|
8
|
+
DeleteDerivedSignalRequest,
|
|
9
|
+
DerivedSignal,
|
|
10
|
+
GetDerivedSignalRequest,
|
|
11
|
+
UpdateDerivedSignalRequest,
|
|
12
|
+
)
|
|
13
|
+
from exabel.stubs.exabel.api.analytics.v1.all_pb2_grpc import DerivedSignalServiceStub
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class DerivedSignalGrpcClient(DerivedSignalApiClient, BaseGrpcClient):
|
|
17
|
+
"""
|
|
18
|
+
Client which sends derived signal requests to the Exabel Analytics API with gRPC.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
def __init__(self, config: ClientConfig):
|
|
22
|
+
super().__init__(config, ExabelApiGroup.ANALYTICS_API)
|
|
23
|
+
self.stub = DerivedSignalServiceStub(self.channel)
|
|
24
|
+
|
|
25
|
+
@handle_grpc_error
|
|
26
|
+
def create_derived_signal(self, request: CreateDerivedSignalRequest) -> DerivedSignal:
|
|
27
|
+
return self.stub.CreateDerivedSignal(
|
|
28
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
@handle_grpc_error
|
|
32
|
+
def get_derived_signal(self, request: GetDerivedSignalRequest) -> DerivedSignal:
|
|
33
|
+
return self.stub.GetDerivedSignal(
|
|
34
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
@handle_grpc_error
|
|
38
|
+
def update_derived_signal(self, request: UpdateDerivedSignalRequest) -> DerivedSignal:
|
|
39
|
+
return self.stub.UpdateDerivedSignal(
|
|
40
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
@handle_grpc_error
|
|
44
|
+
def delete_derived_signal(self, request: DeleteDerivedSignalRequest) -> None:
|
|
45
|
+
return self.stub.DeleteDerivedSignal(
|
|
46
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
47
|
+
)
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
from exabel.client.api.api_client.entity_api_client import EntityApiClient
|
|
2
|
+
from exabel.client.api.api_client.exabel_api_group import ExabelApiGroup
|
|
3
|
+
from exabel.client.api.api_client.grpc.base_grpc_client import BaseGrpcClient
|
|
4
|
+
from exabel.client.api.error_handler import handle_grpc_error
|
|
5
|
+
from exabel.client.client_config import ClientConfig
|
|
6
|
+
from exabel.stubs.exabel.api.data.v1.all_pb2 import (
|
|
7
|
+
CreateEntityRequest,
|
|
8
|
+
CreateEntityTypeRequest,
|
|
9
|
+
DeleteEntitiesRequest,
|
|
10
|
+
DeleteEntityRequest,
|
|
11
|
+
DeleteEntityTypeRequest,
|
|
12
|
+
Entity,
|
|
13
|
+
EntityType,
|
|
14
|
+
GetEntityRequest,
|
|
15
|
+
GetEntityTypeRequest,
|
|
16
|
+
ListEntitiesRequest,
|
|
17
|
+
ListEntitiesResponse,
|
|
18
|
+
ListEntityTypesRequest,
|
|
19
|
+
ListEntityTypesResponse,
|
|
20
|
+
SearchEntitiesRequest,
|
|
21
|
+
SearchEntitiesResponse,
|
|
22
|
+
UpdateEntityRequest,
|
|
23
|
+
UpdateEntityTypeRequest,
|
|
24
|
+
)
|
|
25
|
+
from exabel.stubs.exabel.api.data.v1.all_pb2_grpc import EntityServiceStub
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class EntityGrpcClient(EntityApiClient, BaseGrpcClient):
|
|
29
|
+
"""
|
|
30
|
+
Client which sends entity requests to the Exabel Data API with gRPC.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
def __init__(self, config: ClientConfig):
|
|
34
|
+
super().__init__(config, ExabelApiGroup.DATA_API)
|
|
35
|
+
self.stub = EntityServiceStub(self.channel)
|
|
36
|
+
|
|
37
|
+
@handle_grpc_error
|
|
38
|
+
def list_entity_types(self, request: ListEntityTypesRequest) -> ListEntityTypesResponse:
|
|
39
|
+
return self.stub.ListEntityTypes(
|
|
40
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
@handle_grpc_error
|
|
44
|
+
def get_entity_type(self, request: GetEntityTypeRequest) -> EntityType:
|
|
45
|
+
return self.stub.GetEntityType(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
46
|
+
|
|
47
|
+
@handle_grpc_error
|
|
48
|
+
def create_entity_type(self, request: CreateEntityTypeRequest) -> EntityType:
|
|
49
|
+
return self.stub.CreateEntityType(
|
|
50
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
@handle_grpc_error
|
|
54
|
+
def update_entity_type(self, request: UpdateEntityTypeRequest) -> EntityType:
|
|
55
|
+
return self.stub.UpdateEntityType(
|
|
56
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
@handle_grpc_error
|
|
60
|
+
def delete_entity_type(self, request: DeleteEntityTypeRequest) -> None:
|
|
61
|
+
self.stub.DeleteEntityType(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
62
|
+
|
|
63
|
+
@handle_grpc_error
|
|
64
|
+
def list_entities(self, request: ListEntitiesRequest) -> ListEntitiesResponse:
|
|
65
|
+
return self.stub.ListEntities(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
66
|
+
|
|
67
|
+
@handle_grpc_error
|
|
68
|
+
def get_entity(self, request: GetEntityRequest) -> Entity:
|
|
69
|
+
return self.stub.GetEntity(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
70
|
+
|
|
71
|
+
@handle_grpc_error
|
|
72
|
+
def create_entity(self, request: CreateEntityRequest) -> Entity:
|
|
73
|
+
return self.stub.CreateEntity(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
74
|
+
|
|
75
|
+
@handle_grpc_error
|
|
76
|
+
def update_entity(self, request: UpdateEntityRequest) -> Entity:
|
|
77
|
+
return self.stub.UpdateEntity(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
78
|
+
|
|
79
|
+
@handle_grpc_error
|
|
80
|
+
def delete_entity(self, request: DeleteEntityRequest) -> None:
|
|
81
|
+
self.stub.DeleteEntity(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
82
|
+
|
|
83
|
+
@handle_grpc_error
|
|
84
|
+
def delete_entities(self, request: DeleteEntitiesRequest) -> None:
|
|
85
|
+
self.stub.DeleteEntities(request, metadata=self.metadata, timeout=self.config.timeout)
|
|
86
|
+
|
|
87
|
+
@handle_grpc_error
|
|
88
|
+
def search_entities(self, request: SearchEntitiesRequest) -> SearchEntitiesResponse:
|
|
89
|
+
return self.stub.SearchEntities(
|
|
90
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
91
|
+
)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from exabel.client.api.api_client.exabel_api_group import ExabelApiGroup
|
|
2
|
+
from exabel.client.api.api_client.grpc.base_grpc_client import BaseGrpcClient
|
|
3
|
+
from exabel.client.api.api_client.holiday_api_client import HolidayApiClient
|
|
4
|
+
from exabel.client.api.error_handler import handle_grpc_error
|
|
5
|
+
from exabel.client.client_config import ClientConfig
|
|
6
|
+
from exabel.stubs.exabel.api.data.v1.holiday_messages_pb2 import HolidaySpecification
|
|
7
|
+
from exabel.stubs.exabel.api.data.v1.holiday_service_pb2 import (
|
|
8
|
+
CreateHolidaySpecificationRequest,
|
|
9
|
+
DeleteHolidaySpecificationRequest,
|
|
10
|
+
GetHolidaySpecificationRequest,
|
|
11
|
+
ListHolidaySpecificationsRequest,
|
|
12
|
+
ListHolidaySpecificationsResponse,
|
|
13
|
+
UpdateHolidaySpecificationRequest,
|
|
14
|
+
)
|
|
15
|
+
from exabel.stubs.exabel.api.data.v1.holiday_service_pb2_grpc import HolidayServiceStub
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class HolidayGrpcClient(HolidayApiClient, BaseGrpcClient):
|
|
19
|
+
"""
|
|
20
|
+
Client which sends holiday requests to the Exabel Data API with gRPC.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
def __init__(self, config: ClientConfig):
|
|
24
|
+
super().__init__(config, ExabelApiGroup.DATA_API)
|
|
25
|
+
self.stub = HolidayServiceStub(self.channel)
|
|
26
|
+
|
|
27
|
+
@handle_grpc_error
|
|
28
|
+
def list_holiday_specifications(
|
|
29
|
+
self, request: ListHolidaySpecificationsRequest
|
|
30
|
+
) -> ListHolidaySpecificationsResponse:
|
|
31
|
+
return self.stub.ListHolidaySpecifications(
|
|
32
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
@handle_grpc_error
|
|
36
|
+
def get_holiday_specification(
|
|
37
|
+
self, request: GetHolidaySpecificationRequest
|
|
38
|
+
) -> HolidaySpecification:
|
|
39
|
+
return self.stub.GetHolidaySpecification(
|
|
40
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
@handle_grpc_error
|
|
44
|
+
def create_holiday_specification(
|
|
45
|
+
self, request: CreateHolidaySpecificationRequest
|
|
46
|
+
) -> HolidaySpecification:
|
|
47
|
+
return self.stub.CreateHolidaySpecification(
|
|
48
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
@handle_grpc_error
|
|
52
|
+
def update_holiday_specification(
|
|
53
|
+
self, request: UpdateHolidaySpecificationRequest
|
|
54
|
+
) -> HolidaySpecification:
|
|
55
|
+
return self.stub.UpdateHolidaySpecification(
|
|
56
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
@handle_grpc_error
|
|
60
|
+
def delete_holiday_specification(self, request: DeleteHolidaySpecificationRequest) -> None:
|
|
61
|
+
self.stub.DeleteHolidaySpecification(
|
|
62
|
+
request, metadata=self.metadata, timeout=self.config.timeout
|
|
63
|
+
)
|