xautomata-hive 3.20.1__tar.gz → 3.21.0__tar.gz

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 (83) hide show
  1. {xautomata_hive-3.20.1/xautomata_hive.egg-info → xautomata_hive-3.21.0}/PKG-INFO +2 -2
  2. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/api.py +9 -2
  3. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/cost_tree_nodes.py +33 -0
  4. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/cost_tree_resources.py +78 -0
  5. xautomata_hive-3.21.0/hive/cookbook/last_object_status.py +213 -0
  6. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/questions.py +27 -0
  7. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/ts_cost_azure_raw.py +54 -0
  8. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/users.py +5 -4
  9. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/webhooks.py +5 -2
  10. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/decorators.py +32 -6
  11. xautomata_hive-3.21.0/hive/version.py +1 -0
  12. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/setup.py +2 -2
  13. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0/xautomata_hive.egg-info}/PKG-INFO +2 -2
  14. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/xautomata_hive.egg-info/SOURCES.txt +1 -0
  15. xautomata_hive-3.20.1/hive/version.py +0 -1
  16. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/LICENSE +0 -0
  17. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/README.md +0 -0
  18. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/__init__.py +0 -0
  19. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/__init__.py +0 -0
  20. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/acl_docs.py +0 -0
  21. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/acl_overrides.py +0 -0
  22. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/analytics.py +0 -0
  23. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/anomalies.py +0 -0
  24. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/automata_ingest.py +0 -0
  25. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/calendars.py +0 -0
  26. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/contacts.py +0 -0
  27. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/cost_tagging.py +0 -0
  28. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/cost_tags.py +0 -0
  29. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/cost_views.py +0 -0
  30. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/customers.py +0 -0
  31. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/dashboards.py +0 -0
  32. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/dispatchers.py +0 -0
  33. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/downtimes.py +0 -0
  34. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/external_tickets.py +0 -0
  35. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/features.py +0 -0
  36. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/files.py +0 -0
  37. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/firmware_updates.py +0 -0
  38. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/google.py +0 -0
  39. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/groups.py +0 -0
  40. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/jobs.py +0 -0
  41. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/last_status.py +0 -0
  42. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/last_status_v2.py +0 -0
  43. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/login.py +0 -0
  44. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/messages.py +0 -0
  45. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/metric_ingest.py +0 -0
  46. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/metric_types.py +0 -0
  47. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/metrics.py +0 -0
  48. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/microsoft.py +0 -0
  49. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/notification_provider_types.py +0 -0
  50. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/notification_providers.py +0 -0
  51. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/objects.py +0 -0
  52. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/opening_reasons.py +0 -0
  53. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/probe_types.py +0 -0
  54. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/probes.py +0 -0
  55. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/probes_log_ingest.py +0 -0
  56. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/profile_topics.py +0 -0
  57. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/reason_for_closure.py +0 -0
  58. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/retention_rules.py +0 -0
  59. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/schedules.py +0 -0
  60. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/services.py +0 -0
  61. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/sites.py +0 -0
  62. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/terms_and_conditions.py +0 -0
  63. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/tree_hierarchy.py +0 -0
  64. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/tree_hierarchy_v2.py +0 -0
  65. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/ts_automata_state.py +0 -0
  66. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/ts_cost_management.py +0 -0
  67. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/ts_cost_management_v2.py +0 -0
  68. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/ts_metric_status.py +0 -0
  69. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/ts_metric_value.py +0 -0
  70. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/ts_ntop_flows.py +0 -0
  71. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/ts_service_status.py +0 -0
  72. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/ts_service_value.py +0 -0
  73. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/users_notifications.py +0 -0
  74. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/virtual_domains.py +0 -0
  75. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/widget_groups.py +0 -0
  76. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/cookbook/widgets.py +0 -0
  77. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/exceptions.py +0 -0
  78. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/infrastrucure_keys.py +0 -0
  79. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/hive/tools.py +0 -0
  80. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/setup.cfg +0 -0
  81. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/xautomata_hive.egg-info/dependency_links.txt +0 -0
  82. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/xautomata_hive.egg-info/requires.txt +1 -1
  83. {xautomata_hive-3.20.1 → xautomata_hive-3.21.0}/xautomata_hive.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xautomata-hive
3
- Version: 3.20.1
3
+ Version: 3.21.0
4
4
  Home-page: https://github.com/sherlogic/xautomata-hive.git
5
5
  Author: Enrico Ferro - Andrea Jacassi
6
6
  Author-email:
@@ -8,9 +8,9 @@ License: MIT
8
8
  Requires-Python: >=3.8.0
9
9
  Description-Content-Type: text/markdown
10
10
  License-File: LICENSE
11
+ Requires-Dist: urllib3==2.0.4
11
12
  Requires-Dist: requests==2.31.0
12
13
  Requires-Dist: tqdm==4.64.1
13
- Requires-Dist: urllib3==2.0.4
14
14
 
15
15
  # Xautomata API
16
16
  Pacchetto che fornisca una interfaccia semplice per usare le API di Xautomata in python
@@ -52,6 +52,7 @@ class ApiManager:
52
52
  _timeout_sleep_time = 120 # tempo di attesa tra un retry e quello successivo in caso di timeout
53
53
  _silence_warning = False # da implementare
54
54
  num_items = None # serve per quando si mette la count a True, di default vale 0
55
+ response = [] # variabile in cui mettere la risposta degli endpoing per poter accedere alla versione originale
55
56
 
56
57
  def __init__(self, root, user, password, ssl_verify: bool = True):
57
58
 
@@ -155,6 +156,8 @@ class ApiManager:
155
156
 
156
157
  url = f'{self.root}{path}'
157
158
 
