datacrunch 1.15.0__py3-none-any.whl → 1.17.1__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 (72) hide show
  1. datacrunch/__init__.py +53 -1
  2. datacrunch/datacrunch.py +44 -81
  3. datacrunch-1.17.1.dist-info/METADATA +30 -0
  4. datacrunch-1.17.1.dist-info/RECORD +5 -0
  5. datacrunch-1.17.1.dist-info/WHEEL +4 -0
  6. datacrunch/InferenceClient/__init__.py +0 -3
  7. datacrunch/InferenceClient/inference_client.py +0 -379
  8. datacrunch/__version__.py +0 -1
  9. datacrunch/authentication/__init__.py +0 -0
  10. datacrunch/authentication/authentication.py +0 -112
  11. datacrunch/balance/__init__.py +0 -0
  12. datacrunch/balance/balance.py +0 -52
  13. datacrunch/constants.py +0 -107
  14. datacrunch/containers/__init__.py +0 -33
  15. datacrunch/containers/containers.py +0 -1081
  16. datacrunch/exceptions.py +0 -29
  17. datacrunch/helpers.py +0 -13
  18. datacrunch/http_client/__init__.py +0 -0
  19. datacrunch/http_client/http_client.py +0 -241
  20. datacrunch/images/__init__.py +0 -0
  21. datacrunch/images/images.py +0 -87
  22. datacrunch/instance_types/__init__.py +0 -0
  23. datacrunch/instance_types/instance_types.py +0 -188
  24. datacrunch/instances/__init__.py +0 -0
  25. datacrunch/instances/instances.py +0 -247
  26. datacrunch/locations/__init__.py +0 -0
  27. datacrunch/locations/locations.py +0 -16
  28. datacrunch/ssh_keys/__init__.py +0 -0
  29. datacrunch/ssh_keys/ssh_keys.py +0 -112
  30. datacrunch/startup_scripts/__init__.py +0 -0
  31. datacrunch/startup_scripts/startup_scripts.py +0 -113
  32. datacrunch/volume_types/__init__.py +0 -0
  33. datacrunch/volume_types/volume_types.py +0 -66
  34. datacrunch/volumes/__init__.py +0 -0
  35. datacrunch/volumes/volumes.py +0 -398
  36. datacrunch-1.15.0.dist-info/METADATA +0 -208
  37. datacrunch-1.15.0.dist-info/RECORD +0 -69
  38. datacrunch-1.15.0.dist-info/WHEEL +0 -5
  39. datacrunch-1.15.0.dist-info/licenses/LICENSE +0 -21
  40. datacrunch-1.15.0.dist-info/top_level.txt +0 -2
  41. tests/__init__.py +0 -0
  42. tests/integration_tests/__init__.py +0 -0
  43. tests/integration_tests/conftest.py +0 -20
  44. tests/integration_tests/test_instances.py +0 -36
  45. tests/integration_tests/test_locations.py +0 -65
  46. tests/integration_tests/test_volumes.py +0 -94
  47. tests/unit_tests/__init__.py +0 -0
  48. tests/unit_tests/authentication/__init__.py +0 -0
  49. tests/unit_tests/authentication/test_authentication.py +0 -202
  50. tests/unit_tests/balance/__init__.py +0 -0
  51. tests/unit_tests/balance/test_balance.py +0 -25
  52. tests/unit_tests/conftest.py +0 -21
  53. tests/unit_tests/containers/__init__.py +0 -1
  54. tests/unit_tests/containers/test_containers.py +0 -959
  55. tests/unit_tests/http_client/__init__.py +0 -0
  56. tests/unit_tests/http_client/test_http_client.py +0 -193
  57. tests/unit_tests/images/__init__.py +0 -0
  58. tests/unit_tests/images/test_images.py +0 -41
  59. tests/unit_tests/instance_types/__init__.py +0 -0
  60. tests/unit_tests/instance_types/test_instance_types.py +0 -87
  61. tests/unit_tests/instances/__init__.py +0 -0
  62. tests/unit_tests/instances/test_instances.py +0 -483
  63. tests/unit_tests/ssh_keys/__init__.py +0 -0
  64. tests/unit_tests/ssh_keys/test_ssh_keys.py +0 -198
  65. tests/unit_tests/startup_scripts/__init__.py +0 -0
  66. tests/unit_tests/startup_scripts/test_startup_scripts.py +0 -196
  67. tests/unit_tests/test_datacrunch.py +0 -65
  68. tests/unit_tests/test_exceptions.py +0 -33
  69. tests/unit_tests/volume_types/__init__.py +0 -0
  70. tests/unit_tests/volume_types/test_volume_types.py +0 -50
  71. tests/unit_tests/volumes/__init__.py +0 -0
  72. tests/unit_tests/volumes/test_volumes.py +0 -641
