python3-core-api-client 7.0__py3-none-any.whl → 8.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.
@@ -413,3 +413,11 @@ class CoreApiConnector(CoreApiClient):
413
413
  @cached_property
414
414
  def health(self) -> resources.health.Health:
415
415
  return resources.health.Health(self)
416
+
417
+ @cached_property
418
+ def standards_scans(self) -> resources.standards_scans.StandardsScans:
419
+ return resources.standards_scans.StandardsScans(self)
420
+
421
+ @cached_property
422
+ def available_versions(self) -> resources.available_versions.AvailableVersions:
423
+ return resources.available_versions.AvailableVersions(self)
@@ -144,6 +144,13 @@ class BorgArchiveContentObjectTypeEnum(StrEnum):
144
144
  SYMBOLIC_LINK = "symbolic_link"
145
145
 
146
146
 
147
+ class TimeUnitEnum(StrEnum):
148
+ HOURLY = "hourly"
149
+ DAILY = "daily"
150
+ WEEKLY = "weekly"
151
+ MONTHLY = "monthly"
152
+
153
+
147
154
  class BorgArchiveCreateRequest(BaseCoreApiModel):
148
155
  borg_repository_id: int
149
156
  name: constr(pattern=r"^[a-zA-Z0-9-_]+$", min_length=1, max_length=64)
@@ -153,7 +160,7 @@ class BorgArchiveMetadata(BaseCoreApiModel):
153
160
  name: constr(pattern=r"^[a-zA-Z0-9-_]+$", min_length=1, max_length=64)
154
161
  borg_archive_id: int
155
162
  exists_on_server: bool
156
- contents_path: Optional[str]
163
+ contents_path: str
157
164
 
158
165
 
159
166
  class BorgRepositoryCreateRequest(BaseCoreApiModel):
@@ -165,6 +172,7 @@ class BorgRepositoryCreateRequest(BaseCoreApiModel):
165
172
  keep_monthly: Optional[int]
166
173
  keep_yearly: Optional[int]
167
174
  database_id: Optional[int]
175
+ frequency: TimeUnitEnum
168
176
 
169
177
 
170
178
  class BorgRepositoryUpdateRequest(BaseCoreApiModel):
@@ -173,6 +181,7 @@ class BorgRepositoryUpdateRequest(BaseCoreApiModel):
173
181
  keep_weekly: Optional[int] = None
174
182
  keep_monthly: Optional[int] = None
175
183
  keep_yearly: Optional[int] = None
184
+ frequency: Optional[TimeUnitEnum] = None
176
185
 
177
186
 
178
187
  class CmsConfigurationConstant(BaseCoreApiModel):
@@ -205,7 +214,7 @@ class CmsInstallWordpressRequest(BaseCoreApiModel):
205
214
  site_title: constr(pattern=r"^[a-zA-Z0-9-_ ]+$", min_length=1, max_length=253)
206
215
  site_url: AnyUrl
207
216
  locale: constr(pattern=r"^[a-zA-Z_]+$", min_length=1, max_length=15)
208
- version: constr(pattern=r"^[0-9.]+$", min_length=1, max_length=6)
217
+ version: constr(pattern=r"^[0-9.]+$", min_length=1, max_length=20)
209
218
  admin_email_address: EmailStr
210
219
 
211
220
 
@@ -242,6 +251,26 @@ class CmsThemeInstallFromUrlRequest(BaseCoreApiModel):
242
251
  url: AnyUrl
243
252
 
244
253
 
254
+ class CmsConfigureRedisRequest(BaseCoreApiModel):
255
+ memory_limit: conint(ge=8)
256
+
257
+
258
+ class CmsAutoInstallWordpressRequest(BaseCoreApiModel):
259
+ site_title: constr(pattern=r"^[a-zA-Z0-9-_ ]+$", min_length=1, max_length=253)
260
+ locale: constr(pattern=r"^[a-zA-Z_]+$", min_length=1, max_length=15)
261
+ version: constr(pattern=r"^[0-9.]+$", min_length=1, max_length=20)
262
+ admin_email_address: EmailStr
263
+
264
+
265
+ class CmsWoocommerceHpos(BaseCoreApiModel):
266
+ enabled: bool
267
+
268
+
269
+ class CmsDatabaseIndex(BaseCoreApiModel):
270
+ table_name: constr(min_length=1)
271
+ column_name: constr(min_length=1)
272
+
273
+
245
274
  class CmsUserCredentialsUpdateRequest(BaseCoreApiModel):
246
275
  password: constr(pattern=r"^[ -~]+$", min_length=24, max_length=255)
247
276
 
@@ -273,10 +302,56 @@ class NodejsVersion(RootCoreApiModel):
273
302
  root: constr(pattern=r"^[0-9]{1,2}\.[0-9]{1,2}$")
274
303
 
275
304
 
305
+ class NodejsVersionIncludes(BaseCoreApiModel):
306
+ pass
307
+
308
+
309
+ class NodejsVersionResource(BaseCoreApiModel):
310
+ id: int
311
+ created_at: datetime
312
+ updated_at: datetime
313
+ major_release: conint(ge=0)
314
+ minor_release: conint(ge=0)
315
+ point_release: conint(ge=0)
316
+ includes: NodejsVersionIncludes
317
+
318
+
319
+ class PhpVersionIncludes(BaseCoreApiModel):
320
+ pass
321
+
322
+
323
+ class PhpVersionResource(BaseCoreApiModel):
324
+ id: int
325
+ created_at: datetime
326
+ updated_at: datetime
327
+ version: str
328
+ security_support_ends_at: datetime
329
+ includes: PhpVersionIncludes
330
+
331
+
332
+ class WordpressVersionStabilityEnum(StrEnum):
333
+ LATEST = "latest"
334
+ OUTDATED = "outdated"
335
+ INSECURE = "insecure"
336
+
337
+
338
+ class WordpressVersionIncludes(BaseCoreApiModel):
339
+ pass
340
+
341
+
342
+ class WordpressVersionResource(BaseCoreApiModel):
343
+ id: int
344
+ created_at: datetime
345
+ updated_at: datetime
346
+ version: str
347
+ stability: WordpressVersionStabilityEnum
348
+ includes: WordpressVersionIncludes
349
+
350
+
276
351
  class ClusterIpAddress(BaseCoreApiModel):
277
352
  ip_address: Union[IPv6Address, IPv4Address]
278
353
  dns_name: Optional[str]
279
- l3_ddos_protection_enabled: bool
354
+ l3_ddos_protection_enabled: bool = False
280
355
 
281
356
 
282
357
  class ClusterIpAddresses(RootModelCollectionMixin, RootCoreApiModel): # type: ignore[misc]
@@ -426,6 +501,44 @@ class DatabaseUsageResource(BaseCoreApiModel):
426
501
  includes: DatabaseUsageIncludes
427
502
 
428
503
 
504
+ class DaemonCpuUsageMetricResource(BaseCoreApiModel):
505
+ daemon_name: str
506
+ node_hostname: str
507
+ timestamp: int
508
+ value: float
509
+
510
+
511
+ class DaemonMemoryUsageMetricResource(BaseCoreApiModel):
512
+ daemon_name: str
513
+ node_hostname: str
514
+ timestamp: int
515
+ value: int
516
+
517
+
518
+ class DaemonsMetricsResource(BaseCoreApiModel):
519
+ cpu_usages: List[DaemonCpuUsageMetricResource]
520
+ memory_usages: List[DaemonMemoryUsageMetricResource]
521
+
522
+
523
+ class DatabaseUserCpuUsageMetricResource(BaseCoreApiModel):
524
+ database_user_name: str
525
+ node_hostname: str
526
+ timestamp: int
527
+ value: float
528
+
529
+
530
+ class DatabaseUserTotalConnectionMetricResource(BaseCoreApiModel):
531
+ database_user_name: str
532
+ node_hostname: str
533
+ timestamp: int
534
+ value: int
535
+
536
+
537
+ class DatabaseUsersMetricsResource(BaseCoreApiModel):
538
+ total_connections: List[DatabaseUserTotalConnectionMetricResource]
539
+ cpu_usages: List[DatabaseUserCpuUsageMetricResource]
540
+
541
+
429
542
  class DatabaseUserUpdateRequest(BaseCoreApiModel):