159
+ self.response = [] # reset dell'attributo responce, cosi da non accodare risposte proveninenti da richieste diverse
160
+
158
161
  @warmstart(active=warm_start, args_ex=[2], verbose=False)
159
162
  @paginate(single_page=single_page, page_size=page_size, skip=_params_['skip'], limit=_params_['limit'], bulk=bulk)
160
163
  @timeout_retry(max_tries=self._timeout_retry, sleep_time=self._timeout_sleep_time)
@@ -166,7 +169,8 @@ class ApiManager:
166
169
  logger.debug(f'request params (skip and limit may differ from your setting due pagination): {_params}')
167
170
  logger.debug(f'request payload: {_payload}')
168
171
 
169
- response = get_session(self._timeout, self._timeout_get_session_retry, self._timeout_get_session_backoff_factor).request(_mode, url=_url, json=_payload, params=_params, headers=_headers, verify=self._SSL_verify, **_kwargs)
172
+ response = get_session(self._timeout, self._timeout_get_session_retry, self._timeout_get_session_backoff_factor).request(_mode, url=_url, json=_payload, params=_params,
173
+ headers=_headers, verify=self._SSL_verify, **_kwargs)
170
174
  if response.status_code == 401: raise UnauthorizedException
171
175
  if response.status_code != 200 and response.status_code != 504: # 504 non e' gestito dalle API per cui la responce non sarebbe json serializable
172
176
  logger.error(response.json())
@@ -178,6 +182,8 @@ class ApiManager:
178
182
  logger.debug(f'responce: {response.json()}')
179
183
  logger.debug(f'header: {response.headers}')
180
184
 
185
+ self.response.append(response) # sotto forma di lista perche se la risposta viene paginata questa viene spezzata su piu risposte
186
+
181
187
  return response.json()
182
188
 
183
189
  return run_request(mode, url, _headers_, _payload_, _params_, **kwargs)
@@ -516,6 +522,7 @@ from hive.cookbook.schedules import Schedules
516
522
  from hive.cookbook.services import Services
517
523
  from hive.cookbook.sites import Sites
518
524
  from hive.cookbook.last_status import LastStatus
525
+ from hive.cookbook.last_object_status import LastObjectStatus
519
526
  from hive.cookbook.last_status_v2 import LastStatusV2
520
527
  from hive.cookbook.terms_and_conditions import TermsAndConditions
521
528
  from hive.cookbook.tree_hierarchy import TreeHierarchy
@@ -538,7 +545,7 @@ from hive.cookbook.widget_groups import WidgetGroups
538
545
  # hive imports stop
539
546
 
540
547
 
541
- class XautomataApi(AclDocs, AclOverrides, Analytics, Anomalies, Calendars, CostTagging, CostTags, CostViews, CostTreeNodes, CostTreeResources, Contacts, Customers, Dashboards, Dispatchers, Downtimes, ExternalTickets, Features, Files, FirmwareUpdates, Groups, AutomataIngest, MetricIngest, Microsoft, Google, Login, Jobs, Messages, Metrics, ProbesLogIngest, MetricTypes, NotificationProviders, NotificationProviderTypes, Objects, OpeningReasons, Probes, ProbeTypes, ProfileTopics, Questions, ReasonForClosure, RetentionRules, Schedules, Services, Sites, LastStatus, LastStatusV2, TermsAndConditions, TreeHierarchy, TreeHierarchyV2, TsAutomataState, TsCostAzureRaw, TsCostManagement, TsCostManagementV2, TsMetricStatus, TsMetricValue, TsNtopFlows, TsServiceStatus, TsServiceValue, Users, UsersNotifications, VirtualDomains, Widgets, Webhooks, WidgetGroups):
548
+ class XautomataApi(AclDocs, AclOverrides, Analytics, Anomalies, Calendars, CostTagging, CostTags, CostViews, CostTreeNodes, CostTreeResources, Contacts, Customers, Dashboards, Dispatchers, Downtimes, ExternalTickets, Features, Files, FirmwareUpdates, Groups, AutomataIngest, MetricIngest, Microsoft, Google, Login, Jobs, Messages, Metrics, ProbesLogIngest, MetricTypes, NotificationProviders, NotificationProviderTypes, Objects, OpeningReasons, Probes, ProbeTypes, ProfileTopics, Questions, ReasonForClosure, RetentionRules, Schedules, Services, Sites, LastStatus, LastObjectStatus, LastStatusV2, TermsAndConditions, TreeHierarchy, TreeHierarchyV2, TsAutomataState, TsCostAzureRaw, TsCostManagement, TsCostManagementV2, TsMetricStatus, TsMetricValue, TsNtopFlows, TsServiceStatus, TsServiceValue, Users, UsersNotifications, VirtualDomains, Widgets, Webhooks, WidgetGroups):
542
549
  """
543
550
  Class with each specific API, based on the ApiManager Class created for a more general interaction with Xautomata API
544
551
  """
@@ -197,6 +197,39 @@ class CostTreeNodes(ApiManager):
197
197
  params=params, **kwargs)
198
198
  return response
199
199
 
