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.
Files changed (402) hide show
  1. exabel/__init__.py +1 -0
  2. exabel/client/__init__.py +0 -0
  3. exabel/client/api/__init__.py +0 -0
  4. exabel/client/api/api_client/__init__.py +0 -0
  5. exabel/client/api/api_client/calendar_api_client.py +43 -0
  6. exabel/client/api/api_client/data_set_api_client.py +37 -0
  7. exabel/client/api/api_client/derived_signal_api_client.py +31 -0
  8. exabel/client/api/api_client/entity_api_client.py +75 -0
  9. exabel/client/api/api_client/exabel_api_group.py +38 -0
  10. exabel/client/api/api_client/grpc/__init__.py +0 -0
  11. exabel/client/api/api_client/grpc/base_grpc_client.py +85 -0
  12. exabel/client/api/api_client/grpc/calendar_grpc_client.py +61 -0
  13. exabel/client/api/api_client/grpc/data_set_grpc_client.py +45 -0
  14. exabel/client/api/api_client/grpc/derived_signal_grpc_client.py +47 -0
  15. exabel/client/api/api_client/grpc/entity_grpc_client.py +91 -0
  16. exabel/client/api/api_client/grpc/holiday_grpc_client.py +63 -0
  17. exabel/client/api/api_client/grpc/kpi_grpc_client.py +71 -0
  18. exabel/client/api/api_client/grpc/library_grpc_client.py +82 -0
  19. exabel/client/api/api_client/grpc/namespace_grpc_client.py +26 -0
  20. exabel/client/api/api_client/grpc/prediction_model_grpc_client.py +28 -0
  21. exabel/client/api/api_client/grpc/relationship_grpc_client.py +92 -0
  22. exabel/client/api/api_client/grpc/signal_grpc_client.py +78 -0
  23. exabel/client/api/api_client/grpc/tag_grpc_client.py +67 -0
  24. exabel/client/api/api_client/grpc/time_series_grpc_client.py +75 -0
  25. exabel/client/api/api_client/grpc/user_grpc_client.py +30 -0
  26. exabel/client/api/api_client/holiday_api_client.py +43 -0
  27. exabel/client/api/api_client/kpi_api_client.py +58 -0
  28. exabel/client/api/api_client/library_api_client.py +72 -0
  29. exabel/client/api/api_client/namespace_api_client.py +16 -0
  30. exabel/client/api/api_client/prediction_model_api_client.py +16 -0
  31. exabel/client/api/api_client/relationship_api_client.py +66 -0
  32. exabel/client/api/api_client/signal_api_client.py +37 -0
  33. exabel/client/api/api_client/tag_api_client.py +55 -0
  34. exabel/client/api/api_client/time_series_api_client.py +51 -0
  35. exabel/client/api/api_client/user_api_client.py +22 -0
  36. exabel/client/api/bulk_import.py +266 -0
  37. exabel/client/api/bulk_insert.py +165 -0
  38. exabel/client/api/calendar_api.py +143 -0
  39. exabel/client/api/data_classes/__init__.py +0 -0
  40. exabel/client/api/data_classes/company.py +28 -0
  41. exabel/client/api/data_classes/company_kpi_mapping_results.py +59 -0
  42. exabel/client/api/data_classes/company_kpi_model_result.py +38 -0
  43. exabel/client/api/data_classes/company_kpi_models.py +44 -0
  44. exabel/client/api/data_classes/data_set.py +101 -0
  45. exabel/client/api/data_classes/derived_signal.py +258 -0
  46. exabel/client/api/data_classes/entity.py +86 -0
  47. exabel/client/api/data_classes/entity_type.py +67 -0
  48. exabel/client/api/data_classes/fiscal_period.py +48 -0
  49. exabel/client/api/data_classes/folder.py +79 -0
  50. exabel/client/api/data_classes/folder_accessor.py +47 -0
  51. exabel/client/api/data_classes/folder_item.py +156 -0
  52. exabel/client/api/data_classes/group.py +57 -0
  53. exabel/client/api/data_classes/kpi.py +60 -0
  54. exabel/client/api/data_classes/kpi_hierarchy.py +81 -0
  55. exabel/client/api/data_classes/kpi_mapping_group_reference.py +30 -0
  56. exabel/client/api/data_classes/kpi_mapping_model.py +31 -0
  57. exabel/client/api/data_classes/kpi_mapping_result_data.py +107 -0
  58. exabel/client/api/data_classes/kpi_model.py +42 -0
  59. exabel/client/api/data_classes/kpi_model_data.py +105 -0
  60. exabel/client/api/data_classes/kpi_model_run.py +54 -0
  61. exabel/client/api/data_classes/kpi_model_runs.py +39 -0
  62. exabel/client/api/data_classes/kpi_model_weight_groups.py +90 -0
  63. exabel/client/api/data_classes/kpi_screen_results.py +38 -0
  64. exabel/client/api/data_classes/kpi_source.py +23 -0
  65. exabel/client/api/data_classes/model_quality.py +31 -0
  66. exabel/client/api/data_classes/model_results.py +59 -0
  67. exabel/client/api/data_classes/namespace.py +33 -0
  68. exabel/client/api/data_classes/paging_result.py +42 -0
  69. exabel/client/api/data_classes/prediction_model_run.py +126 -0
  70. exabel/client/api/data_classes/relationship.py +79 -0
  71. exabel/client/api/data_classes/relationship_type.py +73 -0
  72. exabel/client/api/data_classes/request_error.py +91 -0
  73. exabel/client/api/data_classes/signal.py +52 -0
  74. exabel/client/api/data_classes/tag.py +105 -0
  75. exabel/client/api/data_classes/time_series.py +271 -0
  76. exabel/client/api/data_classes/user.py +49 -0
  77. exabel/client/api/data_set_api.py +93 -0
  78. exabel/client/api/derived_signal_api.py +75 -0
  79. exabel/client/api/entity_api.py +308 -0
  80. exabel/client/api/error_handler.py +105 -0
  81. exabel/client/api/export_api.py +291 -0
  82. exabel/client/api/holiday_api.py +122 -0
  83. exabel/client/api/kpi_api.py +215 -0
  84. exabel/client/api/library_api.py +195 -0
  85. exabel/client/api/namespace_api.py +42 -0
  86. exabel/client/api/pageable_resource.py +44 -0
  87. exabel/client/api/prediction_model_api.py +29 -0
  88. exabel/client/api/proto_utils.py +22 -0
  89. exabel/client/api/relationship_api.py +401 -0
  90. exabel/client/api/resource_creation_result.py +262 -0
  91. exabel/client/api/search_service.py +234 -0
  92. exabel/client/api/signal_api.py +155 -0
  93. exabel/client/api/tag_api.py +146 -0
  94. exabel/client/api/time_series_api.py +686 -0
  95. exabel/client/api/user_api.py +33 -0
  96. exabel/client/client_config.py +104 -0
  97. exabel/client/exabel_client.py +109 -0
  98. exabel/examples/__init__.py +0 -0
  99. exabel/examples/create_time_series_example.py +96 -0
  100. exabel/examples/get_company_example.py +103 -0
  101. exabel/query/__init__.py +0 -0
  102. exabel/query/column.py +53 -0
  103. exabel/query/dashboard.py +41 -0
  104. exabel/query/literal.py +25 -0
  105. exabel/query/predicate.py +53 -0
  106. exabel/query/query.py +30 -0
  107. exabel/query/signals.py +84 -0
  108. exabel/query/table.py +9 -0
  109. exabel/scripts/__init__.py +0 -0
  110. exabel/scripts/actions.py +57 -0
  111. exabel/scripts/base_script.py +124 -0
  112. exabel/scripts/check_company_identifiers_in_csv.py +128 -0
  113. exabel/scripts/command_line_script.py +31 -0
  114. exabel/scripts/create_data_set.py +70 -0
  115. exabel/scripts/create_derived_signal.py +79 -0
  116. exabel/scripts/create_entity.py +54 -0
  117. exabel/scripts/create_entity_mapping_from_csv.py +238 -0
  118. exabel/scripts/create_entity_type.py +66 -0
  119. exabel/scripts/create_folder.py +31 -0
  120. exabel/scripts/create_prediction_model_run.py +39 -0
  121. exabel/scripts/create_relationship.py +58 -0
  122. exabel/scripts/create_relationship_type.py +61 -0
  123. exabel/scripts/create_signal.py +56 -0
  124. exabel/scripts/csv_script.py +108 -0
  125. exabel/scripts/csv_script_with_entity_mapping.py +49 -0
  126. exabel/scripts/delete_data_set.py +30 -0
  127. exabel/scripts/delete_entities.py +96 -0
  128. exabel/scripts/delete_entity.py +48 -0
  129. exabel/scripts/delete_entity_type.py +30 -0
  130. exabel/scripts/delete_folder.py +31 -0
  131. exabel/scripts/delete_relationship.py +47 -0
  132. exabel/scripts/delete_relationship_type.py +31 -0
  133. exabel/scripts/delete_signal.py +30 -0
  134. exabel/scripts/delete_time_series.py +110 -0
  135. exabel/scripts/delete_time_series_point.py +55 -0
  136. exabel/scripts/delete_time_series_points.py +118 -0
  137. exabel/scripts/delete_time_series_points_from_file.py +108 -0
  138. exabel/scripts/export_data.py +49 -0
  139. exabel/scripts/export_signals.py +125 -0
  140. exabel/scripts/file_utils.py +44 -0
  141. exabel/scripts/get_data_set.py +34 -0
  142. exabel/scripts/get_entity.py +33 -0
  143. exabel/scripts/get_entity_type.py +30 -0
  144. exabel/scripts/get_folder.py +32 -0
  145. exabel/scripts/get_relationship.py +56 -0
  146. exabel/scripts/get_relationship_type.py +33 -0
  147. exabel/scripts/get_signal.py +31 -0
  148. exabel/scripts/get_time_series.py +80 -0
  149. exabel/scripts/list_data_sets.py +26 -0
  150. exabel/scripts/list_entities.py +94 -0
  151. exabel/scripts/list_entity_types.py +24 -0
  152. exabel/scripts/list_folder_accessors.py +34 -0
  153. exabel/scripts/list_folders.py +21 -0
  154. exabel/scripts/list_groups.py +20 -0
  155. exabel/scripts/list_items.py +39 -0
  156. exabel/scripts/list_relationship_types.py +33 -0
  157. exabel/scripts/list_relationships.py +81 -0
  158. exabel/scripts/list_signals.py +53 -0
  159. exabel/scripts/list_time_series.py +182 -0
  160. exabel/scripts/list_users.py +20 -0
  161. exabel/scripts/load_entities_from_csv.py +140 -0
  162. exabel/scripts/load_relationships_from_csv.py +203 -0
  163. exabel/scripts/load_signals_from_csv.py +75 -0
  164. exabel/scripts/load_time_series_from_csv.py +10 -0
  165. exabel/scripts/load_time_series_from_file.py +188 -0
  166. exabel/scripts/load_time_series_metadata_from_file.py +122 -0
  167. exabel/scripts/move_items.py +41 -0
  168. exabel/scripts/search_entities.py +109 -0
  169. exabel/scripts/share_folder.py +44 -0
  170. exabel/scripts/sql/__init__.py +0 -0
  171. exabel/scripts/sql/read_athena.py +58 -0
  172. exabel/scripts/sql/read_bigquery.py +49 -0
  173. exabel/scripts/sql/read_snowflake.py +96 -0
  174. exabel/scripts/sql/sql_script.py +52 -0
  175. exabel/scripts/unshare_folder.py +35 -0
  176. exabel/scripts/update_data_set.py +115 -0
  177. exabel/scripts/update_entity_type.py +74 -0
  178. exabel/scripts/update_folder.py +39 -0
  179. exabel/scripts/update_relationship_type.py +78 -0
  180. exabel/scripts/upsert_time_series_unit.py +79 -0
  181. exabel/scripts/utils.py +119 -0
  182. exabel/services/__init__.py +0 -0
  183. exabel/services/csv_entity_loader.py +269 -0
  184. exabel/services/csv_exception.py +5 -0
  185. exabel/services/csv_loading_constants.py +9 -0
  186. exabel/services/csv_loading_result.py +5 -0
  187. exabel/services/csv_reader.py +83 -0
  188. exabel/services/csv_relationship_loader.py +546 -0
  189. exabel/services/csv_time_series_loader.py +86 -0
  190. exabel/services/csv_writer.py +32 -0
  191. exabel/services/entity_mapping_file_reader.py +89 -0
  192. exabel/services/excel_writer.py +16 -0
  193. exabel/services/feather_reader.py +45 -0
  194. exabel/services/feather_writer.py +28 -0
  195. exabel/services/file_constants.py +12 -0
  196. exabel/services/file_loading_exception.py +18 -0
  197. exabel/services/file_loading_result.py +118 -0
  198. exabel/services/file_time_series_loader.py +898 -0
  199. exabel/services/file_time_series_parser.py +1152 -0
  200. exabel/services/file_writer.py +26 -0
  201. exabel/services/file_writer_provider.py +33 -0
  202. exabel/services/sql/__init__.py +0 -0
  203. exabel/services/sql/athena_reader_configuration.py +98 -0
  204. exabel/services/sql/bigquery_reader_configuration.py +75 -0
  205. exabel/services/sql/exceptions.py +6 -0
  206. exabel/services/sql/snowflake_reader.py +74 -0
  207. exabel/services/sql/snowflake_reader_configuration.py +70 -0
  208. exabel/services/sql/sql_reader.py +65 -0
  209. exabel/services/sql/sql_reader_configuration.py +35 -0
  210. exabel/services/sql/sqlalchemy_reader.py +61 -0
  211. exabel/stubs/__init__.py +0 -0
  212. exabel/stubs/__init__.pyi +2 -0
  213. exabel/stubs/exabel/__init__.py +0 -0
  214. exabel/stubs/exabel/__init__.pyi +1 -0
  215. exabel/stubs/exabel/api/__init__.py +0 -0
  216. exabel/stubs/exabel/api/__init__.pyi +5 -0
  217. exabel/stubs/exabel/api/all_pb2.py +3 -0
  218. exabel/stubs/exabel/api/all_pb2_grpc.py +3 -0
  219. exabel/stubs/exabel/api/analytics/__init__.py +0 -0
  220. exabel/stubs/exabel/api/analytics/__init__.pyi +1 -0
  221. exabel/stubs/exabel/api/analytics/all_pb2.py +3 -0
  222. exabel/stubs/exabel/api/analytics/all_pb2_grpc.py +3 -0
  223. exabel/stubs/exabel/api/analytics/v1/__init__.py +0 -0
  224. exabel/stubs/exabel/api/analytics/v1/__init__.pyi +13 -0
  225. exabel/stubs/exabel/api/analytics/v1/all_pb2.py +16 -0
  226. exabel/stubs/exabel/api/analytics/v1/all_pb2_grpc.py +16 -0
  227. exabel/stubs/exabel/api/analytics/v1/common_messages_pb2.py +37 -0
  228. exabel/stubs/exabel/api/analytics/v1/common_messages_pb2.pyi +39 -0
  229. exabel/stubs/exabel/api/analytics/v1/common_messages_pb2_grpc.py +24 -0
  230. exabel/stubs/exabel/api/analytics/v1/derived_signal_messages_pb2.py +59 -0
  231. exabel/stubs/exabel/api/analytics/v1/derived_signal_messages_pb2.pyi +205 -0
  232. exabel/stubs/exabel/api/analytics/v1/derived_signal_messages_pb2_grpc.py +24 -0
  233. exabel/stubs/exabel/api/analytics/v1/derived_signal_service_pb2.py +67 -0
  234. exabel/stubs/exabel/api/analytics/v1/derived_signal_service_pb2.pyi +109 -0
  235. exabel/stubs/exabel/api/analytics/v1/derived_signal_service_pb2_grpc.py +273 -0
  236. exabel/stubs/exabel/api/analytics/v1/item_messages_pb2.py +49 -0
  237. exabel/stubs/exabel/api/analytics/v1/item_messages_pb2.pyi +54 -0
  238. exabel/stubs/exabel/api/analytics/v1/item_messages_pb2_grpc.py +24 -0
  239. exabel/stubs/exabel/api/analytics/v1/kpi_mapping_messages_pb2.py +59 -0
  240. exabel/stubs/exabel/api/analytics/v1/kpi_mapping_messages_pb2.pyi +236 -0
  241. exabel/stubs/exabel/api/analytics/v1/kpi_mapping_messages_pb2_grpc.py +24 -0
  242. exabel/stubs/exabel/api/analytics/v1/kpi_mapping_service_pb2.py +70 -0
  243. exabel/stubs/exabel/api/analytics/v1/kpi_mapping_service_pb2.pyi +166 -0
  244. exabel/stubs/exabel/api/analytics/v1/kpi_mapping_service_pb2_grpc.py +234 -0
  245. exabel/stubs/exabel/api/analytics/v1/kpi_messages_pb2.py +91 -0
  246. exabel/stubs/exabel/api/analytics/v1/kpi_messages_pb2.pyi +1078 -0
  247. exabel/stubs/exabel/api/analytics/v1/kpi_messages_pb2_grpc.py +24 -0
  248. exabel/stubs/exabel/api/analytics/v1/kpi_service_pb2.py +101 -0
  249. exabel/stubs/exabel/api/analytics/v1/kpi_service_pb2.pyi +372 -0
  250. exabel/stubs/exabel/api/analytics/v1/kpi_service_pb2_grpc.py +356 -0
  251. exabel/stubs/exabel/api/analytics/v1/prediction_model_messages_pb2.py +45 -0
  252. exabel/stubs/exabel/api/analytics/v1/prediction_model_messages_pb2.pyi +92 -0
  253. exabel/stubs/exabel/api/analytics/v1/prediction_model_messages_pb2_grpc.py +24 -0
  254. exabel/stubs/exabel/api/analytics/v1/prediction_model_service_pb2.py +49 -0
  255. exabel/stubs/exabel/api/analytics/v1/prediction_model_service_pb2.pyi +40 -0
  256. exabel/stubs/exabel/api/analytics/v1/prediction_model_service_pb2_grpc.py +126 -0
  257. exabel/stubs/exabel/api/analytics/v1/service_pb2.py +36 -0
  258. exabel/stubs/exabel/api/analytics/v1/service_pb2.pyi +8 -0
  259. exabel/stubs/exabel/api/analytics/v1/service_pb2_grpc.py +24 -0
  260. exabel/stubs/exabel/api/analytics/v1/tag_messages_pb2.py +50 -0
  261. exabel/stubs/exabel/api/analytics/v1/tag_messages_pb2.pyi +56 -0
  262. exabel/stubs/exabel/api/analytics/v1/tag_messages_pb2_grpc.py +24 -0
  263. exabel/stubs/exabel/api/analytics/v1/tag_service_pb2.py +101 -0
  264. exabel/stubs/exabel/api/analytics/v1/tag_service_pb2.pyi +305 -0
  265. exabel/stubs/exabel/api/analytics/v1/tag_service_pb2_grpc.py +436 -0
  266. exabel/stubs/exabel/api/data/__init__.py +0 -0
  267. exabel/stubs/exabel/api/data/__init__.pyi +1 -0
  268. exabel/stubs/exabel/api/data/all_pb2.py +3 -0
  269. exabel/stubs/exabel/api/data/all_pb2_grpc.py +3 -0
  270. exabel/stubs/exabel/api/data/v1/__init__.py +0 -0
  271. exabel/stubs/exabel/api/data/v1/__init__.pyi +20 -0
  272. exabel/stubs/exabel/api/data/v1/all_pb2.py +23 -0
  273. exabel/stubs/exabel/api/data/v1/all_pb2_grpc.py +23 -0
  274. exabel/stubs/exabel/api/data/v1/calendar_messages_pb2.py +47 -0
  275. exabel/stubs/exabel/api/data/v1/calendar_messages_pb2.pyi +87 -0
  276. exabel/stubs/exabel/api/data/v1/calendar_messages_pb2_grpc.py +24 -0
  277. exabel/stubs/exabel/api/data/v1/calendar_service_pb2.py +81 -0
  278. exabel/stubs/exabel/api/data/v1/calendar_service_pb2.pyi +215 -0
  279. exabel/stubs/exabel/api/data/v1/calendar_service_pb2_grpc.py +286 -0
  280. exabel/stubs/exabel/api/data/v1/common_messages_pb2.py +37 -0
  281. exabel/stubs/exabel/api/data/v1/common_messages_pb2.pyi +50 -0
  282. exabel/stubs/exabel/api/data/v1/common_messages_pb2_grpc.py +24 -0
  283. exabel/stubs/exabel/api/data/v1/data_set_messages_pb2.py +55 -0
  284. exabel/stubs/exabel/api/data/v1/data_set_messages_pb2.pyi +75 -0
  285. exabel/stubs/exabel/api/data/v1/data_set_messages_pb2_grpc.py +24 -0
  286. exabel/stubs/exabel/api/data/v1/data_set_service_pb2.py +73 -0
  287. exabel/stubs/exabel/api/data/v1/data_set_service_pb2.pyi +145 -0
  288. exabel/stubs/exabel/api/data/v1/data_set_service_pb2_grpc.py +313 -0
  289. exabel/stubs/exabel/api/data/v1/entity_messages_pb2.py +60 -0
  290. exabel/stubs/exabel/api/data/v1/entity_messages_pb2.pyi +98 -0
  291. exabel/stubs/exabel/api/data/v1/entity_messages_pb2_grpc.py +24 -0
  292. exabel/stubs/exabel/api/data/v1/entity_service_pb2.py +126 -0
  293. exabel/stubs/exabel/api/data/v1/entity_service_pb2.pyi +451 -0
  294. exabel/stubs/exabel/api/data/v1/entity_service_pb2_grpc.py +651 -0
  295. exabel/stubs/exabel/api/data/v1/holiday_messages_pb2.py +40 -0
  296. exabel/stubs/exabel/api/data/v1/holiday_messages_pb2.pyi +89 -0
  297. exabel/stubs/exabel/api/data/v1/holiday_messages_pb2_grpc.py +24 -0
  298. exabel/stubs/exabel/api/data/v1/holiday_service_pb2.py +72 -0
  299. exabel/stubs/exabel/api/data/v1/holiday_service_pb2.pyi +147 -0
  300. exabel/stubs/exabel/api/data/v1/holiday_service_pb2_grpc.py +291 -0
  301. exabel/stubs/exabel/api/data/v1/import_job_service_pb2.py +48 -0
  302. exabel/stubs/exabel/api/data/v1/import_job_service_pb2.pyi +41 -0
  303. exabel/stubs/exabel/api/data/v1/import_job_service_pb2_grpc.py +118 -0
  304. exabel/stubs/exabel/api/data/v1/namespace_service_pb2.py +46 -0
  305. exabel/stubs/exabel/api/data/v1/namespace_service_pb2.pyi +49 -0
  306. exabel/stubs/exabel/api/data/v1/namespace_service_pb2_grpc.py +117 -0
  307. exabel/stubs/exabel/api/data/v1/namespaces_messages_pb2.py +42 -0
  308. exabel/stubs/exabel/api/data/v1/namespaces_messages_pb2.pyi +35 -0
  309. exabel/stubs/exabel/api/data/v1/namespaces_messages_pb2_grpc.py +24 -0
  310. exabel/stubs/exabel/api/data/v1/relationship_messages_pb2.py +58 -0
  311. exabel/stubs/exabel/api/data/v1/relationship_messages_pb2.pyi +109 -0
  312. exabel/stubs/exabel/api/data/v1/relationship_messages_pb2_grpc.py +24 -0
  313. exabel/stubs/exabel/api/data/v1/relationship_service_pb2.py +113 -0
  314. exabel/stubs/exabel/api/data/v1/relationship_service_pb2.pyi +356 -0
  315. exabel/stubs/exabel/api/data/v1/relationship_service_pb2_grpc.py +531 -0
  316. exabel/stubs/exabel/api/data/v1/search_messages_pb2.py +47 -0
  317. exabel/stubs/exabel/api/data/v1/search_messages_pb2.pyi +98 -0
  318. exabel/stubs/exabel/api/data/v1/search_messages_pb2_grpc.py +24 -0
  319. exabel/stubs/exabel/api/data/v1/service_pb2.py +36 -0
  320. exabel/stubs/exabel/api/data/v1/service_pb2.pyi +8 -0
  321. exabel/stubs/exabel/api/data/v1/service_pb2_grpc.py +24 -0
  322. exabel/stubs/exabel/api/data/v1/signal_messages_pb2.py +74 -0
  323. exabel/stubs/exabel/api/data/v1/signal_messages_pb2.pyi +159 -0
  324. exabel/stubs/exabel/api/data/v1/signal_messages_pb2_grpc.py +24 -0
  325. exabel/stubs/exabel/api/data/v1/signal_service_pb2.py +95 -0
  326. exabel/stubs/exabel/api/data/v1/signal_service_pb2.pyi +311 -0
  327. exabel/stubs/exabel/api/data/v1/signal_service_pb2_grpc.py +433 -0
  328. exabel/stubs/exabel/api/data/v1/time_series_messages_pb2.py +78 -0
  329. exabel/stubs/exabel/api/data/v1/time_series_messages_pb2.pyi +309 -0
  330. exabel/stubs/exabel/api/data/v1/time_series_messages_pb2_grpc.py +24 -0
  331. exabel/stubs/exabel/api/data/v1/time_series_service_pb2.py +133 -0
  332. exabel/stubs/exabel/api/data/v1/time_series_service_pb2.pyi +538 -0
  333. exabel/stubs/exabel/api/data/v1/time_series_service_pb2_grpc.py +448 -0
  334. exabel/stubs/exabel/api/management/__init__.py +0 -0
  335. exabel/stubs/exabel/api/management/__init__.pyi +1 -0
  336. exabel/stubs/exabel/api/management/all_pb2.py +3 -0
  337. exabel/stubs/exabel/api/management/all_pb2_grpc.py +3 -0
  338. exabel/stubs/exabel/api/management/v1/__init__.py +0 -0
  339. exabel/stubs/exabel/api/management/v1/__init__.pyi +5 -0
  340. exabel/stubs/exabel/api/management/v1/all_pb2.py +8 -0
  341. exabel/stubs/exabel/api/management/v1/all_pb2_grpc.py +8 -0
  342. exabel/stubs/exabel/api/management/v1/folder_messages_pb2.py +65 -0
  343. exabel/stubs/exabel/api/management/v1/folder_messages_pb2.pyi +222 -0
  344. exabel/stubs/exabel/api/management/v1/folder_messages_pb2_grpc.py +24 -0
  345. exabel/stubs/exabel/api/management/v1/library_service_pb2.py +127 -0
  346. exabel/stubs/exabel/api/management/v1/library_service_pb2.pyi +377 -0
  347. exabel/stubs/exabel/api/management/v1/library_service_pb2_grpc.py +596 -0
  348. exabel/stubs/exabel/api/management/v1/service_pb2.py +36 -0
  349. exabel/stubs/exabel/api/management/v1/service_pb2.pyi +8 -0
  350. exabel/stubs/exabel/api/management/v1/service_pb2_grpc.py +24 -0
  351. exabel/stubs/exabel/api/management/v1/user_messages_pb2.py +44 -0
  352. exabel/stubs/exabel/api/management/v1/user_messages_pb2.pyi +71 -0
  353. exabel/stubs/exabel/api/management/v1/user_messages_pb2_grpc.py +24 -0
  354. exabel/stubs/exabel/api/management/v1/user_service_pb2.py +52 -0
  355. exabel/stubs/exabel/api/management/v1/user_service_pb2.pyi +79 -0
  356. exabel/stubs/exabel/api/management/v1/user_service_pb2_grpc.py +155 -0
  357. exabel/stubs/exabel/api/math/__init__.py +0 -0
  358. exabel/stubs/exabel/api/math/__init__.pyi +2 -0
  359. exabel/stubs/exabel/api/math/aggregation_pb2.py +37 -0
  360. exabel/stubs/exabel/api/math/aggregation_pb2.pyi +61 -0
  361. exabel/stubs/exabel/api/math/aggregation_pb2_grpc.py +24 -0
  362. exabel/stubs/exabel/api/math/all_pb2.py +5 -0
  363. exabel/stubs/exabel/api/math/all_pb2_grpc.py +5 -0
  364. exabel/stubs/exabel/api/math/change_pb2.py +37 -0
  365. exabel/stubs/exabel/api/math/change_pb2.pyi +41 -0
  366. exabel/stubs/exabel/api/math/change_pb2_grpc.py +24 -0
  367. exabel/stubs/exabel/api/time/__init__.py +0 -0
  368. exabel/stubs/exabel/api/time/__init__.pyi +2 -0
  369. exabel/stubs/exabel/api/time/all_pb2.py +5 -0
  370. exabel/stubs/exabel/api/time/all_pb2_grpc.py +5 -0
  371. exabel/stubs/exabel/api/time/date_pb2.py +37 -0
  372. exabel/stubs/exabel/api/time/date_pb2.pyi +39 -0
  373. exabel/stubs/exabel/api/time/date_pb2_grpc.py +24 -0
  374. exabel/stubs/exabel/api/time/time_range_pb2.py +38 -0
  375. exabel/stubs/exabel/api/time/time_range_pb2.pyi +49 -0
  376. exabel/stubs/exabel/api/time/time_range_pb2_grpc.py +24 -0
  377. exabel/stubs/protoc_gen_openapiv2/__init__.py +0 -0
  378. exabel/stubs/protoc_gen_openapiv2/__init__.pyi +1 -0
  379. exabel/stubs/protoc_gen_openapiv2/options/__init__.py +0 -0
  380. exabel/stubs/protoc_gen_openapiv2/options/__init__.pyi +2 -0
  381. exabel/stubs/protoc_gen_openapiv2/options/annotations_pb2.py +37 -0
  382. exabel/stubs/protoc_gen_openapiv2/options/annotations_pb2.pyi +49 -0
  383. exabel/stubs/protoc_gen_openapiv2/options/annotations_pb2_grpc.py +24 -0
  384. exabel/stubs/protoc_gen_openapiv2/options/openapiv2_pb2.py +128 -0
  385. exabel/stubs/protoc_gen_openapiv2/options/openapiv2_pb2.pyi +1342 -0
  386. exabel/stubs/protoc_gen_openapiv2/options/openapiv2_pb2_grpc.py +24 -0
  387. exabel/util/__init__.py +0 -0
  388. exabel/util/batcher.py +16 -0
  389. exabel/util/case_insensitive_column.py +14 -0
  390. exabel/util/deprecate_arguments.py +146 -0
  391. exabel/util/exceptions.py +14 -0
  392. exabel/util/handle_missing_imports.py +47 -0
  393. exabel/util/import_.py +51 -0
  394. exabel/util/logging_thread_pool_executor.py +40 -0
  395. exabel/util/parse_property_columns.py +32 -0
  396. exabel/util/resource_name_normalization.py +420 -0
  397. exabel/util/type_converter.py +23 -0
  398. exabel/util/warnings.py +2 -0
  399. exabel-8.0.0.dist-info/METADATA +111 -0
  400. exabel-8.0.0.dist-info/RECORD +402 -0
  401. exabel-8.0.0.dist-info/WHEEL +4 -0
  402. 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
+ )