430
543
  phpmyadmin_firewall_groups_ids: Optional[List[int]] = None
431
544
  password: Optional[constr(pattern=r"^[ -~]+$", min_length=24, max_length=255)] = (
@@ -459,6 +572,8 @@ class DomainRouterUpdateRequest(BaseCoreApiModel):
459
572
  security_txt_policy_id: Optional[int] = None
460
573
  firewall_groups_ids: Optional[List[int]] = None
461
574
  force_ssl: Optional[bool] = None
575
+ quic_enabled: Optional[bool] = None
576
+ is_standards_scan_enabled: Optional[bool] = None
462
577
 
463
578
 
464
579
  class EncryptionTypeEnum(StrEnum):
@@ -469,7 +584,7 @@ class EncryptionTypeEnum(StrEnum):
469
584
 
470
585
  class FpmPoolCreateRequest(BaseCoreApiModel):
471
586
  name: constr(pattern=r"^[a-z0-9-_]+$", min_length=1, max_length=64)
472
- version: str
587
+ version: constr(pattern=r"^[0-9]{1,2}\.[0-9]{1,2}$", min_length=3, max_length=4)
473
588
  unix_user_id: int
474
589
  max_children: int = 25
475
590
  max_requests: int = 20
@@ -844,9 +959,11 @@ class IpAddressFamilyEnum(StrEnum):
844
959
  IPV4 = "IPv4"
845
960
 
846
961
 
847
- class IpAddressProductTypeEnum(StrEnum):
848
- OUTGOING = "outgoing"
849
- INCOMING = "incoming"
962
+ class ProductTypeEnum(StrEnum):
963
+ NODE = "Node"
964
+ NODE_ADD_ON = "Node Add-On"
965
+ INCOMING_IP_ADDRESS = "Incoming IP Address"
966
+ OUTGOING_IP_ADDRESS = "Outgoing IP Address"
850
967
 
851
968
 
852
969
  class LanguageCodeEnum(StrEnum):
@@ -958,17 +1075,6 @@ class NodeAddOnCreateRequest(BaseCoreApiModel):
958
1075
  quantity: int
959
1076
 
960
1077
 
961
- class NodeAddOnProduct(BaseCoreApiModel):
962
- uuid: UUID4
963
- name: constr(pattern=r"^[a-zA-Z0-9 ]+$", min_length=1, max_length=64)
964
- memory_mib: Optional[int]
965
- cpu_cores: Optional[int]
966
- disk_gib: Optional[int]
967
- price: confloat(ge=0.0)
968
- period: constr(pattern=r"^[A-Z0-9]+$", min_length=2, max_length=2)
969
- currency: constr(pattern=r"^[A-Z]+$", min_length=3, max_length=3)
970
-
971
-
972
1078
  class NodeGroupEnum(StrEnum):
973
1079
  ADMIN = "Admin"
974
1080
  APACHE = "Apache"
@@ -1008,19 +1114,6 @@ class NodeMariadbGroupProperties(BaseCoreApiModel):
1008
1114
  is_master: bool
1009
1115
 
1010
1116
 
1011
- class NodeProduct(BaseCoreApiModel):
1012
- uuid: UUID4
1013
- name: constr(pattern=r"^[A-Z]+$", min_length=1, max_length=2)
1014
- memory_mib: int
1015
- cpu_cores: int
1016
- disk_gib: int
1017
- allow_upgrade_to: List[constr(pattern=r"^[A-Z]+$", min_length=1, max_length=2)]
1018
- allow_downgrade_to: List[constr(pattern=r"^[A-Z]+$", min_length=1, max_length=2)]
1019
- price: confloat(ge=0.0)
1020
- period: constr(pattern=r"^[A-Z0-9]+$", min_length=2, max_length=2)
1021
- currency: constr(pattern=r"^[A-Z]+$", min_length=3, max_length=3)
1022
-
1023
-
1024
1117
  class NodeRabbitmqGroupProperties(BaseCoreApiModel):
1025
1118
  is_master: bool
1026
1119
 
@@ -1100,6 +1193,10 @@ class ObjectModelNameEnum(StrEnum):
1100
1193
  CLUSTERS_OS_PROPERTIES = "ClustersOsProperties"
1101
1194
  PROJECT = "Project"
1102
1195
  PROJECT_ENVIRONMENT = "ProjectEnvironment"
1196
+ PRODUCT = "Product"
1197
+ TOMBSTONE = "Tombstone"
1198
+ MALWARE = "Malware"
1199
+ STANDARDS_SCAN = "StandardsScan"
1103
1200
 
1104
1201
 
1105
1202
  class PhpExtensionEnum(StrEnum):
@@ -1138,6 +1235,7 @@ class PhpSettings(BaseCoreApiModel):
1138
1235
  )
1139
1236
  )
1140
1237
  opcache_memory_consumption: conint(ge=192, le=1024) = 192
1238
+ opcache_interned_strings_buffer: conint(ge=8, le=4095) = 8
1141
1239
  max_execution_time: conint(ge=30, le=120) = 120
1142
1240
  max_file_uploads: conint(ge=100, le=1000) = 100
1143
1241
  memory_limit: conint(ge=256, le=4096) = 256
@@ -1160,6 +1258,7 @@ class FpmPoolPhpSettings(BaseCoreApiModel):
1160
1258
  constr(pattern=r"^[A-Z&~_ ]+$", min_length=1, max_length=255) | None
1161
1259
  ) = None
1162
1260
  opcache_memory_consumption: conint(ge=192, le=1024) | None = None
1261
+ opcache_interned_strings_buffer: int | None = None
1163
1262
  max_execution_time: conint(ge=30, le=120) | None = None
1164
1263
  max_file_uploads: conint(ge=100, le=1000) | None = None
1165
1264
  memory_limit: conint(ge=256, le=4096) | None = None
@@ -1214,7 +1313,7 @@ class RedisInstanceCreateRequest(BaseCoreApiModel):
1214
1313
  password: constr(pattern=r"^[a-zA-Z0-9]+$", min_length=24, max_length=255)
1215
1314
  memory_limit: conint(ge=8)
1216
1315
  max_databases: int = 16
1217
- eviction_policy: RedisEvictionPolicyEnum = RedisEvictionPolicyEnum.VOLATILE_LRU
1316
+ eviction_policy: RedisEvictionPolicyEnum = RedisEvictionPolicyEnum.ALLKEYS_LFU
1218
1317
 
1219
1318
 
1220
1319
  class RedisInstanceUpdateRequest(BaseCoreApiModel):
@@ -1289,6 +1388,7 @@ class SecurityTxtPolicyUpdateRequest(BaseCoreApiModel):
1289
1388
 
1290
1389
  class ServiceAccountGroupEnum(StrEnum):
1291
1390
  SECURITY_TXT_POLICY_SERVER = "Security TXT Policy Server"
1391
+ CARBON_TXT_SERVER = "Carbon TXT Server"
1292
1392
  LOAD_BALANCER = "Load Balancer"
1293
1393
  BORG = "Borg"
1294
1394
  MAIL_PROXY = "Mail Proxy"
@@ -1350,13 +1450,6 @@ class TemporaryFtpUserResource(BaseCoreApiModel):
1350
1450
  file_manager_url: AnyUrl
1351
1451
 
1352
1452
 
1353
- class TimeUnitEnum(StrEnum):
1354
- HOURLY = "hourly"
1355
- DAILY = "daily"
1356
- WEEKLY = "weekly"
1357
- MONTHLY = "monthly"
1358
-
1359
-
1360
1453
  class TokenTypeEnum(StrEnum):
1361
1454
  BEARER = "bearer"
1362
1455
 
@@ -1377,12 +1470,15 @@ class UnixUserCreateRequest(BaseCoreApiModel):
1377
1470
  password: Optional[constr(pattern=r"^[ -~]+$", min_length=24, max_length=255)]
1378
1471
  shell_name: ShellNameEnum = ShellNameEnum.BASH
1379
1472
  record_usage_files: bool = False
1380
- default_php_version: Optional[str] = None
1473
+ default_php_version: Optional[
1474
+ constr(pattern=r"^[0-9]{1,2}\.[0-9]{1,2}$", min_length=3, max_length=4)
1475
+ ] = None
1381
1476
  default_nodejs_version: Optional[constr(pattern=r"^[0-9]{1,2}\.[0-9]{1,2}$")] = None