200
+ def cost_tree_nodes_navigate_tree_v2(self, uuid: str,
201
+ warm_start: bool = False, kwargs: dict = None, **params) -> list:
202
+ """Get Tree From Node V2
203
+
204
+ Args:
205
+ uuid (str, required): uuid
206
+ warm_start (bool, optional): salva la risposta in un file e se viene richiamata la stessa funzione con gli stessi argomenti restituisce il contenuto del file. Default to False.
207
+ kwargs (dict, optional): additional parameters for execute. Default to None.
208
+ **params: additional parameters for the API.
209
+
210
+ Keyword Args:
211
+ date_start (string required): additional filter - parameter
212
+ date_end (string required): additional filter - parameter
213
+ resource_id (string optional): additional filter - parameter
214
+ previous_period (boolean optional): additional filter - parameter
215
+
216
+ Returns: list"""
217
+ if kwargs is None:
218
+ kwargs = dict()
219
+ kwargs, params = handling_single_page_methods(kwargs=kwargs, params
220
+ =params)
221
+ official_params_list = ['date_start', 'date_end', 'resource_id',
222
+ 'previous_period']
223
+ params.get('date_start'), params.get('date_end'), params.get(
224
+ 'resource_id'), params.get('previous_period')
225
+ if not self._silence_warning:
226
+ warning_wrong_parameters(self.cost_tree_nodes_navigate_tree_v2.
227
+ __name__, params, official_params_list)
228
+ response = self.execute('GET', path=
229
+ f'/cost_tree_nodes/navigate_tree/{uuid}/v2', warm_start=
230
+ warm_start, params=params, **kwargs)
231
+ return response
232
+
200
233
  def cost_tree_nodes_get_node_resources(self, uuid: str,
201
234
  warm_start: bool = False, single_page: bool = False,
202
235
  page_size: int = 5000, kwargs: dict = None, **params) -> list:
@@ -119,6 +119,48 @@ class CostTreeResources(ApiManager):
119
119
  =params, **kwargs)
120
120
  return response
121
121
 
122
+ def cost_tree_resources_all_resource_ids_v2(self,
123
+ warm_start: bool = False, single_page: bool = False,
124
+ page_size: int = 5000, kwargs: dict = None, **params) -> list:
125
+ """Get Resource Ids V2
126
+
127
+ Args:
128
+ warm_start (bool, optional): salva la risposta in un file e se viene richiamata la stessa funzione con gli stessi argomenti restituisce il contenuto del file. Default to False.
129
+ single_page (bool, optional): se False la risposta viene ottenuta a step per non appesantire le API. Default to False.
130
+ page_size (int, optional): Numero di oggetti per pagina se single_page == False. Default to 5000.
131
+ kwargs (dict, optional): additional parameters for execute. Default to None.
132
+ **params: additional parameters for the API.
133
+
134
+ Keyword Args:
135
+ date_start (string required): additional filter - parameter
136
+ date_end (string required): additional filter - parameter
137
+ uuid_customer (string optional): additional filter - parameter
138
+ uuid_view (string optional): additional filter - parameter
139
+ skip (integer optional): numero di oggetti che si vogliono saltare nella risposta. Default to 0. - parameter
140
+ limit (integer optional): numero di oggetti massimi che si vogliono ottenere. Default to 1_000_000. - parameter
141
+ like (boolean optional): Se True, eventuali filtri richiesti dalla API vengono presi come porzioni di testo, se False il matching sul campo dei filtri deve essere esatto. Default to True. - parameter
142
+ join (boolean optional): Se join = true, ogni riga restituita conterra' chiavi aggiuntive che fanno riferimento ad altre entita', con cui la riga ha relazioni 1:1. Default to False - parameter
143
+ count (boolean optional): Se True nel header della risposta e' presente la dimensione massima a db della chiamata fatta, sconsigliabile perche raddoppia il tempo per chiamata. Default to False. - parameter
144
+
145
+ Returns: list"""
146
+ if kwargs is None:
147
+ kwargs = dict()
148
+ official_params_list = ['date_start', 'date_end', 'uuid_customer',
149
+ 'uuid_view', 'skip', 'limit', 'like', 'join', 'count']
150
+ params.get('date_start'), params.get('date_end'), params.get(
151
+ 'uuid_customer'), params.get('uuid_view'), params.get('skip'
152
+ ), params.get('limit'), params.get('like'), params.get('join'
153
+ ), params.get('count')
154
+ if not self._silence_warning:
155
+ warning_wrong_parameters(self.
156
+ cost_tree_resources_all_resource_ids_v2.__name__, params,
157
+ official_params_list)
158
+ response = self.execute('GET', path=
159
+ f'/cost_tree_resources/all_resource_ids/v2', single_page=
160
+ single_page, page_size=page_size, warm_start=warm_start, params
161
+ =params, **kwargs)
162
+ return response
163
+
122
164
  def cost_tree_resources_unfully_assigned_resource_ids(self,
123
165
  uuid_view: str, warm_start: bool = False, single_page: bool = False,
124
166
  page_size: int = 5000, kwargs: dict = None, **params) -> list:
@@ -155,6 +197,42 @@ class CostTreeResources(ApiManager):
155
197
  warm_start, params=params, **kwargs)
156
198
  return response
157
199
 
