stackit-serverbackup 1.1.1__py3-none-any.whl → 1.2.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 (28) hide show
  1. stackit/serverbackup/api_client.py +36 -25
  2. stackit/serverbackup/exceptions.py +1 -1
  3. stackit/serverbackup/models/__init__.py +0 -1
  4. stackit/serverbackup/models/backup.py +7 -6
  5. stackit/serverbackup/models/backup_job.py +4 -3
  6. stackit/serverbackup/models/backup_policy.py +8 -4
  7. stackit/serverbackup/models/backup_policy_backup_properties.py +4 -3
  8. stackit/serverbackup/models/backup_properties.py +4 -3
  9. stackit/serverbackup/models/backup_schedule.py +7 -4
  10. stackit/serverbackup/models/backup_volume_backups_inner.py +4 -3
  11. stackit/serverbackup/models/create_backup_payload.py +4 -3
  12. stackit/serverbackup/models/create_backup_schedule_payload.py +7 -4
  13. stackit/serverbackup/models/enable_service_resource_payload.py +7 -5
  14. stackit/serverbackup/models/error_response.py +4 -3
  15. stackit/serverbackup/models/get_backup_policies_response.py +7 -6
  16. stackit/serverbackup/models/get_backup_schedules_response.py +7 -6
  17. stackit/serverbackup/models/get_backup_service_response.py +4 -3
  18. stackit/serverbackup/models/get_backups_list_response.py +7 -6
  19. stackit/serverbackup/models/restore_backup_payload.py +4 -3
  20. stackit/serverbackup/models/restore_volume_backup_payload.py +4 -3
  21. stackit/serverbackup/models/update_backup_schedule_payload.py +7 -4
  22. stackit/serverbackup/rest.py +19 -3
  23. {stackit_serverbackup-1.1.1.dist-info → stackit_serverbackup-1.2.0.dist-info}/METADATA +10 -11
  24. stackit_serverbackup-1.2.0.dist-info/RECORD +33 -0
  25. {stackit_serverbackup-1.1.1.dist-info → stackit_serverbackup-1.2.0.dist-info}/WHEEL +1 -1
  26. stackit_serverbackup-1.1.1.dist-info/RECORD +0 -33
  27. {stackit_serverbackup-1.1.1.dist-info → stackit_serverbackup-1.2.0.dist-info}/licenses/LICENSE.md +0 -0
  28. {stackit_serverbackup-1.1.1.dist-info → stackit_serverbackup-1.2.0.dist-info}/licenses/NOTICE.txt +0 -0
@@ -13,11 +13,13 @@
13
13
  """ # noqa: E501
14
14
 
15
15
  import datetime
16
+ import decimal
16
17
  import json
17
18
  import mimetypes
18
19
  import os
19
20
  import re
20
21
  import tempfile
22
+ import uuid
21
23
  from enum import Enum
22
24
  from typing import Dict, List, Optional, Tuple, Union
23
25
  from urllib.parse import quote
@@ -64,8 +66,11 @@ class ApiClient:
64
66
  "bool": bool,
65
67
  "date": datetime.date,
66
68
  "datetime": datetime.datetime,
69
+ "decimal": decimal.Decimal,
70
+ "UUID": uuid.UUID,
67
71
  "object": object,
68
72
  }
73
+ _pool = None
69
74
 
70
75
  def __init__(self, configuration, header_name=None, header_value=None, cookie=None) -> None:
71
76
  self.config: Configuration = configuration
@@ -262,13 +267,13 @@ class ApiClient:
262
267
  response_text = None
263
268
  return_data = None
264
269
  try:
265
- if response_type == "bytearray":
270
+ if response_type in ("bytearray", "bytes"):
266
271
  return_data = response_data.data
267
272
  elif response_type == "file":
268
273
  return_data = self.__deserialize_file(response_data)
269
274
  elif response_type is not None:
270
275
  match = None
271
- content_type = response_data.getheader("content-type")
276
+ content_type = response_data.headers.get("content-type")
272
277
  if content_type is not None:
273
278
  match = re.search(r"charset=([a-zA-Z\-\d]+)[\s;]?", content_type)
274
279
  encoding = match.group(1) if match else "utf-8"
@@ -285,7 +290,7 @@ class ApiClient:
285
290
  return ApiResponse(
286
291
  status_code=response_data.status,
287
292
  data=return_data,
288
- headers=response_data.getheaders(),
293
+ headers=response_data.headers,
289
294
  raw_data=response_data.data,
290
295
  )
291
296
 
@@ -297,6 +302,7 @@ class ApiClient:
297
302
  If obj is str, int, long, float, bool, return directly.
298
303
  If obj is datetime.datetime, datetime.date
299
304
  convert to string in iso8601 format.
305
+ If obj is decimal.Decimal return string representation.
300
306
  If obj is list, sanitize each element in the list.
301
307
  If obj is dict, return the dict.
302
308
  If obj is OpenAPI model, return the properties dict.
@@ -312,31 +318,30 @@ class ApiClient:
312
318
  return obj.get_secret_value()
313
319
  elif isinstance(obj, self.PRIMITIVE_TYPES):
314
320
  return obj
321
+ elif isinstance(obj, uuid.UUID):
322
+ return str(obj)
315
323
  elif isinstance(obj, list):
316
324
  return [self.sanitize_for_serialization(sub_obj) for sub_obj in obj]
317
325
  elif isinstance(obj, tuple):
318
326
  return tuple(self.sanitize_for_serialization(sub_obj) for sub_obj in obj)
319
327
  elif isinstance(obj, (datetime.datetime, datetime.date)):
320
328
  return obj.isoformat()
321
-
329
+ elif isinstance(obj, decimal.Decimal):
330
+ return str(obj)
322
331
  elif isinstance(obj, dict):
323
- obj_dict = obj
332
+ return {key: self.sanitize_for_serialization(val) for key, val in obj.items()}
333
+
334
+ # Convert model obj to dict except
335
+ # attributes `openapi_types`, `attribute_map`
336
+ # and attributes which value is not None.
337
+ # Convert attribute name to json key in
338
+ # model definition for request.
339
+ if hasattr(obj, "to_dict") and callable(getattr(obj, "to_dict")): # noqa: B009
340
+ obj_dict = obj.to_dict()
324
341
  else:
325
- # Convert model obj to dict except
326
- # attributes `openapi_types`, `attribute_map`
327
- # and attributes which value is not None.
328
- # Convert attribute name to json key in
329
- # model definition for request.
330
- if hasattr(obj, "to_dict") and callable(obj.to_dict):
331
- obj_dict = obj.to_dict()
332
- else:
333
- obj_dict = obj.__dict__
334
-
335
- if isinstance(obj_dict, list):
336
- # here we handle instances that can either be a list or something else, and only became a real list by calling to_dict() # noqa: E501
337
- return self.sanitize_for_serialization(obj_dict)
342
+ obj_dict = obj.__dict__
338
343
 
339
- return {key: self.sanitize_for_serialization(val) for key, val in obj_dict.items()}
344
+ return self.sanitize_for_serialization(obj_dict)
340
345
 
341
346
  def deserialize(self, response_text: str, response_type: str, content_type: Optional[str]):
342
347
  """Deserializes response into an object.