1382
1477
  description: Optional[
1383
1478
  constr(pattern=r"^[a-zA-Z0-9-_ ]+$", min_length=1, max_length=255)
1384
1479
  ] = None
1385
1480
  shell_is_namespaced: bool = True
1481
+ create_borg_repository: bool = False
1386
1482
 
1387
1483
 
1388
1484
  class UnixUserHomeDirectoryEnum(StrEnum):
@@ -1399,7 +1495,9 @@ class UnixUserUpdateRequest(BaseCoreApiModel):
1399
1495
  )
1400
1496
  shell_name: Optional[ShellNameEnum] = None
1401
1497
  record_usage_files: Optional[bool] = None
1402
- default_php_version: Optional[str] = None
1498
+ default_php_version: Optional[
1499
+ constr(pattern=r"^[0-9]{1,2}\.[0-9]{1,2}$", min_length=3, max_length=4)
1500
+ ] = None
1403
1501
  default_nodejs_version: Optional[constr(pattern=r"^[0-9]{1,2}\.[0-9]{1,2}$")] = None
1404
1502
  description: Optional[
1405
1503
  constr(pattern=r"^[a-zA-Z0-9-_ ]+$", min_length=1, max_length=255)
@@ -1642,6 +1740,7 @@ class DatabaseCreateRequest(BaseCoreApiModel):
1642
1740
  cluster_id: int
1643
1741
  optimizing_enabled: bool = False
1644
1742
  backups_enabled: bool = True
1743
+ create_borg_repository: bool = False
1645
1744
 
1646
1745
 
1647
1746
  class DatabaseIncludes(BaseCoreApiModel):
@@ -1767,10 +1866,19 @@ class HealthResource(BaseCoreApiModel):
1767
1866
  status: HealthStatusEnum
1768
1867
 
1769
1868
 
1770
- class IpAddressProduct(BaseCoreApiModel):
1771
- uuid: UUID4
1869
+ class ProductResource(BaseCoreApiModel):
1870
+ id: int
1871
+ created_at: datetime
1872
+ updated_at: datetime
1873
+ external_id: UUID4
1772
1874
  name: constr(pattern=r"^[a-zA-Z0-9 ]+$", min_length=1, max_length=64)
1773
- type: IpAddressProductTypeEnum
1875
+ identifier: constr(pattern=r"^[a-zA-Z0-9- ]+$", min_length=1, max_length=64)
1876
+ type: ProductTypeEnum
1877
+ memory_mib: Optional[int]
1878
+ cpu_cores: Optional[int]
1879
+ disk_gib: Optional[int]
1880
+ allow_upgrade_to: List[str]
1881
+ allow_downgrade_to: List[str]
1774
1882
  price: confloat(ge=0.0)
1775
1883
  period: constr(pattern=r"^[A-Z0-9]+$", min_length=2, max_length=2)
1776
1884
  currency: constr(pattern=r"^[A-Z]+$", min_length=3, max_length=3)
@@ -1832,7 +1940,7 @@ class NodeResource(BaseCoreApiModel):
1832
1940
  created_at: datetime
1833
1941
  updated_at: datetime
1834
1942
  hostname: str
1835
- product: constr(pattern=r"^[A-Z]+$", min_length=1, max_length=2)
1943
+ product: constr(pattern=r"^[a-zA-Z0-9 ]+$", min_length=1, max_length=64)
1836
1944
  cluster_id: int
1837
1945
  groups: List[NodeGroupEnum]
1838
1946
  comment: Optional[
@@ -2067,7 +2175,9 @@ class BorgRepositoryResource(BaseCoreApiModel):
2067
2175
  keep_monthly: Optional[int]
2068
2176
  keep_yearly: Optional[int]
2069
2177
  unix_user_id: Optional[int]
2178
+ database_id: Optional[int]
2070
2179
  unix_id: int
2180
+ frequency: str
2071
2181
  deployment_status: DeploymentStatusEnum
2072
2182
  includes: BorgRepositoryIncludes
2073
2183
 
@@ -2180,7 +2290,7 @@ class FpmPoolResource(BaseCoreApiModel):
2180
2290
  updated_at: datetime
2181
2291
  cluster_id: int
2182
2292
  name: constr(pattern=r"^[a-z0-9-_]+$", min_length=1, max_length=64)
2183
- version: str
2293
+ version: constr(pattern=r"^[0-9]{1,2}\.[0-9]{1,2}$", min_length=3, max_length=4)
2184
2294
  unix_user_id: int
2185
2295
  max_children: int
2186
2296
  max_requests: int
@@ -2365,7 +2475,7 @@ class NodeAddOnResource(BaseCoreApiModel):
2365
2475
 
2366
2476
 
2367
2477
  class NodeCreateRequest(BaseCoreApiModel):
2368
- product: constr(pattern=r"^[A-Z]+$", min_length=1, max_length=2)
2478
+ product: constr(pattern=r"^[a-zA-Z0-9 ]+$", min_length=1, max_length=64)
2369
2479
  cluster_id: int
2370
2480
  groups: List[NodeGroupEnum]
2371
2481
  comment: Optional[
@@ -2504,6 +2614,7 @@ class BorgArchiveResource(BaseCoreApiModel):
2504
2614
  cluster_id: int
2505
2615
  borg_repository_id: int
2506
2616
  name: constr(pattern=r"^[a-zA-Z0-9-_]+$", min_length=1, max_length=64)
2617
+ is_manually_created: bool
2507
2618
  includes: BorgArchiveIncludes
2508
2619
 
2509
2620
 
@@ -2645,6 +2756,17 @@ class SimpleSpecificationsResource(RootModelCollectionMixin, RootCoreApiModel):
2645
2756
  root: List[str]
2646
2757
 
2647
2758
 
2759
+ class PolicyResultResource(BaseCoreApiModel):
2760
+ satisfied: bool
2761
+ object_id: Optional[int]
2762
+ results: Dict[str, "PolicyResultResource"]
2763
+
2764
+
2765
+ class PolicyResultsResource(BaseCoreApiModel):
2766
+ summary: str
2767
+ results: Dict[str, PolicyResultResource]
2768
+
2769
+
2648
2770
  class ConcreteSpecificationSatisfyResult(BaseCoreApiModel):
2649
2771
  satisfied: bool
2650
2772
  requirement: str
@@ -2805,7 +2927,7 @@ class ClusterLoadBalancingPropertiesIncludes(BaseCoreApiModel):
2805
2927
 
2806
2928
 
2807
2929
  class ClusterMariadbPropertiesCreateRequest(BaseCoreApiModel):
2808
- mariadb_version: str = "11.4"
2930
+ mariadb_version: Literal["11.8"] = "11.8"
2809
2931
  mariadb_backup_interval: conint(ge=1, le=24) = 24
2810
2932
  mariadb_backup_local_retention: conint(ge=1, le=24) = 3
2811
2933
 
@@ -2818,7 +2940,7 @@ class ClusterMariadbPropertiesResource(BaseCoreApiModel):
2818
2940
  id: int
2819
2941
  created_at: datetime
2820
2942
  updated_at: datetime
2821
- mariadb_version: str
2943
+ mariadb_version: constr(pattern=r"^[0-9]{1,2}\.[0-9]{1,2}$")
2822
2944
  mariadb_backup_interval: conint(ge=1, le=24)
2823
2945
  mariadb_backup_local_retention: conint(ge=1, le=24)
2824
2946
  cluster_id: int
@@ -3122,7 +3244,9 @@ class ClusterMeilisearchPropertiesUpdateRequest(BaseCoreApiModel):
3122
3244
 
3123
3245
 
3124
3246
  class ClusterPhpPropertiesCreateRequest(BaseCoreApiModel):
3125
- php_versions: List[str]
3247
+ php_versions: List[
3248
+ constr(pattern=r"^[0-9]{1,2}\.[0-9]{1,2}$", min_length=3, max_length=4)
3249
+ ]
3126
3250
  custom_php_modules_names: List[PhpExtensionEnum] = Field(
3127
3251
  [],
3128
3252
  )
@@ -3135,7 +3259,9 @@ class ClusterPhpPropertiesResource(BaseCoreApiModel):
3135
3259
  id: int
3136
3260
  created_at: datetime
3137
3261
  updated_at: datetime
3138
- php_versions: List[str]
3262
+ php_versions: List[
3263
+ constr(pattern=r"^[0-9]{1,2}\.[0-9]{1,2}$", min_length=3, max_length=4)
3264
+ ]
3139
3265
  custom_php_modules_names: List[PhpExtensionEnum]
3140
3266
  php_settings: PhpSettings
3141
3267
  php_ioncube_enabled: bool
@@ -3146,7 +3272,9 @@ class ClusterPhpPropertiesResource(BaseCoreApiModel):
3146
3272
 
3147
3273
 
3148
3274
  class ClusterPhpPropertiesUpdateRequest(BaseCoreApiModel):
3149
- php_versions: Optional[List[str]] = None
3275
+ php_versions: Optional[
3276
+ List[constr(pattern=r"^[0-9]{1,2}\.[0-9]{1,2}$", min_length=3, max_length=4)]
3277
+ ] = None
3150
3278
  custom_php_modules_names: Optional[List[PhpExtensionEnum]] = None
3151
3279
  php_settings: Optional[PhpSettings] = None
3152
3280
  php_ioncube_enabled: Optional[bool] = None
@@ -3270,10 +3398,10 @@ class DatabaseInnodbReport(BaseCoreApiModel):
3270
3398
 
3271
3399
  class FpmPoolChildStatus(BaseCoreApiModel):
3272
3400
  current_request_duration: int
3273
- http_method: HTTPMethod
3401
+ http_method: str
3274
3402
  http_uri: str
3275
3403
  basic_authentication_user: Optional[str]
3276
- script: str
3404
+ script: Optional[str]
3277
3405
 
3278
3406
 
3279
3407
  class FpmPoolNodeStatus(BaseCoreApiModel):
@@ -3292,6 +3420,7 @@ class BasicAuthenticationRealmsSearchRequest(BaseCoreApiModel):
3292
3420
  class BorgArchivesSearchRequest(BaseCoreApiModel):
3293
3421
  cluster_id: Optional[int] = None
3294
3422
  borg_repository_id: Optional[int] = None
3423
+ is_manually_created: Optional[bool] = None
3295
3424
  name: Optional[str] = None
3296
3425
 
3297
3426
 
@@ -3407,6 +3536,8 @@ class CronsSearchRequest(BaseCoreApiModel):
3407
3536
  email_address: Optional[EmailStr] = None
3408
3537
  locking_enabled: Optional[bool] = None
3409
3538
  is_active: Optional[bool] = None
3539
+ command: Optional[str] = None
3540
+ schedule: Optional[str] = None
3410
3541
 
3411
3542
 
3412
3543
  class CustomConfigsSearchRequest(BaseCoreApiModel):
@@ -3431,6 +3562,9 @@ class DaemonsSearchRequest(BaseCoreApiModel):
3431
3562
 
3432
3563
  class DatabaseUsersSearchRequest(BaseCoreApiModel):
3433
3564
  phpmyadmin_firewall_group_id: Optional[int] = None
3565
+ name: Optional[str] = None
3566
+ server_software_name: Optional[DatabaseServerSoftwareNameEnum] = None
3567
+ cluster_id: Optional[int] = None
3434
3568
 
3435
3569
 
3436
3570
  class DatabasesSearchRequest(BaseCoreApiModel):
@@ -3453,6 +3587,8 @@ class DomainRoutersSearchRequest(BaseCoreApiModel):
3453
3587
  security_txt_policy_id: Optional[int] = None
3454
3588
  firewall_group_id: Optional[int] = None
3455
3589
  force_ssl: Optional[bool] = None
3590
+ quic_enabled: Optional[bool] = None
3591
+ is_standards_scan_enabled: Optional[bool] = None
3456
3592
 
3457
3593
 
3458
3594
  class FirewallGroupsSearchRequest(BaseCoreApiModel):
@@ -3614,6 +3750,8 @@ class DomainRouterResource(BaseCoreApiModel):
3614
3750
  security_txt_policy_id: Optional[int]
3615
3751
  firewall_groups_ids: Optional[List[int]]
3616
3752
  force_ssl: bool
3753
+ quic_enabled: bool
3754
+ is_standards_scan_enabled: bool
3617
3755
  deployment_status: DeploymentStatusEnum
3618
3756
  includes: DomainRouterIncludes
3619
3757
 
@@ -3683,7 +3821,9 @@ class UnixUsersSearchRequest(BaseCoreApiModel):
3683
3821
  cluster_id: Optional[int] = None
3684
3822
  shell_name: Optional[ShellNameEnum] = None
3685
3823
  record_usage_files: Optional[bool] = None
3686
- default_php_version: Optional[str] = None
3824
+ default_php_version: Optional[
3825
+ constr(pattern=r"^[0-9]{1,2}\.[0-9]{1,2}$", min_length=3, max_length=4)
3826
+ ] = None
3687
3827
  default_nodejs_version: Optional[str] = None
3688
3828
  description: Optional[str] = None
3689
3829
 
@@ -3861,6 +4001,11 @@ class FpmPoolUpdateSettingPairUploadMaxFilesizeRequest(BaseCoreApiModel):
3861
4001
  value: conint(ge=32, le=256)
3862
4002
 
3863
4003
 
4004
+ class FpmPoolUpdateSettingPairOpcacheInternedStringsBufferRequest(BaseCoreApiModel):
4005
+ setting: Literal["opcache_interned_strings_buffer"]
4006
+ value: conint(ge=8, le=4095)
4007
+
4008
+
3864
4009
  class FpmPoolUpdateSettingPairRequest(RootCoreApiModel):
3865
4010
  root: (
3866
4011
  FpmPoolUpdateSettingPairApcEnableCliRequest
@@ -3869,6 +4014,7 @@ class FpmPoolUpdateSettingPairRequest(RootCoreApiModel):
3869
4014
  | FpmPoolUpdateSettingPairShortOpenTagRequest
3870
4015
  | FpmPoolUpdateSettingPairErrorReportingRequest
3871
4016
  | FpmPoolUpdateSettingPairOpcacheMemoryConsumptionRequest
4017
+ | FpmPoolUpdateSettingPairOpcacheInternedStringsBufferRequest
3872
4018
  | FpmPoolUpdateSettingPairSessionGcMaxlifetimeRequest
3873
4019
  | FpmPoolUpdateSettingPairMaxExecutionTimeRequest
3874
4020
  | FpmPoolUpdateSettingPairMaxFileUploadsRequest
@@ -3885,6 +4031,127 @@ class FpmPoolUpdateSettingsRequest(RootCoreApiModel):
3885
4031
  root: list[FpmPoolUpdateSettingPairRequest]
3886
4032
 
3887
4033
 
4034
+ class StandardsScanVerdictEnum(StrEnum):
4035
+ GREAT = "great"
4036
+ GOOD = "good"
4037
+ FINE = "fine"
4038
+ BAD = "bad"
4039
+
4040
+
4041
+ class StandardsScanCheckStatusEnum(StrEnum):
4042
+ REGISTERING_DOMAINS = "registering_domains"
4043
+ TESTING_DOMAINS = "testing_domains"
4044
+ GENERATING_REPORT = "generating_report"
4045
+ COMPLETED = "completed"
4046
+ CANCELLED = "cancelled"
4047
+ REGISTRATION_FAILED = "registration_failed"
4048
+
4049
+
4050
+ class StandardsScanDnssecStatusEnum(StrEnum):
4051
+ SIGNED = "signed"
4052
+ NOT_CONFIGURED = "not_configured"
4053
+ INVALID_SIGNATURE = "invalid_signature"
4054
+ UNSUPPORTED_ALGORITHM = "unsupported_algorithm"
4055
+ RESOLVER_ERROR = "resolver_error"
4056
+ DNS_ERROR = "dns_error"
4057
+
4058
+
4059
+ class StandardsScanDomainCheckStatusEnum(StrEnum):
4060
+ COMPLETED = "completed"
4061
+ RESULTS_UNAVAILABLE = "results_unavailable"
4062
+
4063
+
4064
+ class StandardsScanHttpsRedirectEnum(StrEnum):
4065
+ ENFORCED = "enforced"
4066
+ NOT_ENFORCED = "not_enforced"
4067
+ HTTP_NOT_AVAILABLE = "http_not_available"
4068
+ HTTPS_NOT_AVAILABLE = "https_not_available"
4069
+
4070
+
4071
+ class StandardsScanScores(BaseCoreApiModel):
4072
+ great: float
4073
+ good: float
4074
+ fine: float
4075
+ bad: float
4076
+
4077
+
4078
+ class StandardsScanNameserverAddresses(BaseCoreApiModel):
4079
+ ipv4: Dict[str, bool]
4080
+ ipv6: Dict[str, bool]
4081
+
4082
+
4083
+ class StandardsScanReachability(BaseCoreApiModel):
4084
+ nameserver_reachable: Dict[str, StandardsScanNameserverAddresses]
4085
+ website_ipv4_reachable: Dict[str, Optional[bool]]
4086
+ website_ipv6_reachable: Dict[str, Optional[bool]]
4087
+ verdict: StandardsScanVerdictEnum
4088
+
4089
+
4090
+ class StandardsScanDns(BaseCoreApiModel):
4091
+ dnssec_status: StandardsScanDnssecStatusEnum
4092
+ caa_enabled: bool
4093
+ verdict: StandardsScanVerdictEnum
4094
+
4095
+
4096
+ class StandardsScanHttps(BaseCoreApiModel):
4097
+ ipv4_enabled: bool
4098
+ ipv6_enabled: bool
4099
+ redirect: StandardsScanHttpsRedirectEnum
4100
+ hsts: bool
4101
+ verdict: StandardsScanVerdictEnum
4102
+
4103
+
4104
+ class StandardsScanSecurityTxt(BaseCoreApiModel):
4105
+ enabled: bool
4106
+ verdict: StandardsScanVerdictEnum
4107
+
4108
+
4109
+ class StandardsScanSecurityHeaders(BaseCoreApiModel):
4110
+ x_frame_options_enabled: bool
4111
+ x_content_type_options_enabled: bool
4112
+ content_security_policy_enabled: bool
4113
+ referrer_policy_enabled: bool
4114
+ verdict: StandardsScanVerdictEnum
4115
+
4116
+
4117
+ class StandardsScanDomainResult(BaseCoreApiModel):
4118
+ domain: str
4119
+ check_status: StandardsScanDomainCheckStatusEnum
4120
+ verdict: StandardsScanVerdictEnum
4121
+ scores: StandardsScanScores
4122
+ reachability: StandardsScanReachability
4123
+ dns: StandardsScanDns
4124
+ https: StandardsScanHttps
4125
+ security_txt: StandardsScanSecurityTxt
4126
+ security_headers: StandardsScanSecurityHeaders
4127
+
4128
+
4129
+ class StandardsScanResults(BaseCoreApiModel):
4130
+ check_status: StandardsScanCheckStatusEnum
4131
+ scores: Optional[StandardsScanScores] = None
4132
+ domains: List[StandardsScanDomainResult]
4133
+
4134
+
4135
+ class StandardsScanIncludes(BaseCoreApiModel):
4136
+ cluster: Optional[ClusterResource]
4137
+
4138
+
4139
+ class StandardsScanResource(BaseCoreApiModel):
4140
+ id: int
4141
+ created_at: datetime
4142
+ updated_at: datetime
4143
+ cluster_id: int
4144
+ started_at: datetime
4145
+ domain_routers_ids: List[int]
4146
+ deployment_status: DeploymentStatusEnum
4147
+ includes: StandardsScanIncludes
4148
+
4149
+
4150
+ class StandardsScansSearchRequest(BaseCoreApiModel):
4151
+ cluster_id: Optional[int] = None
4152
+
4153
+
3888
4154
  NestedPathsDict.model_rebuild()
3889
4155
  CompositeSpecificationSatisfyResult.model_rebuild()
3890
4156
  CompositeSpecificationSatisfyResultResource.model_rebuild()
4157
+ PolicyResultResource.model_rebuild()
@@ -46,9 +46,12 @@ from . import (
46
46
  mail_accounts,
47
47
  fpm_pools,
48
48
  mail_domains,
49
+ standards_scans,
50
+ available_versions,
49
51
  )
50
52
 
51
53
  __all__ = [
54
+ "available_versions",
52
55
  "basic_authentication_realms",
53
56
  "borg_archives",
54
57
  "borg_repositories",
@@ -90,6 +93,7 @@ __all__ = [
90
93
  "security_txt_policies",
91
94
  "regions",
92
95
  "ssh_keys",
96
+ "standards_scans",
93
97
  "task_collections",
94
98
  "unix_users",
95
99
  "url_redirects",
@@ -0,0 +1,51 @@
1
+ from cyberfusion.CoreApiClient import models
2
+
3
+ from cyberfusion.CoreApiClient._helpers import construct_includes_query_parameter
4
+ from cyberfusion.CoreApiClient.http import DtoResponse
5
+ from cyberfusion.CoreApiClient.interfaces import Resource
6
+
7
+
8
+ class AvailableVersions(Resource):
9
+ def list_available_nodejs_versions(
10
+ self,
11
+ *,
12
+ includes: list[str] | None = None,
13
+ ) -> DtoResponse[list[models.NodejsVersionResource]]:
14
+ local_responses = self.api_connector.send_or_fail_with_auto_pagination(
15
+ "GET",
16
+ "/api/v1/available-versions/nodejs",
17
+ data=None,
18
+ query_parameters=construct_includes_query_parameter(includes),
19
+ )
20
+
21
+ return DtoResponse.from_responses(local_responses, models.NodejsVersionResource)
22
+
23
+ def list_available_php_versions(
24
+ self,
25
+ *,
26
+ includes: list[str] | None = None,
27
+ ) -> DtoResponse[list[models.PhpVersionResource]]:
28
+ local_responses = self.api_connector.send_or_fail_with_auto_pagination(
29
+ "GET",
30
+ "/api/v1/available-versions/php",
31
+ data=None,
32
+ query_parameters=construct_includes_query_parameter(includes),
33
+ )
34
+
35
+ return DtoResponse.from_responses(local_responses, models.PhpVersionResource)
36
+
37
+ def list_available_wordpress_versions(
38
+ self,
39
+ *,
40
+ includes: list[str] | None = None,
41
+ ) -> DtoResponse[list[models.WordpressVersionResource]]:
42
+ local_responses = self.api_connector.send_or_fail_with_auto_pagination(
43
+ "GET",
44
+ "/api/v1/available-versions/wordpress",
45
+ data=None,
46
+ query_parameters=construct_includes_query_parameter(includes),
47
+ )
48
+
49
+ return DtoResponse.from_responses(
50
+ local_responses, models.WordpressVersionResource
51
+ )
@@ -1,4 +1,5 @@
1
1
  from cyberfusion.CoreApiClient import models
2
+ from datetime import datetime
2
3
  from typing import Optional
3
4
 
4
5
  from cyberfusion.CoreApiClient._helpers import construct_includes_query_parameter
@@ -138,45 +139,9 @@ class Clusters(Resource):
138
139
 
139
140
  return DtoResponse.from_responses(local_response, models.TaskCollectionResource)
140
141
 
141
- def enable_l3_ddos_protection_for_ip_address(
142
- self,
143
- *,
144
- id_: int,
145
- ip_address: str,
146
- callback_url: Optional[str] = None,
147
- ) -> DtoResponse[models.TaskCollectionResource]:
148
- local_response = self.api_connector.send_or_fail(
149
- "POST",
150
- f"/api/v1/clusters/{id_}/ip-addresses/{ip_address}/l3-ddos-protection",
151
- data=None,
152
- query_parameters={
153
- "callback_url": callback_url,
154
- },
155
- )
156
-
157
- return DtoResponse.from_responses(local_response, models.TaskCollectionResource)
158
-
159
- def disable_l3_ddos_protection_for_ip_address(
160
- self,
161
- *,
162
- id_: int,
163
- ip_address: str,
164
- callback_url: Optional[str] = None,
165
- ) -> DtoResponse[models.TaskCollectionResource]:
166
- local_response = self.api_connector.send_or_fail(
167
- "DELETE",
168
- f"/api/v1/clusters/{id_}/ip-addresses/{ip_address}/l3-ddos-protection",
169
- data=None,
170
- query_parameters={
171
- "callback_url": callback_url,
172
- },
173
- )
174
-
175
- return DtoResponse.from_responses(local_response, models.TaskCollectionResource)
176
-
177
142
  def get_ip_addresses_products_for_clusters(
178
143
  self,
179
- ) -> DtoResponse[list[models.IpAddressProduct]]:
144
+ ) -> DtoResponse[list[models.ProductResource]]:
180
145
  local_response = self.api_connector.send_or_fail(
181
146
  "GET",
182
147
  "/api/v1/clusters/ip-addresses/products",
@@ -184,7 +149,7 @@ class Clusters(Resource):
184
149
  query_parameters={},
185
150
  )
186
151
 
187
- return DtoResponse.from_responses(local_response, models.IpAddressProduct)
152
+ return DtoResponse.from_responses(local_response, models.ProductResource)
188
153
 
189
154
  def list_unix_users_home_directory_usages(
190
155
  self,
@@ -1478,6 +1443,46 @@ class Clusters(Resource):
1478
1443
  local_response, models.ClusterRabbitmqPropertiesResource
1479
1444
  )
1480
1445
 
1446
+ def read_daemons_metrics_experimental(
1447
+ self,
1448
+ *,
1449
+ id_: int,
1450
+ start_timestamp: datetime,
1451
+ end_timestamp: datetime,
1452
+ ) -> DtoResponse[models.DaemonsMetricsResource]:
1453
+ local_response = self.api_connector.send_or_fail(
1454
+ "GET",
1455
+ f"/api/v1/clusters/{id_}/metrics/daemons",
1456
+ data=None,
1457
+ query_parameters={
1458
+ "start_timestamp": start_timestamp,
1459
+ "end_timestamp": end_timestamp,
1460
+ },
1461
+ )
1462
+
1463
+ return DtoResponse.from_responses(local_response, models.DaemonsMetricsResource)
1464
+
1465
+ def read_database_users_metrics_experimental(
1466
+ self,
1467
+ *,
1468
+ id_: int,
1469
+ start_timestamp: datetime,
1470
+ end_timestamp: datetime,
1471
+ ) -> DtoResponse[models.DatabaseUsersMetricsResource]:
1472
+ local_response = self.api_connector.send_or_fail(
1473
+ "GET",
1474
+ f"/api/v1/clusters/{id_}/metrics/database-users",
1475
+ data=None,
1476
+ query_parameters={
1477
+ "start_timestamp": start_timestamp,
1478
+ "end_timestamp": end_timestamp,
1479
+ },
1480
+ )
1481
+
1482
+ return DtoResponse.from_responses(
1483
+ local_response, models.DatabaseUsersMetricsResource
1484
+ )
1485
+
1481
1486
  def generate_innodb_report(
1482
1487
  self,
1483
1488
  *,
@@ -294,3 +294,95 @@ class Cmses(Resource):
294
294
  )
295
295
 
296
296
  return DtoResponse.from_responses(local_response, models.DetailMessage)
297
+
298
+ def configure_redis(
299
+ self,
300
+ request: models.CmsConfigureRedisRequest,
301
+ *,
302
+ id_: int,
303
+ callback_url: Optional[str] = None,
304
+ ) -> DtoResponse[models.TaskCollectionResource]:
305
+ local_response = self.api_connector.send_or_fail(
306
+ "POST",
307
+ f"/api/v1/cmses/{id_}/configure/redis",
308
+ data=request.model_dump(exclude_unset=True),
309
+ query_parameters={
310
+ "callback_url": callback_url,
311
+ },
312
+ )
313
+
314
+ return DtoResponse.from_responses(local_response, models.TaskCollectionResource)
315
+
316
+ def auto_install_wordpress(
317
+ self,
318
+ request: models.CmsAutoInstallWordpressRequest,
319
+ *,
320
+ id_: int,
321
+ callback_url: Optional[str] = None,
322
+ ) -> DtoResponse[models.TaskCollectionResource]:
323
+ local_response = self.api_connector.send_or_fail(
324
+ "POST",
325
+ f"/api/v1/cmses/{id_}/install/wordpress/auto",
326
+ data=request.model_dump(exclude_unset=True),
327
+ query_parameters={
328
+ "callback_url": callback_url,
329
+ },
330
+ )
331
+
332
+ return DtoResponse.from_responses(local_response, models.TaskCollectionResource)
333
+
334
+ def get_recommended_cms_database_indexes(
335
+ self,
336
+ *,
337
+ id_: int,
338
+ ) -> DtoResponse[list[models.CmsDatabaseIndex]]:
339
+ local_response = self.api_connector.send_or_fail(
340
+ "GET",
341
+ f"/api/v1/cmses/{id_}/database-indexes",
342
+ data=None,
343
+ query_parameters={},
344
+ )
345
+
346
+ return DtoResponse.from_responses(local_response, models.CmsDatabaseIndex)
347
+
348
+ def create_recommended_cms_database_indexes(
349
+ self,
350
+ *,
351
+ id_: int,
352
+ ) -> DtoResponse[list[models.CmsDatabaseIndex]]:
353
+ local_response = self.api_connector.send_or_fail(
354
+ "POST",
355
+ f"/api/v1/cmses/{id_}/database-indexes",
356
+ data=None,
357
+ query_parameters={},
358
+ )
359
+
360
+ return DtoResponse.from_responses(local_response, models.CmsDatabaseIndex)
361
+
362
+ def get_cms_woocommerce_hpos(
363
+ self,
364
+ *,
365
+ id_: int,
366
+ ) -> DtoResponse[models.CmsWoocommerceHpos]:
367
+ local_response = self.api_connector.send_or_fail(
368
+ "GET",
369
+ f"/api/v1/cmses/{id_}/hpos",
370
+ data=None,
371
+ query_parameters={},
372
+ )
373
+
374
+ return DtoResponse.from_responses(local_response, models.CmsWoocommerceHpos)
375
+
376
+ def generate_cms_one_time_login(
377
+ self,
378
+ *,
379
+ id_: int,
380
+ ) -> DtoResponse[models.CmsOneTimeLogin]:
381
+ local_response = self.api_connector.send_or_fail(
382
+ "POST",
383
+ f"/api/v1/cmses/{id_}/one-time-login",
384
+ data=None,
385
+ query_parameters={},
386
+ )
387
+
388
+ return DtoResponse.from_responses(local_response, models.CmsOneTimeLogin)
@@ -94,7 +94,7 @@ class Customers(Resource):
94
94
 
95
95
  def get_ip_addresses_products_for_customers(
96
96
  self,
97
- ) -> DtoResponse[list[models.IpAddressProduct]]:
97
+ ) -> DtoResponse[list[models.ProductResource]]:
98
98
  local_response = self.api_connector.send_or_fail(
99
99
  "GET",
100
100
  "/api/v1/customers/ip-addresses/products",
@@ -102,4 +102,4 @@ class Customers(Resource):
102
102
  query_parameters={},
103
103
  )
104
104
 
105
- return DtoResponse.from_responses(local_response, models.IpAddressProduct)
105
+ return DtoResponse.from_responses(local_response, models.ProductResource)
@@ -1,4 +1,5 @@
1
1
  from cyberfusion.CoreApiClient import models
2
+ from datetime import datetime
2
3
  from typing import Optional
3
4
 
4
5
  from cyberfusion.CoreApiClient._helpers import construct_includes_query_parameter
@@ -98,6 +99,25 @@ class Daemons(Resource):
98
99
 
99
100
  return DtoResponse.from_responses(local_response, models.TaskCollectionResource)
100
101
 
102
+ def read_daemon_metrics_experimental(
103
+ self,
104
+ *,
105
+ id_: int,
106
+ start_timestamp: datetime,
107
+ end_timestamp: datetime,
108
+ ) -> DtoResponse[models.DaemonsMetricsResource]:
109
+ local_response = self.api_connector.send_or_fail(
110
+ "GET",
111
+ f"/api/v1/daemons/{id_}/metrics",
112
+ data=None,
113
+ query_parameters={
114
+ "start_timestamp": start_timestamp,
115
+ "end_timestamp": end_timestamp,
116
+ },
117
+ )
118
+
119
+ return DtoResponse.from_responses(local_response, models.DaemonsMetricsResource)
120
+
101
121
  def list_logs(
102
122
  self,
103
123
  *,
@@ -1,4 +1,5 @@
1
1
  from cyberfusion.CoreApiClient import models
2
+ from datetime import datetime
2
3
  from cyberfusion.CoreApiClient._helpers import construct_includes_query_parameter
3
4
  from cyberfusion.CoreApiClient.http import DtoResponse
4
5
  from cyberfusion.CoreApiClient.interfaces import Resource
@@ -81,3 +82,24 @@ class DatabaseUsers(Resource):
81
82
  )
82
83
 
83
84
  return DtoResponse.from_responses(local_response, models.DetailMessage)
85
+
86
+ def read_database_user_metrics(
87
+ self,
88
+ *,
89
+ id_: int,
90
+ start_timestamp: datetime,
91
+ end_timestamp: datetime,
92
+ ) -> DtoResponse[models.DatabaseUsersMetricsResource]:
93
+ local_response = self.api_connector.send_or_fail(
94
+ "GET",
95
+ f"/api/v1/database-users/{id_}/metrics",
96
+ data=None,
97
+ query_parameters={
98
+ "start_timestamp": start_timestamp,
99
+ "end_timestamp": end_timestamp,
100
+ },
101
+ )
102
+
103
+ return DtoResponse.from_responses(
104
+ local_response, models.DatabaseUsersMetricsResource
105
+ )
@@ -45,12 +45,12 @@ class NodeAddOns(Resource):
45
45
 
46
46
  def get_node_add_on_products(
47
47
  self,
48
- ) -> DtoResponse[list[models.NodeAddOnProduct]]:
48
+ ) -> DtoResponse[list[models.ProductResource]]:
49
49
  local_response = self.api_connector.send_or_fail(
50
50
  "GET", "/api/v1/node-add-ons/products", data=None, query_parameters={}
51
51
  )
52
52
 
53
- return DtoResponse.from_responses(local_response, models.NodeAddOnProduct)
53
+ return DtoResponse.from_responses(local_response, models.ProductResource)
54
54
 
55
55
  def read_node_add_on(
56
56
  self,
@@ -46,12 +46,12 @@ class Nodes(Resource):
46
46
 
47
47
  def get_node_products(
48
48
  self,
49
- ) -> DtoResponse[list[models.NodeProduct]]:
49
+ ) -> DtoResponse[list[models.ProductResource]]:
50
50
  local_response = self.api_connector.send_or_fail(
51
51
  "GET", "/api/v1/nodes/products", data=None, query_parameters={}
52
52
  )
53
53
 
54
- return DtoResponse.from_responses(local_response, models.NodeProduct)
54
+ return DtoResponse.from_responses(local_response, models.ProductResource)
55
55
 
56
56
  def read_node(
57
57
  self,
@@ -0,0 +1,56 @@
1
+ from cyberfusion.CoreApiClient import models
2
+
3
+ from cyberfusion.CoreApiClient._helpers import construct_includes_query_parameter
4
+ from cyberfusion.CoreApiClient.http import DtoResponse
5
+ from cyberfusion.CoreApiClient.interfaces import Resource
6
+
7
+
8
+ class StandardsScans(Resource):
9
+ def list_standards_scans(
10
+ self,
11
+ *,
12
+ include_filters: models.StandardsScansSearchRequest | None = None,
13
+ includes: list[str] | None = None,
14
+ ) -> DtoResponse[list[models.StandardsScanResource]]:
15
+ local_responses = self.api_connector.send_or_fail_with_auto_pagination(
16
+ "GET",
17
+ "/api/v1/standards-scans",
18
+ data=None,
19
+ query_parameters=(
20
+ include_filters.model_dump(exclude_unset=True)
21
+ if include_filters
22
+ else {}
23
+ )
24
+ | construct_includes_query_parameter(includes),
25
+ )
26
+
27
+ return DtoResponse.from_responses(local_responses, models.StandardsScanResource)
28
+
29
+ def read_standards_scan(
30
+ self,
31
+ *,
32
+ id_: int,
33
+ includes: list[str] | None = None,
34
+ ) -> DtoResponse[models.StandardsScanResource]:
35
+ local_response = self.api_connector.send_or_fail(
36
+ "GET",
37
+ f"/api/v1/standards-scans/{id_}",
38
+ data=None,
39
+ query_parameters=construct_includes_query_parameter(includes),
40
+ )
41
+
42
+ return DtoResponse.from_responses(local_response, models.StandardsScanResource)
43
+
44
+ def read_standards_scan_results(
45
+ self,
46
+ *,
47
+ id_: int,
48
+ ) -> DtoResponse[models.StandardsScanResults]:
49
+ local_response = self.api_connector.send_or_fail(
50
+ "GET",
51
+ f"/api/v1/standards-scans/{id_}/results",
52
+ data=None,
53
+ query_parameters={},
54
+ )
55
+
56
+ return DtoResponse.from_responses(local_response, models.StandardsScanResults)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python3-core-api-client
3
- Version: 7.0
3
+ Version: 8.0
4
4
  Summary: Python client for Core API.
5
5
  Author-email: Cyberfusion <support@cyberfusion.io>
6
6
  Project-URL: Source, https://github.com/CyberfusionIO/python3-core-api-client
@@ -13,7 +13,7 @@ Requires-Dist: pydantic[email]==2.12.5
13
13
 
14
14
  Python client for Core API.
15
15
 
16
- This client was built for and tested on the **1.267.0** version of the API.
16
+ This client was built for and tested on the **1.273.0** version of the API.
17
17
 
18
18
  ## Support
19
19
 
@@ -1,26 +1,27 @@
1
1
  cyberfusion/CoreApiClient/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  cyberfusion/CoreApiClient/_encoders.py,sha256=Cf52zbE5vs4WYXRNvFPt9bBo4TV-pOyCLa1IImYnaJU,467
3
3
  cyberfusion/CoreApiClient/_helpers.py,sha256=QZ5OsQB_THFyKOyplR3bbdnVI1YlieiQF2imMOzc5So,241
4
- cyberfusion/CoreApiClient/connector.py,sha256=qjo7VkMgwlBWzLYMNoCxYRvafBLeQLK-J52hXI6aphM,13664
4
+ cyberfusion/CoreApiClient/connector.py,sha256=SLwDSa3fjLJnGx4FUNTvsm5Yt2wBeslMe6fl6FDlQkc,13997
5
5
  cyberfusion/CoreApiClient/exceptions.py,sha256=fNxPtzVL4SzPiVNZmBTu1l8D57dkCxMxflyIXDPLE4Q,204
6
6
  cyberfusion/CoreApiClient/http.py,sha256=I0eNtlqZ1cvhDCL7nJUCUxnV0MmLckNnZoMLj4ot-bk,1577
7
7
  cyberfusion/CoreApiClient/interfaces.py,sha256=P0wCbmSNEpB-eF49PHudc_qXM4blIXm4TsD2AB0z_7Q,269
8
- cyberfusion/CoreApiClient/models.py,sha256=Pg2AGPQuuU3a-o4dbW_nfqdCkeBpMkwF4RO18BORFCM,113483
9
- cyberfusion/CoreApiClient/resources/__init__.py,sha256=TLVfbm4Cs744SR6L_HN1BrH2-yUP9DlHl7XL5BN5oVg,1891
8
+ cyberfusion/CoreApiClient/models.py,sha256=cKhwMPMDBBnQSBfpk-SotailzYpp9GNA2xNZYQbFqP0,120869
9
+ cyberfusion/CoreApiClient/resources/__init__.py,sha256=Y2MlLaTGVoqy0uDCZTUZdTML2KniON-rfb3nSzs2RRQ,1985
10
+ cyberfusion/CoreApiClient/resources/available_versions.py,sha256=vzsTL0j5oaG84_5crC29N3gCMnRvw49qMXuEwpywUCk,1838
10
11
  cyberfusion/CoreApiClient/resources/basic_authentication_realms.py,sha256=XRkECp58sdER3be7z7GON-GO9-zvVk2L1MzeJAdNoDY,3176
11
12
  cyberfusion/CoreApiClient/resources/borg_archives.py,sha256=asHM1dYVEFOB17EzhM7rF39uHAq2FZ5veMJLcsVsHLA,4130
12
13
  cyberfusion/CoreApiClient/resources/borg_repositories.py,sha256=QgOTJBqB3R1Nvi-7thi-CgYIMuGrgJQAzx1MPrfM-yI,4373
13
14
  cyberfusion/CoreApiClient/resources/certificate_managers.py,sha256=U6mfeBRg4d5Hza1QcXkgWqNYakiT_dHp_L_I41tHEeQ,3440
14
15
  cyberfusion/CoreApiClient/resources/certificates.py,sha256=5MPfeMu6Wdvawz7l5EwPjm2kDdACA5PvASbRBzKeJWE,2251
15
- cyberfusion/CoreApiClient/resources/clusters.py,sha256=hZG9zcxRdn85ig6lSXvOJZRInzDwtPr-TqLOLkln_UI,51627
16
- cyberfusion/CoreApiClient/resources/cmses.py,sha256=SDauYQ3YPXORiv_PCVMmDyQDaAnZZ7n3sED8AzYhFPA,9234
16
+ cyberfusion/CoreApiClient/resources/clusters.py,sha256=0Rlbm4nGhGMTz-pj-ROfIcKyt__98nRpqaGpkWWpCXM,51732
17
+ cyberfusion/CoreApiClient/resources/cmses.py,sha256=G28flYuBmF1LN2cTJgkP3pWTy3DQquRGPUXaLA2LQlE,12096
17
18
  cyberfusion/CoreApiClient/resources/crons.py,sha256=NmWdqk6cArOjpw88JmsIB6l9PdEUGbmTd2kS-xuF6wY,2578
18
19
  cyberfusion/CoreApiClient/resources/custom_config_snippets.py,sha256=EZgPGsd9sjeBfEE2kobhvMf79N4stQAzAaIxHroS1UI,3185
19
20
  cyberfusion/CoreApiClient/resources/custom_configs.py,sha256=eR5n88LYk4Cvjsb36q6vZ03MYXgG38T0IlQJvi_sbCE,2801
20
- cyberfusion/CoreApiClient/resources/customers.py,sha256=aSMCgbgwh55mqHFvB1h_RI7dyLehhIyRiEL5w_QwwIE,3456
21
- cyberfusion/CoreApiClient/resources/daemons.py,sha256=BWC3SU-NqG9YXOE_GSYHFXkZlBvSjzASwWpKZm0qM5g,3707
21
+ cyberfusion/CoreApiClient/resources/customers.py,sha256=VA2zIwYCBZ785hujQLuQJouDMGIKfMhtDAt8HhY7mXI,3454
22
+ cyberfusion/CoreApiClient/resources/daemons.py,sha256=ZlPU67pgROZy9nXHjpu31oi0i_PM0N8ZtJL4ZufGvJg,4336
22
23
  cyberfusion/CoreApiClient/resources/database_user_grants.py,sha256=7_a91kk8TN7sSO70aGJD2JBUT9-Dc-Z4Tp5VBg5h-Vo,1911
23
- cyberfusion/CoreApiClient/resources/database_users.py,sha256=BX4LbCiezoF3rKZlM2mYjJgV6vHUrINRUFPs6Bs3w9k,2800
24
+ cyberfusion/CoreApiClient/resources/database_users.py,sha256=qo7FKSnjmhv9Wmy08u2-P-Yt6bmsqzDCnVWUN4LLhYk,3464
24
25
  cyberfusion/CoreApiClient/resources/databases.py,sha256=jEPCZrSQ6Dg-TVUFQ6dgDHUeFtCXuPKrRdUtBto1m4A,4816
25
26
  cyberfusion/CoreApiClient/resources/domain_routers.py,sha256=xleEyuwyPxtQ1b5skrxkplTg2I2GkossGNAYwDwmJkM,1475
26
27
  cyberfusion/CoreApiClient/resources/firewall_groups.py,sha256=_sSEPIBL0w8KsZOdX7qbOu_3uB8DwN8igoazOcdRVqk,2823
@@ -42,19 +43,20 @@ cyberfusion/CoreApiClient/resources/mail_hostnames.py,sha256=aUTbTW0cF7AIJh4_TdR
42
43
  cyberfusion/CoreApiClient/resources/malwares.py,sha256=FsFaAHo-4u4v7TIl7GNjlx26dPw5S6c1_18fR0uhSYk,956
43
44
  cyberfusion/CoreApiClient/resources/mariadb_encryption_keys.py,sha256=Hw-A2Y_b3mUxruHbxCmxwydzfjWPu4inAeh8GQvPMCU,2115
44
45
  cyberfusion/CoreApiClient/resources/n8n_instances.py,sha256=pbGIUlYjq5e52KPLnq0hG-W1rM2EaILIEOIaBVpoLXA,2926
45
- cyberfusion/CoreApiClient/resources/node_add_ons.py,sha256=lKt1X09lLwfRnyWBEDNeQ0InK3BwOLWiSP1oeMyulLc,2869
46
- cyberfusion/CoreApiClient/resources/nodes.py,sha256=_aMdukrWZ_M-THmkVyqGbWo6IrIz2ZtylGYSpDR5bIE,4391
46
+ cyberfusion/CoreApiClient/resources/node_add_ons.py,sha256=H-_93V-rKpSJbz79EiKIjrHCEaHJlXXDwx7Tisd3-1s,2867
47
+ cyberfusion/CoreApiClient/resources/nodes.py,sha256=NPmvQqoKWUQdh_4nQIP-6eWgofPFBfANxmQBkbheaos,4399
47
48
  cyberfusion/CoreApiClient/resources/passenger_apps.py,sha256=f2HnASA-byB_34UtpIdXVJcmhDVRSYXqdKp4fqmLyV0,3455
48
49
  cyberfusion/CoreApiClient/resources/redis_instances.py,sha256=60XC7DpZpV8Q__FkQZrSkH8kJMm5IZ7gJm1w8EvzS7g,2970
49
50
  cyberfusion/CoreApiClient/resources/regions.py,sha256=yr8W7JlXzyPr8hWsX18Zj4Zbc7YfcCyunYU2vEps4sQ,950
50
51
  cyberfusion/CoreApiClient/resources/root_ssh_keys.py,sha256=bKHxFIC_sEu4OT6TMx95JyBgPJ1TZKLXcQKG1Rd-4MI,2736
51
52
  cyberfusion/CoreApiClient/resources/security_txt_policies.py,sha256=5uOPMatxEWs9WXl0rp8djV4Vi2_4ZI8waRrsgcKu66Y,3016
52
53
  cyberfusion/CoreApiClient/resources/ssh_keys.py,sha256=U7OPQWVnCtpGJ3-wybIjWb7dd-oFaXM0Jy-8FJNlE90,2638
54
+ cyberfusion/CoreApiClient/resources/standards_scans.py,sha256=C6-AE18p33Rw8UDT0Q3N8WYFKCL9tdnyTQrzjm6yTRo,1899
53
55
  cyberfusion/CoreApiClient/resources/task_collections.py,sha256=XmJ2JqssmWRxl5t_m-kjpJxcL7bmMTrohs7zpIDBZJA,1332
54
56
  cyberfusion/CoreApiClient/resources/unix_users.py,sha256=dJknxliUJpWaKzrZgRhZvnuTRgnC-25vXt1asUPDxmc,4092
55
57
  cyberfusion/CoreApiClient/resources/url_redirects.py,sha256=S113S_8-Xzy040Lt67AetenB-Cjsnyg34prDnr5yf84,2741
56
58
  cyberfusion/CoreApiClient/resources/virtual_hosts.py,sha256=mIFeF17_XJtQKkIDXJfrOFQ9M-uOifBKGRIytOnGjNk,5392
57
- python3_core_api_client-7.0.dist-info/METADATA,sha256=JoMGJLKoRXwwd5PjYzpQop8124FVwAEPCjqTgw581Ds,8593
58
- python3_core_api_client-7.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
59
- python3_core_api_client-7.0.dist-info/top_level.txt,sha256=ss011q9S6SL_KIIyq7iujFmIYa0grSjlnInO7cDkeag,12
60
- python3_core_api_client-7.0.dist-info/RECORD,,
59
+ python3_core_api_client-8.0.dist-info/METADATA,sha256=jK-HQOOvskZCdoFxs22Ucj9hrkauzU3mmyeobE7E7FE,8593
60
+ python3_core_api_client-8.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
61
+ python3_core_api_client-8.0.dist-info/top_level.txt,sha256=ss011q9S6SL_KIIyq7iujFmIYa0grSjlnInO7cDkeag,12
62
+ python3_core_api_client-8.0.dist-info/RECORD,,