200
+ def cost_tree_resources_unfully_assigned_resource_ids_v2(self,
201
+ uuid_view: str, warm_start: bool = False, single_page: bool = False,
202
+ page_size: int = 5000, kwargs: dict = None, **params) -> list:
203
+ """Get Unfully Assigned Resource Ids V2
204
+
205
+ Args:
206
+ uuid_view (str, required): uuid_view
207
+ warm_start (bool, optional): salva la risposta in un file e se viene richiamata la stessa funzione con gli stessi argomenti restituisce il contenuto del file. Default to False.
208
+ single_page (bool, optional): se False la risposta viene ottenuta a step per non appesantire le API. Default to False.
209
+ page_size (int, optional): Numero di oggetti per pagina se single_page == False. Default to 5000.
210
+ kwargs (dict, optional): additional parameters for execute. Default to None.
211
+ **params: additional parameters for the API.
212
+
213
+ Keyword Args:
214
+ skip (integer optional): numero di oggetti che si vogliono saltare nella risposta. Default to 0. - parameter
215
+ limit (integer optional): numero di oggetti massimi che si vogliono ottenere. Default to 1_000_000. - parameter
216
+ like (boolean optional): Se True, eventuali filtri richiesti dalla API vengono presi come porzioni di testo, se False il matching sul campo dei filtri deve essere esatto. Default to True. - parameter
217
+ join (boolean optional): Se join = true, ogni riga restituita conterra' chiavi aggiuntive che fanno riferimento ad altre entita', con cui la riga ha relazioni 1:1. Default to False - parameter
218
+ count (boolean optional): Se True nel header della risposta e' presente la dimensione massima a db della chiamata fatta, sconsigliabile perche raddoppia il tempo per chiamata. Default to False. - parameter
219
+
220
+ Returns: list"""
221
+ if kwargs is None:
222
+ kwargs = dict()
223
+ official_params_list = ['skip', 'limit', 'like', 'join', 'count']
224
+ params.get('skip'), params.get('limit'), params.get('like'
225
+ ), params.get('join'), params.get('count')
226
+ if not self._silence_warning:
227
+ warning_wrong_parameters(self.
228
+ cost_tree_resources_unfully_assigned_resource_ids_v2.
229
+ __name__, params, official_params_list)
230
+ response = self.execute('GET', path=
231
+ f'/cost_tree_resources/{uuid_view}/unfully_assigned_resource_ids/v2'
232
+ , single_page=single_page, page_size=page_size, warm_start=
233
+ warm_start, params=params, **kwargs)
234
+ return response
235
+
158
236
  def cost_tree_resources_unfully_assigned_resources(self, uuid_view: str,
159
237
  warm_start: bool = False, single_page: bool = False,
160
238
  page_size: int = 5000, kwargs: dict = None, **params) -> list:
@@ -0,0 +1,213 @@
1
+ from hive.api import ApiManager, handling_single_page_methods, warning_wrong_parameters
2
+
3
+
4
+ class LastObjectStatus(ApiManager):
5
+ """Class that handles all the XAutomata last_object_status APIs"""
6
+
7
+ def last_object_status(self, warm_start: bool = False,
8
+ single_page: bool = False, page_size: int = 5000,
9
+ kwargs: dict = None, **params) -> list:
10
+ """Read Last Object Status
11
+
12
+ Args:
13
+ warm_start (bool, optional): salva la risposta in un file e se viene richiamata la stessa funzione con gli stessi argomenti restituisce il contenuto del file. Default to False.
14
+ single_page (bool, optional): se False la risposta viene ottenuta a step per non appesantire le API. Default to False.
15
+ page_size (int, optional): Numero di oggetti per pagina se single_page == False. Default to 5000.
16
+ kwargs (dict, optional): additional parameters for execute. Default to None.
17
+ **params: additional parameters for the API.
18
+
19
+ Keyword Args:
20
+ extract_valueless_metrics (boolean optional): additional filter - parameter
21
+ extract_automata_domain (None optional): additional filter - parameter
22
+ sort_by (string optional): Stringa separata da virgole di campi su cui ordinare. Si indica uno o piu campi della risposta e si puo chiedere di ottenere i valori di quei campi in ordine ascendente o discendente. Esempio "Customer:Desc". Default to "". - parameter
23
+ null_fields (string optional): additional filter - parameter
24
+ uuid_customer (string optional): additional filter - parameter
25
+ customer_code (string optional): additional filter - parameter
26
+ customer_status (string optional): additional filter - parameter
27
+ uuid_site (string optional): additional filter - parameter
28
+ site_code (string optional): additional filter - parameter
29
+ site_description (string optional): additional filter - parameter
30
+ site_address (string optional): additional filter - parameter
31
+ site_zip_code (string optional): additional filter - parameter
32
+ site_city (string optional): additional filter - parameter
33
+ site_country (string optional): additional filter - parameter
34
+ site_state_province (string optional): additional filter - parameter
35
+ site_status (string optional): additional filter - parameter
36
+ uuid_group (string optional): additional filter - parameter
37
+ group_name (string optional): additional filter - parameter
38
+ group_status (string optional): additional filter - parameter
39
+ group_type (string optional): additional filter - parameter
40
+ uuid_object (string optional): additional filter - parameter
41
+ object_name (string optional): additional filter - parameter
42
+ object_status (string optional): additional filter - parameter
43
+ object_profile (string optional): additional filter - parameter
44
+ uuid_metric_type (string optional): additional filter - parameter
45
+ metric_type_name (string optional): additional filter - parameter
46
+ metric_type_status (string optional): additional filter - parameter
47
+ uuid_metric (string optional): additional filter - parameter
48
+ metric_name (string optional): additional filter - parameter
49
+ metric_status (string optional): additional filter - parameter
50
+ metric_profile (string optional): additional filter - parameter
51
+ topic (string optional): additional filter - parameter
52
+ last_value_uuid_probe (string optional): additional filter - parameter
53
+ last_value_timestamp_start (string optional): additional filter - parameter
54
+ last_value_timestamp_end (string optional): additional filter - parameter
55
+ last_value_object_type (string optional): additional filter - parameter
56
+ last_value_name (string optional): additional filter - parameter
57
+ last_value_value (string optional): additional filter - parameter
58
+ last_value_unit (string optional): additional filter - parameter
59
+ last_value_description (string optional): additional filter - parameter
60
+ last_value_status (None optional): additional filter - parameter
61
+ last_value_ranking (integer optional): additional filter - parameter
62
+ skip (integer optional): numero di oggetti che si vogliono saltare nella risposta. Default to 0. - parameter
63
+ limit (integer optional): numero di oggetti massimi che si vogliono ottenere. Default to 1_000_000. - parameter
64
+ like (boolean optional): Se True, eventuali filtri richiesti dalla API vengono presi come porzioni di testo, se False il matching sul campo dei filtri deve essere esatto. Default to True. - parameter
65
+ join (boolean optional): Se join = true, ogni riga restituita conterra' chiavi aggiuntive che fanno riferimento ad altre entita', con cui la riga ha relazioni 1:1. Default to False - parameter
66
+ count (boolean optional): Se True nel header della risposta e' presente la dimensione massima a db della chiamata fatta, sconsigliabile perche raddoppia il tempo per chiamata. Default to False. - parameter
67
+
68
+ Returns: list"""
69
+ if kwargs is None:
70
+ kwargs = dict()
71
+ official_params_list = ['extract_valueless_metrics',
72
+ 'extract_automata_domain', 'sort_by', 'null_fields',
73
+ 'uuid_customer', 'customer_code', 'customer_status',
74
+ 'uuid_site', 'site_code', 'site_description', 'site_address',
75
+ 'site_zip_code', 'site_city', 'site_country',
76
+ 'site_state_province', 'site_status', 'uuid_group',
77
+ 'group_name', 'group_status', 'group_type', 'uuid_object',
78
+ 'object_name', 'object_status', 'object_profile',
79
+ 'uuid_metric_type', 'metric_type_name', 'metric_type_status',
80
+ 'uuid_metric', 'metric_name', 'metric_status', 'metric_profile',
81
+ 'topic', 'last_value_uuid_probe', 'last_value_timestamp_start',
82
+ 'last_value_timestamp_end', 'last_value_object_type',
83
+ 'last_value_name', 'last_value_value', 'last_value_unit',
84
+ 'last_value_description', 'last_value_status',
85
+ 'last_value_ranking', 'skip', 'limit', 'like', 'join', 'count']
86
+ params.get('extract_valueless_metrics'), params.get(
87
+ 'extract_automata_domain'), params.get('sort_by'), params.get(
88
+ 'null_fields'), params.get('uuid_customer'), params.get(
89
+ 'customer_code'), params.get('customer_status'), params.get(
90
+ 'uuid_site'), params.get('site_code'), params.get(
91
+ 'site_description'), params.get('site_address'), params.get(
92
+ 'site_zip_code'), params.get('site_city'), params.get(
93
+ 'site_country'), params.get('site_state_province'), params.get(
94
+ 'site_status'), params.get('uuid_group'), params.get('group_name'
95
+ ), params.get('group_status'), params.get('group_type'
96
+ ), params.get('uuid_object'), params.get('object_name'
97
+ ), params.get('object_status'), params.get('object_profile'
98
+ ), params.get('uuid_metric_type'), params.get('metric_type_name'
99
+ ), params.get('metric_type_status'), params.get('uuid_metric'
100
+ ), params.get('metric_name'), params.get('metric_status'
101
+ ), params.get('metric_profile'), params.get('topic'), params.get(
102
+ 'last_value_uuid_probe'), params.get('last_value_timestamp_start'
103
+ ), params.get('last_value_timestamp_end'), params.get(
104
+ 'last_value_object_type'), params.get('last_value_name'
105
+ ), params.get('last_value_value'), params.get('last_value_unit'
106
+ ), params.get('last_value_description'), params.get(
107
+ 'last_value_status'), params.get('last_value_ranking'), params.get(
108
+ 'skip'), params.get('limit'), params.get('like'), params.get('join'
109
+ ), params.get('count')
110
+ if not self._silence_warning:
111
+ warning_wrong_parameters(self.last_object_status.__name__,
112
+ params, official_params_list)
113
+ response = self.execute('GET', path=f'/last_object_status/',
114
+ single_page=single_page, page_size=page_size, warm_start=
115
+ warm_start, params=params, **kwargs)
116
+ return response
117
+
118
+ def last_object_status_create(self, params: dict = False,
119
+ kwargs: dict = None, **payload) -> list:
120
+ """Read Last Object Status Lists
121
+
122
+ Args:
123
+ params (dict, optional): additional parameters for the API.
124
+ kwargs (dict, optional): additional parameters for execute. Default to None.
125
+ **payload: additional parameters for the API.
126
+
127
+ Keyword Args:
128
+ sort_by (string optional): Stringa separata da virgole di campi su cui ordinare. Si indica uno o piu campi della risposta e si puo chiedere di ottenere i valori di quei campi in ordine ascendente o discendente. Esempio "Customer:Desc". Default to "". - parameter
129
+ null_fields (string optional): additional filter - parameter
130
+ skip (integer optional): numero di oggetti che si vogliono saltare nella risposta. Default to 0. - parameter
131
+ limit (integer optional): numero di oggetti massimi che si vogliono ottenere. Default to 1_000_000. - parameter
132
+ like (boolean optional): Se True, eventuali filtri richiesti dalla API vengono presi come porzioni di testo, se False il matching sul campo dei filtri deve essere esatto. Default to True. - parameter
133
+ join (boolean optional): Se join = true, ogni riga restituita conterra' chiavi aggiuntive che fanno riferimento ad altre entita', con cui la riga ha relazioni 1:1. Default to False - parameter
134
+ count (boolean optional): Se True nel header della risposta e' presente la dimensione massima a db della chiamata fatta, sconsigliabile perche raddoppia il tempo per chiamata. Default to False. - parameter
135
+ uuid_customer (array optional): additional filter - payload
136
+ customer_code (array optional): additional filter - payload
137
+ customer_status (array optional): additional filter - payload
138
+ uuid_site (array optional): additional filter - payload
139
+ site_code (array optional): additional filter - payload
140
+ site_description (array optional): additional filter - payload
141
+ site_address (array optional): additional filter - payload
142
+ site_zip_code (array optional): additional filter - payload
143
+ site_city (array optional): additional filter - payload
144
+ site_country (array optional): additional filter - payload
145
+ site_state_province (array optional): additional filter - payload
146
+ site_status (array optional): additional filter - payload
147
+ uuid_group (array optional): additional filter - payload
148
+ group_name (array optional): additional filter - payload
149
+ group_status (array optional): additional filter - payload
150
+ group_type (array optional): additional filter - payload
151
+ uuid_object (array optional): additional filter - payload
152
+ object_name (array optional): additional filter - payload
153
+ object_status (array optional): additional filter - payload
154
+ object_profile (array optional): additional filter - payload
155
+ uuid_metric_type (array optional): additional filter - payload
156
+ metric_type_name (array optional): additional filter - payload
157
+ metric_type_status (array optional): additional filter - payload
158
+ uuid_metric (array optional): additional filter - payload
159
+ metric_name (array optional): additional filter - payload
160
+ metric_status (array optional): additional filter - payload
161
+ metric_profile (array optional): additional filter - payload
162
+ topic (array optional): additional filter - payload
163
+ last_value_uuid_probe (array optional): additional filter - payload
164
+ last_value_timestamp (array optional): additional filter - payload
165
+ last_value_object_type (array optional): additional filter - payload
166
+ last_value_name (array optional): additional filter - payload
167
+ last_value_value (array optional): additional filter - payload
168
+ last_value_unit (array optional): additional filter - payload
169
+ last_value_description (array optional): additional filter - payload
170
+ last_value_status (array optional): additional filter - payload
171
+ last_value_ranking (array optional): additional filter - payload
172
+
173
+ Returns: list"""
174
+ if kwargs is None:
175
+ kwargs = dict()
176
+ official_payload_list = ['uuid_customer', 'customer_code',
177
+ 'customer_status', 'uuid_site', 'site_code', 'site_description',
178
+ 'site_address', 'site_zip_code', 'site_city', 'site_country',
179
+ 'site_state_province', 'site_status', 'uuid_group',
180
+ 'group_name', 'group_status', 'group_type', 'uuid_object',
181
+ 'object_name', 'object_status', 'object_profile',
182
+ 'uuid_metric_type', 'metric_type_name', 'metric_type_status',
183
+ 'uuid_metric', 'metric_name', 'metric_status', 'metric_profile',
184
+ 'topic', 'last_value_uuid_probe', 'last_value_timestamp',
185
+ 'last_value_object_type', 'last_value_name', 'last_value_value',
186
+ 'last_value_unit', 'last_value_description',
187
+ 'last_value_status', 'last_value_ranking']
188
+ payload.get('uuid_customer'), payload.get('customer_code'
189
+ ), payload.get('customer_status'), payload.get('uuid_site'
190
+ ), payload.get('site_code'), payload.get('site_description'
191
+ ), payload.get('site_address'), payload.get('site_zip_code'
192
+ ), payload.get('site_city'), payload.get('site_country'
193
+ ), payload.get('site_state_province'), payload.get('site_status'
194
+ ), payload.get('uuid_group'), payload.get('group_name'
195
+ ), payload.get('group_status'), payload.get('group_type'
196
+ ), payload.get('uuid_object'), payload.get('object_name'
197
+ ), payload.get('object_status'), payload.get('object_profile'
198
+ ), payload.get('uuid_metric_type'), payload.get('metric_type_name'
199
+ ), payload.get('metric_type_status'), payload.get('uuid_metric'
200
+ ), payload.get('metric_name'), payload.get('metric_status'
201
+ ), payload.get('metric_profile'), payload.get('topic'
202
+ ), payload.get('last_value_uuid_probe'), payload.get(
203
+ 'last_value_timestamp'), payload.get('last_value_object_type'
204
+ ), payload.get('last_value_name'), payload.get('last_value_value'
205
+ ), payload.get('last_value_unit'), payload.get(
206
+ 'last_value_description'), payload.get('last_value_status'
207
+ ), payload.get('last_value_ranking')
208
+ if not self._silence_warning:
209
+ warning_wrong_parameters(self.last_object_status_create.
210
+ __name__, payload, official_payload_list)
211
+ response = self.execute('POST', path=f'/last_object_status/',
212
+ params=params, payload=payload, **kwargs)
213
+ return response
@@ -110,6 +110,33 @@ class Questions(ApiManager):
110
110
  payload, **kwargs)