@@ -355,7 +360,7 @@ class ApiClient:
355
360
  data = json.loads(response_text)
356
361
  except ValueError:
357
362
  data = response_text
358
- elif re.match(r"^application/(json|[\w!#$&.+-^_]+\+json)\s*(;|$)", content_type, re.IGNORECASE):
363
+ elif re.match(r"^application/(json|[\w!#$&.+\-^_]+\+json)\s*(;|$)", content_type, re.IGNORECASE):
359
364
  if response_text == "":
360
365
  data = ""
361
366
  else:
@@ -401,12 +406,16 @@ class ApiClient:
401
406
 
402
407
  if klass in self.PRIMITIVE_TYPES:
403
408
  return self.__deserialize_primitive(data, klass)
404
- elif klass == object:
409
+ elif klass is object:
405
410
  return self.__deserialize_object(data)
406
- elif klass == datetime.date:
411
+ elif klass is datetime.date:
407
412
  return self.__deserialize_date(data)
408
- elif klass == datetime.datetime:
413
+ elif klass is datetime.datetime:
409
414
  return self.__deserialize_datetime(data)
415
+ elif klass is decimal.Decimal:
416
+ return decimal.Decimal(data)
417
+ elif klass is uuid.UUID:
418
+ return uuid.UUID(data)
410
419
  elif issubclass(klass, Enum):
411
420
  return self.__deserialize_enum(data, klass)
412
421
  else:
@@ -554,12 +563,14 @@ class ApiClient:
554
563
  os.close(fd)
555
564
  os.remove(path)
556
565
 
557
- content_disposition = response.getheader("Content-Disposition")
566
+ content_disposition = response.headers.get("Content-Disposition")
558
567
  if content_disposition:
559
568
  m = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?', content_disposition)
560
569
  if m is None:
561
570
  raise ValueError("Unexpected 'content-disposition' header value")
562
- filename = m.group(1)
571
+ filename = os.path.basename(m.group(1)) # Strip any directory traversal
572
+ if filename in ("", ".", ".."): # fall back to tmp filename
573
+ filename = os.path.basename(path)
563
574
  path = os.path.join(os.path.dirname(path), filename)
564
575
 
565
576
  with open(path, "wb") as f:
@@ -130,7 +130,7 @@ class ApiException(OpenApiException):
130
130
  self.body = http_resp.data.decode("utf-8")
131
131
  except Exception: # noqa: S110
132
132
  pass
133
- self.headers = http_resp.getheaders()
133
+ self.headers = http_resp.headers
134
134
 
135
135
  @classmethod
