datacrunch 1.14.0__tar.gz → 1.15.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 (75) hide show
  1. {datacrunch-1.14.0 → datacrunch-1.15.0}/PKG-INFO +1 -1
  2. datacrunch-1.15.0/datacrunch/__version__.py +1 -0
  3. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/instances/instances.py +18 -9
  4. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch.egg-info/PKG-INFO +1 -1
  5. datacrunch-1.14.0/datacrunch/__version__.py +0 -1
  6. {datacrunch-1.14.0 → datacrunch-1.15.0}/LICENSE +0 -0
  7. {datacrunch-1.14.0 → datacrunch-1.15.0}/README.md +0 -0
  8. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/InferenceClient/__init__.py +0 -0
  9. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/InferenceClient/inference_client.py +0 -0
  10. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/__init__.py +0 -0
  11. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/authentication/__init__.py +0 -0
  12. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/authentication/authentication.py +0 -0
  13. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/balance/__init__.py +0 -0
  14. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/balance/balance.py +0 -0
  15. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/constants.py +0 -0
  16. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/containers/__init__.py +0 -0
  17. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/containers/containers.py +0 -0
  18. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/datacrunch.py +0 -0
  19. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/exceptions.py +0 -0
  20. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/helpers.py +0 -0
  21. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/http_client/__init__.py +0 -0
  22. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/http_client/http_client.py +0 -0
  23. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/images/__init__.py +0 -0
  24. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/images/images.py +0 -0
  25. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/instance_types/__init__.py +0 -0
  26. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/instance_types/instance_types.py +0 -0
  27. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/instances/__init__.py +0 -0
  28. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/locations/__init__.py +0 -0
  29. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/locations/locations.py +0 -0
  30. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/ssh_keys/__init__.py +0 -0
  31. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/ssh_keys/ssh_keys.py +0 -0
  32. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/startup_scripts/__init__.py +0 -0
  33. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/startup_scripts/startup_scripts.py +0 -0
  34. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/volume_types/__init__.py +0 -0
  35. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/volume_types/volume_types.py +0 -0
  36. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/volumes/__init__.py +0 -0
  37. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch/volumes/volumes.py +0 -0
  38. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch.egg-info/SOURCES.txt +0 -0
  39. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch.egg-info/dependency_links.txt +0 -0
  40. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch.egg-info/requires.txt +0 -0
  41. {datacrunch-1.14.0 → datacrunch-1.15.0}/datacrunch.egg-info/top_level.txt +0 -0
  42. {datacrunch-1.14.0 → datacrunch-1.15.0}/setup.cfg +0 -0
  43. {datacrunch-1.14.0 → datacrunch-1.15.0}/setup.py +0 -0
  44. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/__init__.py +0 -0
  45. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/integration_tests/__init__.py +0 -0
  46. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/integration_tests/conftest.py +0 -0
  47. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/integration_tests/test_instances.py +0 -0
  48. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/integration_tests/test_locations.py +0 -0
  49. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/integration_tests/test_volumes.py +0 -0
  50. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/__init__.py +0 -0
  51. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/authentication/__init__.py +0 -0
  52. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/authentication/test_authentication.py +0 -0
  53. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/balance/__init__.py +0 -0
  54. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/balance/test_balance.py +0 -0
  55. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/conftest.py +0 -0
  56. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/containers/__init__.py +0 -0
  57. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/containers/test_containers.py +0 -0
  58. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/http_client/__init__.py +0 -0
  59. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/http_client/test_http_client.py +0 -0
  60. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/images/__init__.py +0 -0
  61. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/images/test_images.py +0 -0
  62. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/instance_types/__init__.py +0 -0
  63. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/instance_types/test_instance_types.py +0 -0
  64. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/instances/__init__.py +0 -0
  65. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/instances/test_instances.py +0 -0
  66. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/ssh_keys/__init__.py +0 -0
  67. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/ssh_keys/test_ssh_keys.py +0 -0
  68. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/startup_scripts/__init__.py +0 -0
  69. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/startup_scripts/test_startup_scripts.py +0 -0
  70. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/test_datacrunch.py +0 -0
  71. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/test_exceptions.py +0 -0
  72. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/volume_types/__init__.py +0 -0
  73. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/volume_types/test_volume_types.py +0 -0
  74. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/volumes/__init__.py +0 -0
  75. {datacrunch-1.14.0 → datacrunch-1.15.0}/tests/unit_tests/volumes/test_volumes.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacrunch
3
- Version: 1.14.0
3
+ Version: 1.15.0
4
4
  Summary: Official Python SDK for DataCrunch Public API
5
5
  Home-page: https://github.com/DataCrunch-io
6
6
  Author: DataCrunch Oy
@@ -0,0 +1 @@
1
+ VERSION = '1.15.0'
@@ -1,4 +1,5 @@
1
1
  import time
2
+ import itertools
2
3
  from typing import List, Union, Optional, Dict, Literal
3
4
  from dataclasses import dataclass
4
5
  from dataclasses_json import dataclass_json
@@ -123,7 +124,12 @@ class InstancesService:
123
124
  is_spot: bool = False,
124
125
  contract: Optional[Contract] = None,
125
126
  pricing: Optional[Pricing] = None,
126
- coupon: Optional[str] = None) -> Instance:
127
+ coupon: Optional[str] = None,
128
+ *,
129
+ max_wait_time: float = 180,
130
+ initial_interval: float = 0.5,
131
+ max_interval: float = 5,
132
+ backoff_coefficient: float = 2.0) -> Instance:
127
133
  """Creates and deploys a new cloud instance.
128
134
 
129
135
  Args:
@@ -141,6 +147,10 @@ class InstancesService:
141
147
  contract: Optional contract type for the instance.
142
148
  pricing: Optional pricing model for the instance.
143
149
  coupon: Optional coupon code for discounts.
150
+ max_wait_time: Maximum total wait for the instance to start provisioning, in seconds (default: 180)
151
+ initial_interval: Initial interval, in seconds (default: 0.5)
152
+ max_interval: The longest single delay allowed between retries, in seconds (default: 5)
153
+ backoff_coefficient: Coefficient to calculate the next retry interval (default 2.0)
144
154
 
145
155
  Returns:
146
156
  The newly created instance object.
@@ -169,20 +179,19 @@ class InstancesService:
169
179
  id = self._http_client.post(INSTANCES_ENDPOINT, json=payload).text
170
180
 
171
181
  # Wait for instance to enter provisioning state with timeout
172
- MAX_WAIT_TIME = 60 # Maximum wait time in seconds
173
- POLL_INTERVAL = 0.5 # Time between status checks
174
-
175
- start_time = time.time()
176
- while True:
182
+ deadline = time.monotonic() + max_wait_time
183
+ for i in itertools.count():
177
184
  instance = self.get_by_id(id)
178
185
  if instance.status != InstanceStatus.ORDERED:
179
186
  return instance
180
187
 
181
- if time.time() - start_time > MAX_WAIT_TIME:
188
+ now = time.monotonic()
189
+ if now >= deadline:
182
190
  raise TimeoutError(
183
- f"Instance {id} did not enter provisioning state within {MAX_WAIT_TIME} seconds")
191
+ f"Instance {id} did not enter provisioning state within {max_wait_time:.1f} seconds")
184
192
 
185
- time.sleep(POLL_INTERVAL)
193
+ interval = min(initial_interval * backoff_coefficient ** i, max_interval, deadline - now)
194
+ time.sleep(interval)
186
195
 
187
196
  def action(self, id_list: Union[List[str], str], action: str, volume_ids: Optional[List[str]] = None) -> None:
188
197
  """Performs an action on one or more instances.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacrunch
3
- Version: 1.14.0
3
+ Version: 1.15.0
4
4
  Summary: Official Python SDK for DataCrunch Public API
5
5
  Home-page: https://github.com/DataCrunch-io
6
6
  Author: DataCrunch Oy
@@ -1 +0,0 @@
1
- VERSION = '1.14.0'
File without changes
File without changes
File without changes
File without changes