111
111
  return response
112
112
 
113
+ def questions_by_token(self, uuid: str, warm_start: bool = False,
114
+ kwargs: dict = None, **params) -> list:
115
+ """Read Tracking Question By Token
116
+
117
+ Args:
118
+ uuid (str, required): uuid
119
+ warm_start (bool, optional): salva la risposta in un file e se viene richiamata la stessa funzione con gli stessi argomenti restituisce il contenuto del file. Default to False.
120
+ kwargs (dict, optional): additional parameters for execute. Default to None.
121
+ **params: additional parameters for the API.
122
+
123
+ Keyword Args:
124
+ q-token (string required): additional filter - parameter
125
+
126
+ Returns: list"""
127
+ if kwargs is None:
128
+ kwargs = dict()
129
+ kwargs, params = handling_single_page_methods(kwargs=kwargs, params
130
+ =params)
131
+ official_params_list = ['q-token']
132
+ params.get('q-token')
133
+ if not self._silence_warning:
134
+ warning_wrong_parameters(self.questions_by_token.__name__,
135
+ params, official_params_list)
136
+ response = self.execute('GET', path=f'/questions/{uuid}/by_token',
137
+ warm_start=warm_start, params=params, **kwargs)
138
+ return response
139
+
113
140
  def questions_reset_put(self, uuid: str, kwargs: dict = None, **payload
114
141
  ) -> list:
115
142
  """Reset Tracking Question
@@ -592,3 +592,57 @@ class TsCostAzureRaw(ApiManager):
592
592
  f'/ts_cost_azure_raw/compute/tenant/{uuid_tenant}/', params=
593
593
  params, **kwargs)
594
594
  return response
595
+
596
+ def ts_cost_azure_raw_compute_import_tags_tenant_create(self,
597
+ uuid_tenant: str, kwargs: dict = None, **params) -> list:
598
+ """Bulk Import Tags Tenant
599
+
600
+ Args:
601
+ uuid_tenant (str, required): uuid_tenant
602
+ kwargs (dict, optional): additional parameters for execute. Default to None.
603
+ **params: additional parameters for the API.
604
+
605
+ Keyword Args:
606
+ date_start (string required): additional filter - parameter
607
+ date_end (string required): additional filter - parameter
608
+
609
+ Returns: list"""
610
+ if kwargs is None:
611
+ kwargs = dict()
612
+ official_params_list = ['date_start', 'date_end']
613
+ params.get('date_start'), params.get('date_end')
614
+ if not self._silence_warning:
615
+ warning_wrong_parameters(self.
616
+ ts_cost_azure_raw_compute_import_tags_tenant_create.
617
+ __name__, params, official_params_list)
618
+ response = self.execute('POST', path=
619
+ f'/ts_cost_azure_raw/compute/import_tags/tenant/{uuid_tenant}',
620
+ params=params, **kwargs)
621
+ return response
622
+
623
+ def ts_cost_azure_raw_compute_import_tags_customer_create(self,
624
+ uuid_customer: str, kwargs: dict = None, **params) -> list:
625
+ """Bulk Import Tags Customer
626
+
627
+ Args:
628
+ uuid_customer (str, required): uuid_customer
629
+ kwargs (dict, optional): additional parameters for execute. Default to None.
630
+ **params: additional parameters for the API.
631
+
632
+ Keyword Args:
633
+ date_start (string required): additional filter - parameter
634
+ date_end (string required): additional filter - parameter
635
+
636
+ Returns: list"""
637
+ if kwargs is None:
638
+ kwargs = dict()
639
+ official_params_list = ['date_start', 'date_end']
640
+ params.get('date_start'), params.get('date_end')
641
+ if not self._silence_warning:
642
+ warning_wrong_parameters(self.
643
+ ts_cost_azure_raw_compute_import_tags_customer_create.
644
+ __name__, params, official_params_list)
645
+ response = self.execute('POST', path=
646
+ f'/ts_cost_azure_raw/compute/import_tags/customer/{uuid_customer}',
647
+ params=params, **kwargs)
648
+ return response
@@ -1052,6 +1052,7 @@ class Users(ApiManager):
1052
1052
  Keyword Args:
1053
1053
  subject (string required): additional filter - payload
1054
1054
  recipients (array required): additional filter - payload
1055
+ ccn_recipients (array optional): additional filter - payload
1055
1056
  attachments (array optional): additional filter - payload
1056
1057
  template_parameters (object optional): additional filter - payload
1057
1058
  domain (string required): additional filter - payload
@@ -1059,11 +1060,11 @@ class Users(ApiManager):
1059
1060
  Returns: list"""
1060
1061
  if kwargs is None:
1061
1062
  kwargs = dict()
1062
- official_payload_list = ['subject', 'recipients', 'attachments',
1063
- 'template_parameters', 'domain']
1063
+ official_payload_list = ['subject', 'recipients', 'ccn_recipients',
1064
+ 'attachments', 'template_parameters', 'domain']
1064
1065
  payload.get('subject'), payload.get('recipients'), payload.get(
1065
- 'attachments'), payload.get('template_parameters'), payload.get(
1066
- 'domain')
1066
+ 'ccn_recipients'), payload.get('attachments'), payload.get(
1067
+ 'template_parameters'), payload.get('domain')
1067
1068
  if not self._silence_warning:
1068
1069
  warning_wrong_parameters(self.users_send_email_template_create.
1069
1070
  __name__, payload, official_payload_list)
@@ -115,16 +115,19 @@ class Webhooks(ApiManager):
115
115
  return response
116
116
 
117
117
  def webhooks_create_webhook_type(self, webhook_type: str,
118
- kwargs: dict = None) -> list:
118
+ single_page: bool = False, page_size: int = 50, kwargs: dict = None
119
+ ) -> list:
119
120
  """Post Webhook
120
121
 
121
122
  Args:
122
123
  webhook_type (str, required): webhook_type
124
+ single_page (bool, optional): se False la risposta viene ottenuta a step per non appesantire le API. Default to False.
125
+ page_size (int, optional): Numero di oggetti per pagina se single_page == False. Default to 50.
123
126
  kwargs (dict, optional): additional parameters for execute. Default to None.
124
127
 
125
128
  Returns: list"""
126
129
  if kwargs is None:
127
130
  kwargs = dict()
128
131
  response = self.execute('POST', path=f'/webhooks/{webhook_type}',
129
- **kwargs)
132
+ single_page=single_page, page_size=page_size, **kwargs)
130
133
  return response
@@ -131,29 +131,55 @@ def timeout_retry(func=None, max_tries: int = 2, sleep_time: int = 60):
131
131
 
132
132
 
133
133
  def paginate(single_page: bool, page_size: int, skip: int, limit: int, bulk: bool):