136
136
  def from_response(
@@ -13,7 +13,6 @@
13
13
  Do not edit the class manually.
14
14
  """ # noqa: E501
15
15
 
16
-
17
16
  # import models into model package
18
17
  from stackit.serverbackup.models.backup import Backup
19
18
  from stackit.serverbackup.models.backup_job import BackupJob
@@ -19,6 +19,7 @@ import pprint
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
20
 
21
21
  from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator
22
+ from pydantic_core import to_jsonable_python
22
23
  from typing_extensions import Self
23
24
 
24
25
  from stackit.serverbackup.models.backup_volume_backups_inner import (
@@ -71,7 +72,8 @@ class Backup(BaseModel):
71
72
  return value
72
73
 
73
74
  model_config = ConfigDict(
74
- populate_by_name=True,
75
+ validate_by_name=True,
76
+ validate_by_alias=True,
75
77
  validate_assignment=True,
76
78
  protected_namespaces=(),
77
79
  )
@@ -82,8 +84,7 @@ class Backup(BaseModel):
82
84
 
83
85
  def to_json(self) -> str:
84
86
  """Returns the JSON representation of the model using alias"""
85
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
86
- return json.dumps(self.to_dict())
87
+ return json.dumps(to_jsonable_python(self.to_dict()))
87
88
 
88
89
  @classmethod
89
90
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -110,9 +111,9 @@ class Backup(BaseModel):
110
111
  # override the default output from pydantic by calling `to_dict()` of each item in volume_backups (list)
111
112
  _items = []
112
113
  if self.volume_backups:
113
- for _item in self.volume_backups:
114
- if _item:
115
- _items.append(_item.to_dict())
114
+ for _item_volume_backups in self.volume_backups:
115
+ if _item_volume_backups:
116
+ _items.append(_item_volume_backups.to_dict())
116
117
  _dict["volumeBackups"] = _items
117
118
  return _dict
118
119
 
@@ -19,6 +19,7 @@ import pprint
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
20
 
21
21
  from pydantic import BaseModel, ConfigDict, StrictStr
22
+ from pydantic_core import to_jsonable_python
22
23
  from typing_extensions import Self
23
24
 
24
25
 
@@ -31,7 +32,8 @@ class BackupJob(BaseModel):
31
32
  __properties: ClassVar[List[str]] = ["id"]
32
33
 
33
34
  model_config = ConfigDict(
34
- populate_by_name=True,
35
+ validate_by_name=True,
36
+ validate_by_alias=True,
35
37
  validate_assignment=True,
36
38
  protected_namespaces=(),
37
39
  )
@@ -42,8 +44,7 @@ class BackupJob(BaseModel):
42
44
 
43
45
  def to_json(self) -> str:
44
46
  """Returns the JSON representation of the model using alias"""
45
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
46
- return json.dumps(self.to_dict())
47
+ return json.dumps(to_jsonable_python(self.to_dict()))
47
48
 
48
49
  @classmethod
49
50
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -25,6 +25,7 @@ from pydantic import (
25
25
  StrictBool,
26
26
  StrictStr,
27
27
  )
28
+ from pydantic_core import to_jsonable_python
28
29
  from typing_extensions import Self
29
30
 
30
31
  from stackit.serverbackup.models.backup_policy_backup_properties import (
@@ -43,11 +44,15 @@ class BackupPolicy(BaseModel):
43
44
  enabled: Optional[StrictBool] = None
44
45
  id: Optional[StrictStr] = None
45
46
  name: Optional[StrictStr] = None
46
- rrule: Optional[StrictStr] = None
47
+ rrule: Optional[StrictStr] = Field(
48
+ default=None,
49
+ description="An rrule (Recurrence Rule) is a standardized string format used in iCalendar (RFC 5545) to define repeating events, and you can generate one by using a dedicated library or by using online generator tools to specify parameters like frequency, interval, and end dates",
50
+ )
47
51
  __properties: ClassVar[List[str]] = ["backupProperties", "default", "description", "enabled", "id", "name", "rrule"]
48
52
 
49
53
  model_config = ConfigDict(
50
- populate_by_name=True,
54
+ validate_by_name=True,
55
+ validate_by_alias=True,
51
56
  validate_assignment=True,
52
57
  protected_namespaces=(),
53
58
  )
@@ -58,8 +63,7 @@ class BackupPolicy(BaseModel):
58
63
 
59
64
  def to_json(self) -> str:
60
65
  """Returns the JSON representation of the model using alias"""
61
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
62
- return json.dumps(self.to_dict())
66
+ return json.dumps(to_jsonable_python(self.to_dict()))
63
67
 
64
68
  @classmethod
65
69
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -19,6 +19,7 @@ import pprint
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
20
 
21
21
  from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
22
+ from pydantic_core import to_jsonable_python
22
23
  from typing_extensions import Self
23
24
 
24
25
 
@@ -32,7 +33,8 @@ class BackupPolicyBackupProperties(BaseModel):
32
33
  __properties: ClassVar[List[str]] = ["name", "retentionPeriod"]
33
34
 
34
35
  model_config = ConfigDict(
35
- populate_by_name=True,
36
+ validate_by_name=True,
37
+ validate_by_alias=True,
36
38
  validate_assignment=True,
37
39
  protected_namespaces=(),
38
40
  )
@@ -43,8 +45,7 @@ class BackupPolicyBackupProperties(BaseModel):
43
45
 
44
46
  def to_json(self) -> str:
45
47
  """Returns the JSON representation of the model using alias"""
46
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
47
- return json.dumps(self.to_dict())
48
+ return json.dumps(to_jsonable_python(self.to_dict()))
48
49
 
49
50
  @classmethod
50
51
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -19,6 +19,7 @@ import pprint
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
20
 
21
21
  from pydantic import BaseModel, ConfigDict, Field, StrictStr
22
+ from pydantic_core import to_jsonable_python
22
23
  from typing_extensions import Annotated, Self
23
24
 
24
25
 
@@ -35,7 +36,8 @@ class BackupProperties(BaseModel):
35
36
  __properties: ClassVar[List[str]] = ["name", "retentionPeriod", "volumeIds"]
36
37
 
37
38
  model_config = ConfigDict(
38
- populate_by_name=True,
39
+ validate_by_name=True,
40
+ validate_by_alias=True,
39
41
  validate_assignment=True,
40
42
  protected_namespaces=(),
41
43
  )
@@ -46,8 +48,7 @@ class BackupProperties(BaseModel):
46
48
 
47
49
  def to_json(self) -> str:
48
50
  """Returns the JSON representation of the model using alias"""
49
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
50
- return json.dumps(self.to_dict())
51
+ return json.dumps(to_jsonable_python(self.to_dict()))
51
52
 
52
53
  @classmethod
53
54
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -26,6 +26,7 @@ from pydantic import (
26
26
  StrictInt,
27
27
  StrictStr,
28
28
  )
29
+ from pydantic_core import to_jsonable_python
29
30
  from typing_extensions import Self
30
31
 
31
32
  from stackit.serverbackup.models.backup_properties import BackupProperties
@@ -40,11 +41,14 @@ class BackupSchedule(BaseModel):
40
41
  enabled: StrictBool
41
42
  id: StrictInt
42
43
  name: StrictStr
43
- rrule: StrictStr
44
+ rrule: StrictStr = Field(
45
+ description="An rrule (Recurrence Rule) is a standardized string format used in iCalendar (RFC 5545) to define repeating events, and you can generate one by using a dedicated library or by using online generator tools to specify parameters like frequency, interval, and end dates"
46
+ )
44
47
  __properties: ClassVar[List[str]] = ["backupProperties", "enabled", "id", "name", "rrule"]
45
48
 
46
49
  model_config = ConfigDict(
47
- populate_by_name=True,
50
+ validate_by_name=True,
51
+ validate_by_alias=True,
48
52
  validate_assignment=True,
49
53
  protected_namespaces=(),
50
54
  )
@@ -55,8 +59,7 @@ class BackupSchedule(BaseModel):
55
59
 
56
60
  def to_json(self) -> str:
57
61
  """Returns the JSON representation of the model using alias"""
58
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
59
- return json.dumps(self.to_dict())
62
+ return json.dumps(to_jsonable_python(self.to_dict()))
60
63
 
61
64
  @classmethod
62
65
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -19,6 +19,7 @@ import pprint
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
20
 
21
21
  from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator
22
+ from pydantic_core import to_jsonable_python
22
23
  from typing_extensions import Self
23
24
 
24
25
 
@@ -60,7 +61,8 @@ class BackupVolumeBackupsInner(BaseModel):
60
61
  return value
61
62
 
62
63
  model_config = ConfigDict(
63
- populate_by_name=True,
64
+ validate_by_name=True,
65
+ validate_by_alias=True,
64
66
  validate_assignment=True,
65
67
  protected_namespaces=(),
66
68
  )
@@ -71,8 +73,7 @@ class BackupVolumeBackupsInner(BaseModel):
71
73
 
72
74
  def to_json(self) -> str:
73
75
  """Returns the JSON representation of the model using alias"""
74
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
75
- return json.dumps(self.to_dict())
76
+ return json.dumps(to_jsonable_python(self.to_dict()))
76
77
 
77
78
  @classmethod
78
79
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -19,6 +19,7 @@ import pprint
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
20
 
21
21
  from pydantic import BaseModel, ConfigDict, Field, StrictStr
22
+ from pydantic_core import to_jsonable_python
22
23
  from typing_extensions import Annotated, Self
23
24
 
24
25
 
@@ -35,7 +36,8 @@ class CreateBackupPayload(BaseModel):
35
36
  __properties: ClassVar[List[str]] = ["name", "retentionPeriod", "volumeIds"]
36
37
 
37
38
  model_config = ConfigDict(
38
- populate_by_name=True,
39
+ validate_by_name=True,
40
+ validate_by_alias=True,
39
41
  validate_assignment=True,
40
42
  protected_namespaces=(),
41
43
  )
@@ -46,8 +48,7 @@ class CreateBackupPayload(BaseModel):
46
48
 
47
49
  def to_json(self) -> str:
48
50
  """Returns the JSON representation of the model using alias"""
49
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
50
- return json.dumps(self.to_dict())
51
+ return json.dumps(to_jsonable_python(self.to_dict()))
51
52
 
52
53
  @classmethod
53
54
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -25,6 +25,7 @@ from pydantic import (
25
25
  StrictBool,
26
26
  StrictStr,
27
27
  )
28
+ from pydantic_core import to_jsonable_python
28
29
  from typing_extensions import Self
29
30
 
30
31
  from stackit.serverbackup.models.backup_properties import BackupProperties
@@ -38,11 +39,14 @@ class CreateBackupSchedulePayload(BaseModel):
38
39
  backup_properties: Optional[BackupProperties] = Field(default=None, alias="backupProperties")
39
40
  enabled: StrictBool
40
41
  name: StrictStr = Field(description="Max 255 characters")
41
- rrule: StrictStr
42
+ rrule: StrictStr = Field(
43
+ description="An rrule (Recurrence Rule) is a standardized string format used in iCalendar (RFC 5545) to define repeating events, and you can generate one by using a dedicated library or by using online generator tools to specify parameters like frequency, interval, and end dates"
44
+ )
42
45
  __properties: ClassVar[List[str]] = ["backupProperties", "enabled", "name", "rrule"]
43
46
 
44
47
  model_config = ConfigDict(
45
- populate_by_name=True,
48
+ validate_by_name=True,
49
+ validate_by_alias=True,
46
50
  validate_assignment=True,
47
51
  protected_namespaces=(),
48
52
  )
@@ -53,8 +57,7 @@ class CreateBackupSchedulePayload(BaseModel):
53
57
 
54
58
  def to_json(self) -> str:
55
59
  """Returns the JSON representation of the model using alias"""
56
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
57
- return json.dumps(self.to_dict())
60
+ return json.dumps(to_jsonable_python(self.to_dict()))
58
61
 
59
62
  @classmethod
60
63
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -17,8 +17,10 @@ from __future__ import annotations
17
17
  import json
18
18
  import pprint
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
+ from uuid import UUID
20
21
 
21
- from pydantic import BaseModel, ConfigDict, Field, StrictStr
22
+ from pydantic import BaseModel, ConfigDict, Field
23
+ from pydantic_core import to_jsonable_python
22
24
  from typing_extensions import Self
23
25
 
24
26
 
@@ -27,11 +29,12 @@ class EnableServiceResourcePayload(BaseModel):
27
29
  EnableServiceResourcePayload
28
30
  """ # noqa: E501
29
31
 
30
- backup_policy_id: Optional[StrictStr] = Field(default=None, alias="backupPolicyId")
32
+ backup_policy_id: Optional[UUID] = Field(default=None, alias="backupPolicyId")
31
33
  __properties: ClassVar[List[str]] = ["backupPolicyId"]
32
34
 
33
35
  model_config = ConfigDict(
34
- populate_by_name=True,
36
+ validate_by_name=True,
37
+ validate_by_alias=True,
35
38
  validate_assignment=True,
36
39
  protected_namespaces=(),
37
40
  )
@@ -42,8 +45,7 @@ class EnableServiceResourcePayload(BaseModel):
42
45
 
43
46
  def to_json(self) -> str:
44
47
  """Returns the JSON representation of the model using alias"""
45
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
46
- return json.dumps(self.to_dict())
48
+ return json.dumps(to_jsonable_python(self.to_dict()))
47
49
 
48
50
  @classmethod
49
51
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -19,6 +19,7 @@ import pprint
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
20
 
21
21
  from pydantic import BaseModel, ConfigDict, Field, StrictStr
22
+ from pydantic_core import to_jsonable_python
22
23
  from typing_extensions import Self
23
24
 
24
25
 
@@ -34,7 +35,8 @@ class ErrorResponse(BaseModel):
34
35
  __properties: ClassVar[List[str]] = ["message", "status"]
35
36
 
36
37
  model_config = ConfigDict(
37
- populate_by_name=True,
38
+ validate_by_name=True,
39
+ validate_by_alias=True,
38
40
  validate_assignment=True,
39
41
  protected_namespaces=(),
40
42
  )
@@ -45,8 +47,7 @@ class ErrorResponse(BaseModel):
45
47
 
46
48
  def to_json(self) -> str:
47
49
  """Returns the JSON representation of the model using alias"""
48
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
49
- return json.dumps(self.to_dict())
50
+ return json.dumps(to_jsonable_python(self.to_dict()))
50
51
 
51
52
  @classmethod
52
53
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -19,6 +19,7 @@ import pprint
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
20
 
21
21
  from pydantic import BaseModel, ConfigDict
22
+ from pydantic_core import to_jsonable_python
22
23
  from typing_extensions import Self
23
24
 
24
25
  from stackit.serverbackup.models.backup_policy import BackupPolicy
@@ -33,7 +34,8 @@ class GetBackupPoliciesResponse(BaseModel):
33
34
  __properties: ClassVar[List[str]] = ["items"]
34
35
 
35
36
  model_config = ConfigDict(
36
- populate_by_name=True,
37
+ validate_by_name=True,
38
+ validate_by_alias=True,
37
39
  validate_assignment=True,
38
40
  protected_namespaces=(),
39
41
  )
@@ -44,8 +46,7 @@ class GetBackupPoliciesResponse(BaseModel):
44
46
 
45
47
  def to_json(self) -> str:
46
48
  """Returns the JSON representation of the model using alias"""
47
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
48
- return json.dumps(self.to_dict())
49
+ return json.dumps(to_jsonable_python(self.to_dict()))
49
50
 
50
51
  @classmethod
51
52
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -72,9 +73,9 @@ class GetBackupPoliciesResponse(BaseModel):
72
73
  # override the default output from pydantic by calling `to_dict()` of each item in items (list)
73
74
  _items = []
74
75
  if self.items:
75
- for _item in self.items:
76
- if _item:
77
- _items.append(_item.to_dict())
76
+ for _item_items in self.items:
77
+ if _item_items:
78
+ _items.append(_item_items.to_dict())
78
79
  _dict["items"] = _items
79
80
  return _dict
80
81
 
@@ -19,6 +19,7 @@ import pprint
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
20
 
21
21
  from pydantic import BaseModel, ConfigDict
22
+ from pydantic_core import to_jsonable_python
22
23
  from typing_extensions import Self
23
24
 
24
25
  from stackit.serverbackup.models.backup_schedule import BackupSchedule
@@ -33,7 +34,8 @@ class GetBackupSchedulesResponse(BaseModel):
33
34
  __properties: ClassVar[List[str]] = ["items"]
34
35
 
35
36
  model_config = ConfigDict(
36
- populate_by_name=True,
37
+ validate_by_name=True,
38
+ validate_by_alias=True,
37
39
  validate_assignment=True,
38
40
  protected_namespaces=(),
39
41
  )
@@ -44,8 +46,7 @@ class GetBackupSchedulesResponse(BaseModel):
44
46
 
45
47
  def to_json(self) -> str:
46
48
  """Returns the JSON representation of the model using alias"""
47
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
48
- return json.dumps(self.to_dict())
49
+ return json.dumps(to_jsonable_python(self.to_dict()))
49
50
 
50
51
  @classmethod
51
52
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -72,9 +73,9 @@ class GetBackupSchedulesResponse(BaseModel):
72
73
  # override the default output from pydantic by calling `to_dict()` of each item in items (list)
73
74
  _items = []
74
75
  if self.items:
75
- for _item in self.items:
76
- if _item:
77
- _items.append(_item.to_dict())
76
+ for _item_items in self.items:
77
+ if _item_items:
78
+ _items.append(_item_items.to_dict())
78
79
  _dict["items"] = _items
79
80
  return _dict
80
81
 
@@ -19,6 +19,7 @@ import pprint
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
20
 
21
21
  from pydantic import BaseModel, ConfigDict, StrictBool
22
+ from pydantic_core import to_jsonable_python
22
23
  from typing_extensions import Self
23
24
 
24
25
 
@@ -31,7 +32,8 @@ class GetBackupServiceResponse(BaseModel):
31
32
  __properties: ClassVar[List[str]] = ["enabled"]
32
33
 
33
34
  model_config = ConfigDict(
34
- populate_by_name=True,
35
+ validate_by_name=True,
36
+ validate_by_alias=True,
35
37
  validate_assignment=True,
36
38
  protected_namespaces=(),
37
39
  )
@@ -42,8 +44,7 @@ class GetBackupServiceResponse(BaseModel):
42
44
 
43
45
  def to_json(self) -> str:
44
46
  """Returns the JSON representation of the model using alias"""
45
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
46
- return json.dumps(self.to_dict())
47
+ return json.dumps(to_jsonable_python(self.to_dict()))
47
48
 
48
49
  @classmethod
49
50
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -19,6 +19,7 @@ import pprint
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
20
 
21
21
  from pydantic import BaseModel, ConfigDict
22
+ from pydantic_core import to_jsonable_python
22
23
  from typing_extensions import Self
23
24
 
24
25
  from stackit.serverbackup.models.backup import Backup
@@ -33,7 +34,8 @@ class GetBackupsListResponse(BaseModel):
33
34
  __properties: ClassVar[List[str]] = ["items"]
34
35
 
35
36
  model_config = ConfigDict(
36
- populate_by_name=True,
37
+ validate_by_name=True,
38
+ validate_by_alias=True,
37
39
  validate_assignment=True,
38
40
  protected_namespaces=(),
39
41
  )
@@ -44,8 +46,7 @@ class GetBackupsListResponse(BaseModel):
44
46
 
45
47
  def to_json(self) -> str:
46
48
  """Returns the JSON representation of the model using alias"""
47
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
48
- return json.dumps(self.to_dict())
49
+ return json.dumps(to_jsonable_python(self.to_dict()))
49
50
 
50
51
  @classmethod
51
52
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -72,9 +73,9 @@ class GetBackupsListResponse(BaseModel):
72
73
  # override the default output from pydantic by calling `to_dict()` of each item in items (list)
73
74
  _items = []
74
75
  if self.items:
75
- for _item in self.items:
76
- if _item:
77
- _items.append(_item.to_dict())
76
+ for _item_items in self.items:
77
+ if _item_items:
78
+ _items.append(_item_items.to_dict())
78
79
  _dict["items"] = _items
79
80
  return _dict
80
81
 
@@ -25,6 +25,7 @@ from pydantic import (
25
25
  StrictBool,
26
26
  StrictStr,
27
27
  )
28
+ from pydantic_core import to_jsonable_python
28
29
  from typing_extensions import Self
29
30
 
30
31
 
@@ -38,7 +39,8 @@ class RestoreBackupPayload(BaseModel):
38
39
  __properties: ClassVar[List[str]] = ["startServerAfterRestore", "volumeIds"]
39
40
 
40
41
  model_config = ConfigDict(
41
- populate_by_name=True,
42
+ validate_by_name=True,
43
+ validate_by_alias=True,
42
44
  validate_assignment=True,
43
45
  protected_namespaces=(),
44
46
  )
@@ -49,8 +51,7 @@ class RestoreBackupPayload(BaseModel):
49
51
 
50
52
  def to_json(self) -> str:
51
53
  """Returns the JSON representation of the model using alias"""
52
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
53
- return json.dumps(self.to_dict())
54
+ return json.dumps(to_jsonable_python(self.to_dict()))
54
55
 
55
56
  @classmethod
56
57
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -19,6 +19,7 @@ import pprint
19
19
  from typing import Any, ClassVar, Dict, List, Optional, Set
20
20
 
21
21
  from pydantic import BaseModel, ConfigDict, Field, StrictStr
22
+ from pydantic_core import to_jsonable_python
22
23
  from typing_extensions import Self
23
24
 
24
25
 
@@ -31,7 +32,8 @@ class RestoreVolumeBackupPayload(BaseModel):
31
32
  __properties: ClassVar[List[str]] = ["restoreVolumeId"]
32
33
 
33
34
  model_config = ConfigDict(
34
- populate_by_name=True,
35
+ validate_by_name=True,
36
+ validate_by_alias=True,
35
37
  validate_assignment=True,
36
38
  protected_namespaces=(),
37
39
  )
@@ -42,8 +44,7 @@ class RestoreVolumeBackupPayload(BaseModel):
42
44
 
43
45
  def to_json(self) -> str:
44
46
  """Returns the JSON representation of the model using alias"""
45
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
46
- return json.dumps(self.to_dict())
47
+ return json.dumps(to_jsonable_python(self.to_dict()))
47
48
 
48
49
  @classmethod
49
50
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -25,6 +25,7 @@ from pydantic import (
25
25
  StrictBool,
26
26
  StrictStr,
27
27
  )
28
+ from pydantic_core import to_jsonable_python
28
29
  from typing_extensions import Self
29
30
 
30
31
  from stackit.serverbackup.models.backup_properties import BackupProperties
@@ -38,11 +39,14 @@ class UpdateBackupSchedulePayload(BaseModel):
38
39
  backup_properties: Optional[BackupProperties] = Field(default=None, alias="backupProperties")
39
40
  enabled: StrictBool
40
41
  name: StrictStr = Field(description="Max 255 characters")
41
- rrule: StrictStr
42
+ rrule: StrictStr = Field(
43
+ description="An rrule (Recurrence Rule) is a standardized string format used in iCalendar (RFC 5545) to define repeating events, and you can generate one by using a dedicated library or by using online generator tools to specify parameters like frequency, interval, and end dates"
44
+ )
42
45
  __properties: ClassVar[List[str]] = ["backupProperties", "enabled", "name", "rrule"]
43
46
 
44
47
  model_config = ConfigDict(
45
- populate_by_name=True,
48
+ validate_by_name=True,
49
+ validate_by_alias=True,
46
50
  validate_assignment=True,
47
51
  protected_namespaces=(),
48
52
  )
@@ -53,8 +57,7 @@ class UpdateBackupSchedulePayload(BaseModel):
53
57
 
54
58
  def to_json(self) -> str:
55
59
  """Returns the JSON representation of the model using alias"""
56
- # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
57
- return json.dumps(self.to_dict())
60
+ return json.dumps(to_jsonable_python(self.to_dict()))
58
61
 
59
62
  @classmethod
60
63
  def from_json(cls, json_str: str) -> Optional[Self]:
@@ -39,12 +39,17 @@ class RESTResponse(io.IOBase):
39
39
  self.data = self.response.content
40
40
  return self.data
41
41
 
42
+ @property
43
+ def headers(self):
44
+ """Returns a dictionary of response headers."""
45
+ return self.response.headers
46
+
42
47
  def getheaders(self):
43
- """Returns a dictionary of the response headers."""
48
+ """Returns a dictionary of the response headers; use ``headers`` instead."""
44
49
  return self.response.headers
45
50
 
46
51
  def getheader(self, name, default=None):
47
- """Returns a given response header."""
52
+ """Returns a given response header; use ``headers.get()`` instead."""
48
53
  return self.response.headers.get(name, default)
49
54
 
50
55
 
@@ -94,6 +99,7 @@ class RESTClientObject:
94
99
  url,
95
100
  data=request_body,
96
101
  headers=headers,
102
+ timeout=_request_timeout,
97
103
  )