@@ -1,398 +0,0 @@
1
- from typing import List, Union, Optional
2
- from datacrunch.constants import VolumeActions, Locations
3
- from datacrunch.helpers import stringify_class_object_properties
4
-
5
- VOLUMES_ENDPOINT = '/volumes'
6
-
7
-
8
- class Volume:
9
- """A volume model class"""
10
-
11
- def __init__(self,
12
- id: str,
13
- status: str,
14
- name: str,
15
- size: int,
16
- type: str,
17
- is_os_volume: bool,
18
- created_at: str,
19
- target: str = None,
20
- location: str = Locations.FIN_01,
21
- instance_id: str = None,
22
- ssh_key_ids: List[str] = [],
23
- deleted_at: str = None,
24
- ) -> None:
25
- """Initialize the volume object
26
-
27
- :param id: volume id
28
- :type id: str
29
- :param status: volume status
30
- :type status: str
31
- :param name: volume name
32
- :type name: str
33
- :param size: volume size in GB
34
- :type size: int
35
- :param type: volume type
36
- :type type: str
37
- :param is_os_volume: indication whether this is an operating systen volume
38
- :type is_os_volume: bool
39
- :param created_at: the time the volume was created (UTC)
40
- :type created_at: str
41
- :param target: target device e.g. vda
42
- :type target: str, optional
43
- :param location: datacenter location, defaults to "FIN-01"
44
- :type location: str, optional
45
- :param instance_id: the instance id the volume is attached to, None if detached
46
- :type instance_id: str
47
- :param ssh_key_ids: list of ssh keys ids
48
- :type ssh_key_ids: List[str]
49
- :param deleted_at: the time the volume was deleted (UTC), defaults to None
50
- :type deleted_at: str, optional
51
- """
52
- self._id = id
53
- self._status = status
54
- self._name = name
55
- self._size = size
56
- self._type = type
57
- self._is_os_volume = is_os_volume
58
- self._created_at = created_at
59
- self._target = target
60
- self._location = location
61
- self._instance_id = instance_id
62
- self._ssh_key_ids = ssh_key_ids
63
- self._deleted_at = deleted_at
64
-
65
- @property
66
- def id(self) -> str:
67
- """Get the volume id
68
-
69
- :return: volume id
70
- :rtype: str
71
- """
72
- return self._id
73
-
74
- @property
75
- def status(self) -> str:
76
- """Get the volume status
77
-
78
- :return: volume status
79
- :rtype: str
80
- """
81
- return self._status
82
-
83
- @property
84
- def name(self) -> str:
85
- """Get the volume name
86
-
87
- :return: volume name
88
- :rtype: str
89
- """
90
- return self._name
91
-
92
- @property
93
- def size(self) -> int:
94
- """Get the volume size
95
-
96
- :return: volume size
97
- :rtype: int
98
- """
99
- return self._size
100
-
101
- @property
102
- def type(self) -> int:
103
- """Get the volume type
104
-
105
- :return: volume type
106
- :rtype: string
107
- """
108
- return self._type
109
-
110
- @property
111
- def is_os_volume(self) -> bool:
112
- """Return true iff the volume contains an operating system
113
-
114
- :return: true iff the volume contains an OS
115
- :rtype: bool
116
- """
117
- return self._is_os_volume
118
-
119
- @property
120
- def created_at(self) -> str:
121
- """Get the time when the volume was created (UTC)
122
-
123
- :return: time
124
- :rtype: str
125
- """
126
- return self._created_at
127
-
128
- @property
129
- def target(self) -> Optional[str]:
130
- """Get the target device
131
-
132
- :return: target device
133
- :rtype: str, optional
134
- """
135
- return self._target
136
-
137
- @property
138
- def location(self) -> str:
139
- """Get the volume datacenter location
140
-
141
- :return: datacenter location
142
- :rtype: str
143
- """
144
- return self._location
145
-
146
- @property
147
- def instance_id(self) -> Optional[str]:
148
- """Get the instance id the volume is attached to, if attached. Otherwise None
149
-
150
- :return: instance id if attached, None otherwise
151
- :rtype: str, optional
152
- """
153
- return self._instance_id
154
-
155
- @property
156
- def ssh_key_ids(self) -> List[str]:
157
- """Get the SSH key IDs of the instance
158
-
159
- :return: SSH key IDs
160
- :rtype: List[str]
161
- """
162
- return self._ssh_key_ids
163
-
164
- @property
165
- def deleted_at(self) -> Optional[str]:
166
- """Get the time when the volume was deleted (UTC)
167
-
168
- :return: time
169
- :rtype: str
170
- """
171
- return self._deleted_at
172
-
173
- @classmethod
174
- def create_from_dict(cls: 'Volume', volume_dict: dict) -> 'Volume':
175
- """Create a Volume object from a dictionary
176
-
177
- :param volume_dict: dictionary representing the volume
178
- :type volume_dict: dict
179
- :return: Volume
180
- :rtype: Volume
181
- """
182
-
183
- return cls(
184
- id = volume_dict['id'],
185
- status = volume_dict['status'],
186
- name = volume_dict['name'],
187
- size = volume_dict['size'],
188
- type = volume_dict['type'],
189
- is_os_volume = volume_dict['is_os_volume'],
190
- created_at = volume_dict['created_at'],
191
- target = volume_dict['target'],
192
- location = volume_dict['location'],
193
- instance_id = volume_dict['instance_id'],
194
- ssh_key_ids = volume_dict['ssh_key_ids'],
195
- deleted_at = volume_dict.get('deleted_at'),
196
- )
197
-
198
- def __str__(self) -> str:
199
- """Returns a string of the json representation of the volume
200
-
201
- :return: json representation of the volume
202
- :rtype: str
203
- """
204
- return stringify_class_object_properties(self)
205
-
206
-
207
- class VolumesService:
208
- """A service for interacting with the volumes endpoint"""
209
-
210
- def __init__(self, http_client) -> None:
211
- self._http_client = http_client
212
-
213
- def get(self, status: str = None) -> List[Volume]:
214
- """Get all of the client's non-deleted volumes, or volumes with specific status.
215
-
216
- :param status: optional, status of the volumes, defaults to None
217
- :type status: str, optional
218
- :return: list of volume details objects
219
- :rtype: List[Volume]
220
- """
221
- volumes_dict = self._http_client.get(
222
- VOLUMES_ENDPOINT, params={'status': status}).json()
223
- return list(map(Volume.create_from_dict, volumes_dict))
224
-
225
- def get_by_id(self, id: str) -> Volume:
226
- """Get a specific volume by its
227
-
228
- :param id: volume id
229
- :type id: str
230
- :return: Volume details object
231
- :rtype: Volume
232
- """
233
- volume_dict = self._http_client.get(
234
- VOLUMES_ENDPOINT + f'/{id}').json()
235
-
236
- return Volume.create_from_dict(volume_dict)
237
-
238
- def get_in_trash(self) -> List[Volume]:
239
- """Get all volumes that are in trash
240
-
241
- :return: list of volume details objects
242
- :rtype: List[Volume]
243
- """
244
- volumes_dicts = self._http_client.get(
245
- VOLUMES_ENDPOINT + '/trash'
246
- ).json()
247
-
248
- return list(map(Volume.create_from_dict, volumes_dicts))
249
-
250
- def create(self,
251
- type: str,
252
- name: str,
253
- size: int,
254
- instance_id: str = None,
255
- location: str = Locations.FIN_01,
256
- ) -> Volume:
257
- """Create new volume
258
-
259
- :param type: volume type
260
- :type type: str
261
- :param name: volume name
262
- :type name: str
263
- :param size: volume size, in GB
264
- :type size: int
265
- :param instance_id: Instance id to be attached to, defaults to None
266
- :type instance_id: str, optional
267
- :param location: datacenter location, defaults to "FIN-01"
268
- :type location: str, optional
269
- :return: the new volume object
270
- :rtype: Volume
271
- """
272
- payload = {
273
- "type": type,
274
- "name": name,
275
- "size": size,
276
- "instance_id": instance_id,
277
- "location_code": location
278
- }
279
- id = self._http_client.post(VOLUMES_ENDPOINT, json=payload).text
280
- volume = self.get_by_id(id)
281
- return volume
282
-
283
- def attach(self, id_list: Union[List[str], str], instance_id: str) -> None:
284
- """Attach multiple volumes or single volume to an instance
285
- Note: the instance needs to be shut-down (offline)
286
-
287
- :param id_list: list of volume ids, or a volume id
288
- :type id_list: Union[List[str], str]
289
- :param instance_id: instance id the volume(s) will be attached to
290
- :type instance_id: str
291
- """
292
- payload = {
293
- "id": id_list,
294
- "action": VolumeActions.ATTACH,
295
- "instance_id": instance_id
296
- }
297
-
298
- self._http_client.put(VOLUMES_ENDPOINT, json=payload)
299
- return
300
-
301
- def detach(self, id_list: Union[List[str], str]) -> None:
302
- """Detach multiple volumes or single volume from an instance(s)
303
- Note: the instances need to be shut-down (offline)
304
-
305
- :param id_list: list of volume ids, or a volume id
306
- :type id_list: Union[List[str], str]
307
- """
308
- payload = {
309
- "id": id_list,
310
- "action": VolumeActions.DETACH,
311
- }
312
-
313
- self._http_client.put(VOLUMES_ENDPOINT, json=payload)
314
- return
315
-
316
- def clone(self, id: str, name: str = None, type: str = None) -> Volume:
317
- """Clone a volume or multiple volumes
318
-
319
- :param id: volume id or list of volume ids
320
- :type id: str or List[str]
321
- :param name: new volume name
322
- :type name: str
323
- :param type: volume type
324
- :type type: str, optional
325
- :return: the new volume object, or a list of volume objects if cloned mutliple volumes
326
- :rtype: Volume or List[Volume]
327
- """
328
- payload = {
329
- "id": id,
330
- "action": VolumeActions.CLONE,
331
- "name": name,
332
- "type": type
333
- }
334
-
335
- # clone volume(s)
336
- volume_ids_array = self._http_client.put(
337
- VOLUMES_ENDPOINT, json=payload).json()
338
-
339
- # map the IDs into Volume objects
340
- volumes_array = list(
341
- map(lambda volume_id: self.get_by_id(volume_id), volume_ids_array))
342
-
343
- # if the array has only one element, return that element
344
- if len(volumes_array) == 1:
345
- return volumes_array[0]
346
-
347
- # otherwise return the volumes array
348
- return volumes_array
349
-
350
- def rename(self, id_list: Union[List[str], str], name: str) -> None:
351
- """Rename multiple volumes or single volume
352
-
353
- :param id_list: list of volume ids, or a volume id
354
- :type id_list: Union[List[str], str]
355
- :param name: new name
356
- :type name: str
357
- """
358
- payload = {
359
- "id": id_list,
360
- "action": VolumeActions.RENAME,
361
- "name": name
362
- }
363
-
364
- self._http_client.put(VOLUMES_ENDPOINT, json=payload)
365
- return
366
-
367
- def increase_size(self, id_list: Union[List[str], str], size: int) -> None:
368
- """Increase size of multiple volumes or single volume
369
-
370
- :param id_list: list of volume ids, or a volume id
371
- :type id_list: Union[List[str], str]
372
- :param size: new size in GB
373
- :type size: int
374
- """
375
- payload = {
376
- "id": id_list,
377
- "action": VolumeActions.INCREASE_SIZE,
378
- "size": size,
379
- }
380
-
381
- self._http_client.put(VOLUMES_ENDPOINT, json=payload)
382
- return
383
-
384
- def delete(self, id_list: Union[List[str], str], is_permanent: bool = False) -> None:
385
- """Delete multiple volumes or single volume
386
- Note: if attached to any instances, they need to be shut-down (offline)
387
-
388
- :param id_list: list of volume ids, or a volume id
389
- :type id_list: Union[List[str], str]
390
- """
391
- payload = {
392
- "id": id_list,
393
- "action": VolumeActions.DELETE,
394
- "is_permanent": is_permanent
395
- }
396
-
397
- self._http_client.put(VOLUMES_ENDPOINT, json=payload)
398
- return
@@ -1,208 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: datacrunch
3
- Version: 1.15.0
4
- Summary: Official Python SDK for DataCrunch Public API
5
- Home-page: https://github.com/DataCrunch-io
6
- Author: DataCrunch Oy
7
- Author-email: info@datacrunch.io
8
- Classifier: Programming Language :: Python :: 3
9
- Classifier: Programming Language :: Python :: 3.10
10
- Classifier: Programming Language :: Python :: 3.11
11
- Classifier: Programming Language :: Python :: 3.12
12
- Classifier: Programming Language :: Python :: 3.13
13
- Classifier: Development Status :: 5 - Production/Stable
14
- Classifier: Intended Audience :: Developers
15
- Classifier: License :: OSI Approved :: MIT License
16
- Classifier: Operating System :: OS Independent
17
- Classifier: Natural Language :: English
18
- Requires-Python: >=3.10
19
- Description-Content-Type: text/markdown
20
- License-File: LICENSE
21
- Requires-Dist: requests<3,>=2.25.1
22
- Requires-Dist: dataclasses_json>=0.6.7
23
- Provides-Extra: dev
24
- Provides-Extra: test
25
- Requires-Dist: pytest<7,>=6.2.1; extra == "test"
26
- Requires-Dist: pytest-cov<3,>=2.10.1; extra == "test"
27
- Requires-Dist: pytest-responses<1,>=0.4.0; extra == "test"
28
- Requires-Dist: responses<1,>=0.12.1; extra == "test"
29
- Dynamic: author
30
- Dynamic: author-email
31
- Dynamic: classifier
32
- Dynamic: description
33
- Dynamic: description-content-type
34
- Dynamic: home-page
35
- Dynamic: license-file
36
- Dynamic: provides-extra
37
- Dynamic: requires-dist
38
- Dynamic: requires-python
39
- Dynamic: summary
40
-
41
- # DataCrunch Python SDK
42
-
43
- [<img src='https://github.com/DataCrunch-io/datacrunch-python/workflows/Unit%20Tests/badge.svg'>](https://github.com/DataCrunch-io/datacrunch-python/actions?query=workflow%3A%22Unit+Tests%22+branch%3Amaster)
44
- [<img src='https://github.com/DataCrunch-io/datacrunch-python/workflows/Code%20Style/badge.svg'>](https://github.com/DataCrunch-io/datacrunch-python/actions?query=workflow%3A%22Code+Style%22+branch%3Amaster)
45
- [<img src="https://codecov.io/gh/DataCrunch-io/datacrunch-python/branch/master/graph/badge.svg?token=5X5KTYSSPK">](https://codecov.io/gh/DataCrunch-io/datacrunch-python)
46
- [<img src='https://readthedocs.org/projects/datacrunch-python/badge/?version=latest'>](https://datacrunch-python.readthedocs.io/en/latest/)
47
- [<img src='https://img.shields.io/github/license/DataCrunch-io/datacrunch-python'>](https://github.com/DataCrunch-io/datacrunch-python/blob/master/LICENSE)
48
- [<img src='https://img.shields.io/pypi/v/datacrunch?logo=python'>](https://pypi.org/project/datacrunch/)
49
- [<img src='https://img.shields.io/pypi/pyversions/datacrunch'>](https://pypi.org/project/datacrunch/)
50
-
51
- The official [DataCrunch.io](https://datacrunch.io) Python SDK.
52
-
53
- The SDK's documentation is available on [ReadTheDocs](https://datacrunch-python.readthedocs.io/en/latest/)
54
-
55
- DataCrunch's Public API documentation [is available here](https://api.datacrunch.io/v1/docs).
56
-
57
- ## Getting Started - Using the SDK:
58
-
59
- - Install via pip:
60
-
61
- ```bash
62
- pip3 install datacrunch
63
- ```
64
-
65
- - Generate your client credentials - [instructions in the public API docs](https://api.datacrunch.io/v1/docs#description/quick-start-guide).
66
-
67
-
68
- - Add your client id and client secret to an environment variable (don't want it to be hardcoded):
69
-
70
- Linux (bash):
71
-
72
- ```bash
73
- export DATACRUNCH_CLIENT_ID=YOUR_ID_HERE
74
- export DATACRUNCH_CLIENT_SECRET=YOUR_SECRET_HERE
75
- ```
76
-
77
- - To enable sending inference requests from SDK you must generate an inference key - [Instructions on inference authorization](https://docs.datacrunch.io/inference/authorization)
78
-
79
-
80
- - Add your inference key to an environment variable
81
-
82
- Linux (bash):
83
-
84
- ```bash
85
- export DATACRUNCH_INFERENCE_KEY=YOUR_API_KEY_HERE
86
- ```
87
-
88
- Other platforms:
89
- https://en.wikipedia.org/wiki/Environment_variable
90
-
91
-
92
-
93
- - Example for creating a new instance:
94
-
95
- ```python
96
- import os
97
- from datacrunch import DataCrunchClient
98
-
99
- # Get credentials from environment variables
100
- CLIENT_ID = os.environ.get('DATACRUNCH_CLIENT_ID')
101
- CLIENT_SECRET = os.environ['DATACRUNCH_CLIENT_SECRET']
102
-
103
- # Create datcrunch client
104
- datacrunch = DataCrunchClient(CLIENT_ID, CLIENT_SECRET)
105
-
106
- # Get all SSH keys
107
- ssh_keys = datacrunch.ssh_keys.get()
108
- ssh_keys = list(map(lambda key: key.id, ssh_keys))
109
-
110
- # Create a new instance
111
- instance = datacrunch.instances.create(instance_type='1V100.6V',
112
- image='ubuntu-24.04-cuda-12.8-open-docker',
113
- ssh_key_ids=ssh_keys,
114
- hostname='example',
115
- description='example instance')
116
-
117
- # Delete instance
118
- datacrunch.instances.action(instance.id, datacrunch.constants.instance_actions.DELETE)
119
- ```
120
-
121
- More examples can be found in the `/examples` folder or in the [documentation](https://datacrunch-python.readthedocs.io/en/latest/).
122
-
123
- ## Development
124
-
125
- ### Setting up the local development environment
126
-
127
- - Clone the repository:
128
-
129
- ```bash
130
- git clone
131
- ```
132
-
133
- - Create local virtual environment:
134
-
135
- ```bash
136
- python3 -m venv datacrunch_env && source ./datacrunch_env/bin/activate
137
- ```
138
-
139
- or if using [fish shell](https://fishshell.com/):
140
-
141
- ```fish
142
- python3 -m venv datacrunch_env && source ./datacrunch_env/bin/activate.fish
143
- ```
144
-
145
- - Install Dependencies:
146
-
147
- ```bash
148
- pip3 install -e .[test]
149
- pip3 install -U pytest
150
- ```
151
-
152
- ### Running Tests
153
-
154
- We use pytest for testing.
155
-
156
- - To execute all tests
157
-
158
- ```bash
159
- pytest
160
- ```
161
-
162
- - To execute a single test file
163
-
164
- ```bash
165
- pytest ./tests/unit_tests/test_file.py
166
- ```
167
-
168
- ### Local Manual Testing
169
-
170
- Create this file in the root directory of the project:
171
-
172
- ```python
173
- from datacrunch.datacrunch import DataCrunchClient
174
-
175
- CLIENT_SECRET = 'secret'
176
- CLIENT_ID = 'your-id'
177
-
178
- # Create datcrunch client
179
- datacrunch = DataCrunchClient(CLIENT_ID, CLIENT_SECRET, base_url='http://localhost:3001/v1')
180
- ```
181
-
182
- ### Generating the documentation
183
-
184
- If added a new service, create a documentation template under api/services for that service.
185
-
186
- ```bash
187
- cd docs
188
- make html
189
- ```
190
-
191
- ### Style Guide
192
-
193
- Use autopep8 for auto code formatting:
194
-
195
- ```bash
196
- # Install
197
- pip3 install autopep8
198
-
199
- # Apply to an entire directory
200
- autopep8 directory_name --recursive --in-place --pep8-passes 2000 --verbose
201
-
202
- # Or a single file
203
- autopep8 file.py --in-place
204
- ```
205
-
206
- ## Contact
207
-
208
- You can [contact us here](https://datacrunch.io/contact), or open an issue in the repo.
@@ -1,69 +0,0 @@
1
- datacrunch/__init__.py,sha256=OG-5Avmuq3NXyBs_66GMwyzscUi0c-T6vWW5sRIfnZg,51
2
- datacrunch/__version__.py,sha256=v0NuAYy8C6njG7SDCjPG68hLvRFV00bt7g3lqwOYITU,19
3
- datacrunch/constants.py,sha256=i0jCX91H2lKp1Uvk4GDsaTeXk0WmjyeSGpMfPs69BB4,2378
4
- datacrunch/datacrunch.py,sha256=2IqrTY39sLuwtuQ_QP3jCI1d5AaCwriYgAUEFoZZzPU,3488
5
- datacrunch/exceptions.py,sha256=uOP_YU2HEUi_mcMxQ9WYrIjqWUuUrwdube-RdL1C4Ps,781
6
- datacrunch/helpers.py,sha256=Eq5htNxpJUCJG9D6QxbnWwch3ppmi2lfi-rFCGXf3fs,634
7
- datacrunch/InferenceClient/__init__.py,sha256=oe7RQfoKbKJnIFWOt6TNtdzjXk5Gcl4-smO5DjLE6M0,117
8
- datacrunch/InferenceClient/inference_client.py,sha256=LTn4JD8lYMuQGJLtmmx-fJtRHK1F7WG2uU1tbzeD-Dc,15593
9
- datacrunch/authentication/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- datacrunch/authentication/authentication.py,sha256=CThTxA99jseh7TKIdUR1M9RErIJoXvTB8CbF1VGFPCE,3589
11
- datacrunch/balance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- datacrunch/balance/balance.py,sha256=rkqqXC3MLVxk6ym9Hlp9tsLbLWJculIn8q3BYbsme28,1240
13
- datacrunch/containers/__init__.py,sha256=qNxgk3tS9Dx251ugXjmsDWeab2MO7EAFLd6aRo1XpmQ,744
14
- datacrunch/containers/containers.py,sha256=BSjPQ-VGvc7z9CYwCKkjVuM5ZV4oVgfOUyTe56BvXMY,35604
15
- datacrunch/http_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- datacrunch/http_client/http_client.py,sha256=tmpVd3p7-NAIaTM4E13inFZWUetdVEFZnRE38p5eVk0,8285
17
- datacrunch/images/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- datacrunch/images/images.py,sha256=hCAtSzozHcAAJ_UZOvnAbQSEU7BfCuixpIsmcd2RM2k,2167
19
- datacrunch/instance_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- datacrunch/instance_types/instance_types.py,sha256=NLkUI6UdfXg-zDkMu9j9RzVISLG8jdABhT_R7XpfBdA,5289
21
- datacrunch/instances/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- datacrunch/instances/instances.py,sha256=fHHQdJcdudE3-Nee3NWAeCjN2c43mlgtfpJ-1Lfm6x4,9862
23
- datacrunch/locations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- datacrunch/locations/locations.py,sha256=2f1OF2ObNaqGam_Mm0Btie1GymnAI9UzXulhqSSm7zo,404
25
- datacrunch/ssh_keys/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- datacrunch/ssh_keys/ssh_keys.py,sha256=n8ek3-DigzU-dVnpI2sBjOUQRZhihLMyT7GJWT2J3U4,2907
27
- datacrunch/startup_scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- datacrunch/startup_scripts/startup_scripts.py,sha256=EnWiuT48uN_soVHpbnDMUQ9kab2V_gJSSp0hpV_UBg4,3172
29
- datacrunch/volume_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- datacrunch/volume_types/volume_types.py,sha256=CNJ8kfd_nxmF99x-UAJeku-uN4Gdh-yg15Aa8WGLgWU,1828
31
- datacrunch/volumes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- datacrunch/volumes/volumes.py,sha256=aAH4UIVG-7NehjHu-a_4MGSdZ1jmeApV-kKh-X6TB-s,11908
33
- datacrunch-1.15.0.dist-info/licenses/LICENSE,sha256=LkdhbR2MArjDfV8M0dySL5mG_kfzxF2ntMgbJvWGyUQ,1069
34
- tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- tests/integration_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- tests/integration_tests/conftest.py,sha256=PWf6K1G3NoddebmDIy_Pk02dHQrEKfrNxpWwqE8Eqrk,546
37
- tests/integration_tests/test_instances.py,sha256=p9Cc9jp-2wFbSP8iZWCE1I51oKQRUJWdKGpD3Squkpw,1249
38
- tests/integration_tests/test_locations.py,sha256=i4h7OiZG5LHfPRHCO4bOlAZ86Yx64GvYqp-SRZUP77g,2791
39
- tests/integration_tests/test_volumes.py,sha256=ty5m_nuVyyJ37fvhGgFB6jZDiif9jjW45Yd_eUa7Jps,3194
40
- tests/unit_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- tests/unit_tests/conftest.py,sha256=zXoleTvOtU1pUWCbKowisRgItywjUEcdiCgljVvczeo,592
42
- tests/unit_tests/test_datacrunch.py,sha256=IWbBncV-XNQAWH7ui2bxOg-7CtThmwJlsmRxq3_JzSs,2090
43
- tests/unit_tests/test_exceptions.py,sha256=yTCb5TIY8k1MlpbyKtIctq0YhvV7mlvybKTCdK2sLtg,891
44
- tests/unit_tests/authentication/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- tests/unit_tests/authentication/test_authentication.py,sha256=P84VnD9utk8y3ZPhUfO8TT42t_xSiTlyUy4ecAWX5yA,7490
46
- tests/unit_tests/balance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
- tests/unit_tests/balance/test_balance.py,sha256=Cojbjd7wc9-8eRQb_fR0xLXEX7fGqobdQICH3O7WAx4,651
48
- tests/unit_tests/containers/__init__.py,sha256=Nqnn8clbgv-5l0PgxcTOldg8mkMKrFn4TvPL-rYUUGg,1
49
- tests/unit_tests/containers/test_containers.py,sha256=lr7Thrpl5hC6iBG91YjBUEpkv6t6CVnXjIzkXmvXg0U,31011
50
- tests/unit_tests/http_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
- tests/unit_tests/http_client/test_http_client.py,sha256=JfEy7pADx0gS9KNNwVLVeG-bG4DRRXxze4dQkP_WIvw,6776
52
- tests/unit_tests/images/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
- tests/unit_tests/images/test_images.py,sha256=Tbsu5U1bUoD66ATibUWmipDmHYvhScI2XRzKtt-I-qg,1204
54
- tests/unit_tests/instance_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- tests/unit_tests/instance_types/test_instance_types.py,sha256=DHpzSDG91Y8BOT5OVq5sKoO-akKRBK-X04c6_35HtGQ,3310
56
- tests/unit_tests/instances/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- tests/unit_tests/instances/test_instances.py,sha256=Gc4Krp0CbqbjA6dIMv5ekw1e4tSlzWF9wZOLZgFp2jU,16920
58
- tests/unit_tests/ssh_keys/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
- tests/unit_tests/ssh_keys/test_ssh_keys.py,sha256=PsFSfgIhD2Jfg4w3BPu7LH7g40EnyDUIuE-xxOq7YlI,5741
60
- tests/unit_tests/startup_scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
- tests/unit_tests/startup_scripts/test_startup_scripts.py,sha256=D6L0q2NyY1C1kqsBGcXtRL5lUmrlcI3io51N-XgBpXU,6039
62
- tests/unit_tests/volume_types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- tests/unit_tests/volume_types/test_volume_types.py,sha256=vGuC3dWjhQLD8bTYgw_we3dZ6vlUKRmKZbb9yCfhe0w,1386
64
- tests/unit_tests/volumes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
- tests/unit_tests/volumes/test_volumes.py,sha256=p53eSIHddWKL7U9oLLTnxo849LrJSoi6A5lpWF6ydHs,20672
66
- datacrunch-1.15.0.dist-info/METADATA,sha256=NYPMZAHvH2JmTs7fY37EXJM8hIamIT9rlZ_UgEljito,6212
67
- datacrunch-1.15.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
68
- datacrunch-1.15.0.dist-info/top_level.txt,sha256=FvH4EZJkbUxNm-aKx0RjmWwnduAMpfRT13Fo123i7yE,17
69
- datacrunch-1.15.0.dist-info/RECORD,,
@@ -1,5 +0,0 @@
1
- Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
3
- Root-Is-Purelib: true
4
- Tag: py3-none-any
5
-