134
+ """Questa funzione è un decorator che abilita la paginazione per una funzione.
135
+
136
+ Args:
137
+ single_page: se True, restituisce solo una singola "pagina" di risultati.
138
+ page_size: dimensione della pagina (numero massimo di elementi per chiamata).
139
+ skip: numero di elementi da saltare all'inizio.
140
+ limit: numero massimo di elementi da restituire.
141
+ bulk: se True, gestisce il payload in modalità "bulk", suddividendolo in chunk.
142
+ """
134
143
  def attributes(func):
144
+ # Questo è il decorator interno che avvolge la funzione passata (`func`).
135
145
  @functools.wraps(func)
136
146
  def behaviour(mode, url, headers, payload, params, **kwargs) -> list:
137
- result = []
147
+ # `behaviour` è la funzione wrapper che implementa la logica di paginazione.
148
+ # Accetta i parametri della funzione originale (`func`) e aggiunge il supporto alla paginazione.
149
+ result = [] # Lista che conterrà i risultati aggregati.
138
150
 
139
151
  # se la chiamata è bulk, il payload deve essere un lista e qui viene divisa in chunk e viene chiamata un
140
152
  # chunk per volta, ogni chunk ha la dimensione del page_size
141
153
  if bulk and not single_page: # se la bulk viene richiesta in single_page, ricade nell'uso normale
154
+ # Divide il payload in chunk della dimensione specificata da `page_size`.
142
155
  c_payload = chunks(payload, page_size)
156
+ # Per ogni chunk:
143
157
  for c in c_payload:
158
+ # Chiama la funzione originale (`func`) con il chunk corrente.
144
159
  result_partial = func(mode, url, headers, c, params, **kwargs)
160
+ # Se il risultato non è una lista, lo converte in una lista.
145
161
  if not isinstance(result_partial, list): result_partial = [result_partial]
162
+ # Aggiunge i risultati parziali alla lista complessiva `result`.
146
163
  result += result_partial
147
164
 
148
- else:
149
- size = page_size if not single_page else limit
150
- params['skip'] = skip
151
- params['limit'] = min(size, limit)
152
- while True:
165
+ else: # Se non è in modalità bulk o se è richiesto single_page:
166
+ size = page_size if not single_page else limit # Determina la dimensione della pagina.
167
+ params['skip'] = skip # Imposta il valore iniziale di `skip` nei parametri.
168
+ params['limit'] = min(size, limit) # Imposta il limite massimo per la pagina corrente.
169
+ while True: # Ciclo per iterare attraverso le pagine.
170
+ # Chiama la funzione originale (`func`) con i parametri della pagina corrente.
153
171
  result_partial = func(mode, url, headers, payload, params, **kwargs)
172
+ # Se il risultato non è una lista, lo converte in una lista.
154
173
  if not isinstance(result_partial, list): result_partial = [result_partial]
174
+ # Aggiunge i risultati parziali alla lista complessiva `result`.
155
175
  result += result_partial
176
+ # Aggiorna il valore di `skip` per passare alla pagina successiva.
156
177
  params['skip'] = params['skip'] + size
178
+ # Interrompe il ciclo se:
179
+ # - Non ci sono più risultati (`result_partial` è vuoto).
180
+ # - Il numero di risultati è inferiore alla dimensione della pagina.
181
+ # - Il numero totale di risultati supera il limite specificato.
182
+ # - È richiesto il single_page.
157
183
  if not result_partial or len(result_partial) < size or len(result) > limit or single_page: break
158
184
 
159
185
  # se count è True il result è una lista con dentro una tupla, in questa maniera viene trasmessa solo la tupla
@@ -0,0 +1 @@
1
+ version = '3.21.0'
@@ -15,9 +15,9 @@ with open("hive/version.py", "r") as f:
15
15
  version = version[0].split("'")[1]
16
16
 
17
17
  # version go
18
+ urllib3 = 'urllib3==2.0.4'
18
19
  requests = 'requests==2.31.0'
19
20
  tqdm = 'tqdm==4.64.1'
20
- urllib3 = 'urllib3==2.0.4'
21
21
  # version end
22
22
 
23
23
  setup(
@@ -32,5 +32,5 @@ setup(
32
32
  author_email='',
33
33
  description='',
34
34
  url="https://github.com/sherlogic/xautomata-hive.git",
35
- install_requires=[requests, tqdm, urllib3],
35
+ install_requires=[urllib3, requests, tqdm],
36
36
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xautomata-hive
3
- Version: 3.20.1
3
+ Version: 3.21.0
4
4
  Home-page: https://github.com/sherlogic/xautomata-hive.git
5
5
  Author: Enrico Ferro - Andrea Jacassi
6
6
  Author-email:
@@ -8,9 +8,9 @@ License: MIT
8
8
  Requires-Python: >=3.8.0
9
9
  Description-Content-Type: text/markdown
10
10
  License-File: LICENSE
11
+ Requires-Dist: urllib3==2.0.4
11
12
  Requires-Dist: requests==2.31.0
12
13
  Requires-Dist: tqdm==4.64.1
13
- Requires-Dist: urllib3==2.0.4
14
14
 
15
15
  # Xautomata API
16
16
  Pacchetto che fornisca una interfaccia semplice per usare le API di Xautomata in python
@@ -32,6 +32,7 @@ hive/cookbook/firmware_updates.py
32
32
  hive/cookbook/google.py
33
33
  hive/cookbook/groups.py
34
34
  hive/cookbook/jobs.py
35
+ hive/cookbook/last_object_status.py
35
36
  hive/cookbook/last_status.py
36
37
  hive/cookbook/last_status_v2.py
37
38
  hive/cookbook/login.py
@@ -1 +0,0 @@
1
- version = '3.20.1'
File without changes
@@ -1,3 +1,3 @@
1
+ urllib3==2.0.4
1
2
  requests==2.31.0
2
3
  tqdm==4.64.1
3
- urllib3==2.0.4