98
104
  elif content_type == "application/x-www-form-urlencoded":
99
105
  r = self.session.request(
@@ -101,6 +107,7 @@ class RESTClientObject:
101
107
  url,
102
108
  params=post_params,
103
109
  headers=headers,
110
+ timeout=_request_timeout,
104
111
  )
105
112
  elif content_type == "multipart/form-data":
106
113
  # must del headers['Content-Type'], or the correct
@@ -114,6 +121,7 @@ class RESTClientObject:
114
121
  url,
115
122
  files=post_params,
116
123
  headers=headers,
124
+ timeout=_request_timeout,
117
125
  )
118
126
  # Pass a `string` parameter directly in the body to support
119
127
  # other content types than JSON when `body` argument is
@@ -124,10 +132,17 @@ class RESTClientObject:
124
132
  url,
125
133
  data=body,
126
134
  headers=headers,
135
+ timeout=_request_timeout,
127
136
  )
128
137
  elif headers["Content-Type"].startswith("text/") and isinstance(body, bool):
129
138
  request_body = "true" if body else "false"
130
- r = self.session.request(method, url, data=request_body, headers=headers)
139
+ r = self.session.request(
140
+ method,
141
+ url,
142
+ data=request_body,
143
+ headers=headers,
144
+ timeout=_request_timeout,
145
+ )
131
146
  else:
132
147
  # Cannot generate the request from given parameters
133
148
  msg = """Cannot prepare a request message for provided
@@ -141,6 +156,7 @@ class RESTClientObject:
141
156
  url,
142
157
  params={},
143
158
  headers=headers,
159
+ timeout=_request_timeout,
144
160
  )
145
161
  except requests.exceptions.SSLError as e:
146
162
  msg = "\n".join([type(e).__name__, str(e)])
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stackit-serverbackup
3
- Version: 1.1.1
3
+ Version: 1.2.0
4
4
  Summary: STACKIT Server Backup Management API
5
+ Project-URL: Homepage, https://github.com/stackitcloud/stackit-sdk-python
6
+ Project-URL: Issues, https://github.com/stackitcloud/stackit-sdk-python/issues
7
+ Author-email: STACKIT Developer Tools <developer-tools@stackit.cloud>
5
8
  License-File: LICENSE.md
6
9
  License-File: NOTICE.txt
7
- Author: STACKIT Developer Tools
8
- Author-email: developer-tools@stackit.cloud
9
- Requires-Python: >=3.9,<4.0
10
10
  Classifier: License :: OSI Approved :: Apache Software License
11
11
  Classifier: Operating System :: OS Independent
12
12
  Classifier: Programming Language :: Python :: 3
@@ -16,12 +16,11 @@ Classifier: Programming Language :: Python :: 3.11
16
16
  Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Programming Language :: Python :: 3.13
18
18
  Classifier: Programming Language :: Python :: 3.14
19
- Requires-Dist: pydantic (>=2.9.2)
20
- Requires-Dist: python-dateutil (>=2.9.0.post0)
21
- Requires-Dist: requests (>=2.32.3)
22
- Requires-Dist: stackit-core (>=0.0.1a)
23
- Project-URL: Homepage, https://github.com/stackitcloud/stackit-sdk-python
24
- Project-URL: Issues, https://github.com/stackitcloud/stackit-sdk-python/issues
19
+ Requires-Python: <4.0,>=3.9
20
+ Requires-Dist: pydantic>=2.9.2
21
+ Requires-Dist: python-dateutil>=2.9.0.post0
22
+ Requires-Dist: requests>=2.32.3
23
+ Requires-Dist: stackit-core>=0.0.1a
25
24
  Description-Content-Type: text/markdown
26
25
 
27
26
  # stackit.serverbackup
@@ -45,4 +44,4 @@ import stackit.serverbackup
45
44
 
46
45
  ## Getting Started
47
46
 
48
- [Examples](https://github.com/stackitcloud/stackit-sdk-python/tree/main/examples) for the usage of the package can be found in the [GitHub repository](https://github.com/stackitcloud/stackit-sdk-python) of the SDK.
47
+ [Examples](https://github.com/stackitcloud/stackit-sdk-python/tree/main/examples) for the usage of the package can be found in the [GitHub repository](https://github.com/stackitcloud/stackit-sdk-python) of the SDK.
@@ -0,0 +1,33 @@
1
+ stackit/serverbackup/__init__.py,sha256=VG35es8cPZHtrEahl3jZkbYoO-Ij4yIeK85bleiiGpc,4053
2
+ stackit/serverbackup/api_client.py,sha256=SOON9YYDXDtShjs8qVb9yrjTrSdlgtKDJl34gUCH-Gg,23782
3
+ stackit/serverbackup/api_response.py,sha256=HRYkVqMNIlfODacTQPTbiVj2YdcnutpQrKJdeAoCSpM,642
4
+ stackit/serverbackup/configuration.py,sha256=TGWzzKqb_W5ULS314KdI1klLZTeNi644caUcANc15-w,5719
5
+ stackit/serverbackup/exceptions.py,sha256=PGB2_qXHzry8GTiOuzykhNp5xCiCxHus-alHZTvZP3Q,6432
6
+ stackit/serverbackup/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ stackit/serverbackup/rest.py,sha256=eBxYfyGIsPby0sh7k5A8sQLSCLsrM7SH4Qr3VrxRODY,6427
8
+ stackit/serverbackup/api/__init__.py,sha256=4gnwP89FX1nQYLr9Mg7TDzyxbWvl2JNyavFrb9moimM,107
9
+ stackit/serverbackup/api/default_api.py,sha256=yeoTAHG_yBvaQYhSQ80duIEMd6WzMelD36N-5XELdm4,194803
10
+ stackit/serverbackup/models/__init__.py,sha256=hJCXX9NE1xy5dQt1ErlJatZBAWtBaQvTr-nEUHYS99E,1990
11
+ stackit/serverbackup/models/backup.py,sha256=XG2qm6FWj3iGN75o3t9oVMM38zKtcDBwAcex5yEXsLA,4672
12
+ stackit/serverbackup/models/backup_job.py,sha256=FPU2j0pHxqbHbRJlONZLdb2JzwPSbzOlyA1MZXE2Nkc,2390
13
+ stackit/serverbackup/models/backup_policy.py,sha256=DDahugfK-po9vLQBfrnfxYNNlZtcXh8TeXdj3IOd1_I,4003
14
+ stackit/serverbackup/models/backup_policy_backup_properties.py,sha256=KyawhZlrovO7RXYuVO-dZgfvtHGG_hcG8O3ng9pQJi0,2664
15
+ stackit/serverbackup/models/backup_properties.py,sha256=wAi2E0l-0-WDgfPwwxry-51mY7h7fTXCFAsEepbnk74,2873
16
+ stackit/serverbackup/models/backup_schedule.py,sha256=Q7j4k4xQduWwffnJ4RjMYadq49Obk8l8WdKetXEt5y4,3670
17
+ stackit/serverbackup/models/backup_volume_backups_inner.py,sha256=ZKOLJIH0iv7e8AVmETxCYbLBl-uKI3y1fnnXSEqyldw,3978
18
+ stackit/serverbackup/models/create_backup_payload.py,sha256=ysWsWctgkUcFefji1V72PVFQJ2i9EySAI_YS2VnQeDM,2885
19
+ stackit/serverbackup/models/create_backup_schedule_payload.py,sha256=1EIG5QqRyXzynmGd7Hpj8nAfab_YQff9IYgFgSWgSkQ,3688
20
+ stackit/serverbackup/models/enable_service_resource_payload.py,sha256=bdMoblgD4Qm8yb54rEOeMEHWIT6h2MdbrQ3v0ZP_WYw,2585
21
+ stackit/serverbackup/models/error_response.py,sha256=1awfFOVySGGdXnrS848TidKYmajdCtDp5HRP7BLUPts,2663
22
+ stackit/serverbackup/models/get_backup_policies_response.py,sha256=sPz1wnMS0zkob_-Nca9CUtKNBoDUl6phQOotlKxSeIo,3039
23
+ stackit/serverbackup/models/get_backup_schedules_response.py,sha256=wEs-js_3Q89-L8OR4r9XV6_u22wPVb22PG5mqaffbrk,3091
24
+ stackit/serverbackup/models/get_backup_service_response.py,sha256=D_YHBzYIj496oLSpJdOBRiVMq35XcFrYBcXpAlT_kEs,2489
25
+ stackit/serverbackup/models/get_backups_list_response.py,sha256=QFDlVMHu-srCaAWoa75ntT_W7p4R5TvnqoXc8FxKQks,2932
26
+ stackit/serverbackup/models/restore_backup_payload.py,sha256=hV90oHUpwHIlPIYDwv91hgjZqqLp5FVnCuGqziPuQ30,2760
27
+ stackit/serverbackup/models/restore_volume_backup_payload.py,sha256=qLjJoMbNHc7iSDo46Ufz5PE7X4-OZqEfik1-a7op4KA,2552
28
+ stackit/serverbackup/models/update_backup_schedule_payload.py,sha256=HJYL8qWMch3G_dOEJGXGZPdnQB3Qv_64AdRzd1Iz7gE,3688
29
+ stackit_serverbackup-1.2.0.dist-info/METADATA,sha256=eH5aUcDvWNGnAmIqwpLcO64kf0Mhz2hYk1Y-2lL4VEg,1712
30
+ stackit_serverbackup-1.2.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
31
+ stackit_serverbackup-1.2.0.dist-info/licenses/LICENSE.md,sha256=3dF8Tb7yZn2tS4zyNa-yNe-68pH8qyWdGz4ioMd3MgE,10933
32
+ stackit_serverbackup-1.2.0.dist-info/licenses/NOTICE.txt,sha256=0HfqD8VUMXY8GOdZEb24InnlD5YeNEBb6jVOMBwSX_E,65
33
+ stackit_serverbackup-1.2.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.2.1
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,33 +0,0 @@
1
- stackit/serverbackup/__init__.py,sha256=VG35es8cPZHtrEahl3jZkbYoO-Ij4yIeK85bleiiGpc,4053
2
- stackit/serverbackup/api/__init__.py,sha256=4gnwP89FX1nQYLr9Mg7TDzyxbWvl2JNyavFrb9moimM,107
3
- stackit/serverbackup/api/default_api.py,sha256=yeoTAHG_yBvaQYhSQ80duIEMd6WzMelD36N-5XELdm4,194803
4
- stackit/serverbackup/api_client.py,sha256=OdwtgbeD-N7rj_baPuDbYhsooEmf6iIakkepMghO01E,23376
5
- stackit/serverbackup/api_response.py,sha256=HRYkVqMNIlfODacTQPTbiVj2YdcnutpQrKJdeAoCSpM,642
6
- stackit/serverbackup/configuration.py,sha256=TGWzzKqb_W5ULS314KdI1klLZTeNi644caUcANc15-w,5719
7
- stackit/serverbackup/exceptions.py,sha256=nNghwkfLB34oT-vq9XKtuwkveYK-OGbyuxUNSTpRfgg,6437
8
- stackit/serverbackup/models/__init__.py,sha256=W8IO6b4B7HeyNAo4HT0XjS3AZ2UEM3VKD0j-r6EOmV4,1991
9
- stackit/serverbackup/models/backup.py,sha256=F_fRW0mnzLZ6uDjKMvmxt7sd8uset0i6kdL0v22LQGo,4623
10
- stackit/serverbackup/models/backup_job.py,sha256=JZrjA0iJqI47r2qYeNtnxJisuv1njpv1ERPwXxVVElw,2386
11
- stackit/serverbackup/models/backup_policy.py,sha256=XenNwg1BwLIiqnuX8tel3twxGw_GETCSFs--8mKI3FI,3679
12
- stackit/serverbackup/models/backup_policy_backup_properties.py,sha256=cV5YP9LE8tyTVKnVtNUv9z4z_7-lDOxZigr8afSgOlo,2660
13
- stackit/serverbackup/models/backup_properties.py,sha256=D02gHWRAbNxTPlst9dRN2FYkoXm_m-gMPgaeu6kfD9c,2869
14
- stackit/serverbackup/models/backup_schedule.py,sha256=G_ZivZYGWzaBavkbRycfWM_ZkfO_wqilJxHApdf7_ys,3362
15
- stackit/serverbackup/models/backup_volume_backups_inner.py,sha256=3TheiytC2oZejbvhd1YuyzJ7HS1kbfDT7yG9uQQ-m1Q,3974
16
- stackit/serverbackup/models/create_backup_payload.py,sha256=v5Z7yJ1xuElIBCQw4Lvcq4BlioqMIczStwp1OxvnrxE,2881
17
- stackit/serverbackup/models/create_backup_schedule_payload.py,sha256=iSaVWKHppMLxVIryuV0pnyHG5uTv9949eo3BjSd_Muk,3380
18
- stackit/serverbackup/models/enable_service_resource_payload.py,sha256=dVCbpHaIpWmkh7W2o7JoD5LwIaAqNxmR6yxkMEWQpo0,2575
19
- stackit/serverbackup/models/error_response.py,sha256=TYIjgHUfmB-AoicyqJgH7kP4ohHPw4skTjhxOrrpoF8,2659
20
- stackit/serverbackup/models/get_backup_policies_response.py,sha256=GAIEbnns87dv9ONZhlKtbDzcb2PIkCgGP485_U6KqXA,3017
21
- stackit/serverbackup/models/get_backup_schedules_response.py,sha256=JEC7glqxal01V0hBb2r_wVlKYa4D_umfQWS9OiYEruc,3069
22
- stackit/serverbackup/models/get_backup_service_response.py,sha256=8M1S4vF9rUbuQm3L3yx38unaAZLc7arAwu9gGYUsBac,2485
23
- stackit/serverbackup/models/get_backups_list_response.py,sha256=3MgMm3dz0x63pSkWEu9ME4gAyF4VDw0C8WGwZ5Hcl8s,2910
24
- stackit/serverbackup/models/restore_backup_payload.py,sha256=PmHkaRp3rooaVCuwECyQw4VhiUjq5sp8tFOfOccrIDI,2756
25
- stackit/serverbackup/models/restore_volume_backup_payload.py,sha256=3lp68tCMqjcixkxOWeSAF9BITGd19TToJ2_rXJRDRKc,2548
26
- stackit/serverbackup/models/update_backup_schedule_payload.py,sha256=ouMQkT84LjDJ1TJFbnTYunYxf3H4p9LGr2bMdVC2Y3g,3380
27
- stackit/serverbackup/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- stackit/serverbackup/rest.py,sha256=4RwHrhAj0YsNRjJ53vh83RTlQ3CrzGly4UYN2mRW-_o,5825
29
- stackit_serverbackup-1.1.1.dist-info/METADATA,sha256=wC-pr2j2sis_9sy21JgzmVMsTcEBuzg3PSu2nF6qFkI,1731
30
- stackit_serverbackup-1.1.1.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
31
- stackit_serverbackup-1.1.1.dist-info/licenses/LICENSE.md,sha256=3dF8Tb7yZn2tS4zyNa-yNe-68pH8qyWdGz4ioMd3MgE,10933
32
- stackit_serverbackup-1.1.1.dist-info/licenses/NOTICE.txt,sha256=0HfqD8VUMXY8GOdZEb24InnlD5YeNEBb6jVOMBwSX_E,65
33
- stackit_serverbackup-1.1.1.dist-info/RECORD,,