python3-core-api-client 0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. cyberfusion/CoreApiClient/__init__.py +0 -0
  2. cyberfusion/CoreApiClient/_encoders.py +7 -0
  3. cyberfusion/CoreApiClient/connector.py +382 -0
  4. cyberfusion/CoreApiClient/exceptions.py +13 -0
  5. cyberfusion/CoreApiClient/http.py +21 -0
  6. cyberfusion/CoreApiClient/interfaces.py +9 -0
  7. cyberfusion/CoreApiClient/models.py +5350 -0
  8. cyberfusion/CoreApiClient/resources/__init__.py +99 -0
  9. cyberfusion/CoreApiClient/resources/basic_authentication_realms.py +85 -0
  10. cyberfusion/CoreApiClient/resources/borg_archives.py +144 -0
  11. cyberfusion/CoreApiClient/resources/borg_repositories.py +134 -0
  12. cyberfusion/CoreApiClient/resources/certificate_managers.py +99 -0
  13. cyberfusion/CoreApiClient/resources/certificates.py +63 -0
  14. cyberfusion/CoreApiClient/resources/clusters.py +233 -0
  15. cyberfusion/CoreApiClient/resources/cmses.py +289 -0
  16. cyberfusion/CoreApiClient/resources/crons.py +76 -0
  17. cyberfusion/CoreApiClient/resources/custom_config_snippets.py +88 -0
  18. cyberfusion/CoreApiClient/resources/custom_configs.py +82 -0
  19. cyberfusion/CoreApiClient/resources/customers.py +97 -0
  20. cyberfusion/CoreApiClient/resources/daemons.py +76 -0
  21. cyberfusion/CoreApiClient/resources/database_user_grants.py +66 -0
  22. cyberfusion/CoreApiClient/resources/database_users.py +82 -0
  23. cyberfusion/CoreApiClient/resources/databases.py +140 -0
  24. cyberfusion/CoreApiClient/resources/domain_routers.py +43 -0
  25. cyberfusion/CoreApiClient/resources/firewall_groups.py +82 -0
  26. cyberfusion/CoreApiClient/resources/firewall_rules.py +67 -0
  27. cyberfusion/CoreApiClient/resources/fpm_pools.py +110 -0
  28. cyberfusion/CoreApiClient/resources/ftp_users.py +89 -0
  29. cyberfusion/CoreApiClient/resources/haproxy_listens.py +67 -0
  30. cyberfusion/CoreApiClient/resources/haproxy_listens_to_nodes.py +70 -0
  31. cyberfusion/CoreApiClient/resources/health.py +14 -0
  32. cyberfusion/CoreApiClient/resources/hosts_entries.py +63 -0
  33. cyberfusion/CoreApiClient/resources/htpasswd_files.py +67 -0
  34. cyberfusion/CoreApiClient/resources/htpasswd_users.py +82 -0
  35. cyberfusion/CoreApiClient/resources/login.py +28 -0
  36. cyberfusion/CoreApiClient/resources/logs.py +50 -0
  37. cyberfusion/CoreApiClient/resources/mail_accounts.py +105 -0
  38. cyberfusion/CoreApiClient/resources/mail_aliases.py +79 -0
  39. cyberfusion/CoreApiClient/resources/mail_domains.py +79 -0
  40. cyberfusion/CoreApiClient/resources/mail_hostnames.py +82 -0
  41. cyberfusion/CoreApiClient/resources/malwares.py +53 -0
  42. cyberfusion/CoreApiClient/resources/mariadb_encryption_keys.py +56 -0
  43. cyberfusion/CoreApiClient/resources/node_add_ons.py +74 -0
  44. cyberfusion/CoreApiClient/resources/nodes.py +112 -0
  45. cyberfusion/CoreApiClient/resources/passenger_apps.py +99 -0
  46. cyberfusion/CoreApiClient/resources/redis_instances.py +85 -0
  47. cyberfusion/CoreApiClient/resources/root_ssh_keys.py +77 -0
  48. cyberfusion/CoreApiClient/resources/security_txt_policies.py +85 -0
  49. cyberfusion/CoreApiClient/resources/sites.py +29 -0
  50. cyberfusion/CoreApiClient/resources/ssh_keys.py +77 -0
  51. cyberfusion/CoreApiClient/resources/task_collections.py +38 -0
  52. cyberfusion/CoreApiClient/resources/tombstones.py +29 -0
  53. cyberfusion/CoreApiClient/resources/unix_users.py +122 -0
  54. cyberfusion/CoreApiClient/resources/url_redirects.py +79 -0
  55. cyberfusion/CoreApiClient/resources/virtual_hosts.py +120 -0
  56. python3_core_api_client-0.1.dist-info/METADATA +236 -0
  57. python3_core_api_client-0.1.dist-info/RECORD +59 -0
  58. python3_core_api_client-0.1.dist-info/WHEEL +5 -0
  59. python3_core_api_client-0.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,99 @@
1
+ from . import (
2
+ borg_repositories,
3
+ databases,
4
+ daemons,
5
+ ssh_keys,
6
+ unix_users,
7
+ mail_aliases,
8
+ health,
9
+ malwares,
10
+ clusters,
11
+ task_collections,
12
+ htpasswd_users,
13
+ custom_config_snippets,
14
+ certificate_managers,
15
+ haproxy_listens,
16
+ certificates,
17
+ database_user_grants,
18
+ htpasswd_files,
19
+ url_redirects,
20
+ firewall_groups,
21
+ mariadb_encryption_keys,
22
+ virtual_hosts,
23
+ passenger_apps,
24
+ cmses,
25
+ redis_instances,
26
+ logs,
27
+ sites,
28
+ mail_hostnames,
29
+ domain_routers,
30
+ node_add_ons,
31
+ haproxy_listens_to_nodes,
32
+ ftp_users,
33
+ custom_configs,
34
+ borg_archives,
35
+ login,
36
+ crons,
37
+ nodes,
38
+ hosts_entries,
39
+ database_users,
40
+ security_txt_policies,
41
+ customers,
42
+ basic_authentication_realms,
43
+ root_ssh_keys,
44
+ firewall_rules,
45
+ mail_accounts,
46
+ fpm_pools,
47
+ mail_domains,
48
+ tombstones,
49
+ )
50
+
51
+ __all__ = [
52
+ "basic_authentication_realms",
53
+ "borg_archives",
54
+ "borg_repositories",
55
+ "certificate_managers",
56
+ "certificates",
57
+ "clusters",
58
+ "cmses",
59
+ "crons",
60
+ "custom_config_snippets",
61
+ "custom_configs",
62
+ "daemons",
63
+ "database_user_grants",
64
+ "database_users",
65
+ "databases",
66
+ "domain_routers",
67
+ "firewall_groups",
68
+ "firewall_rules",
69
+ "fpm_pools",
70
+ "ftp_users",
71
+ "haproxy_listens",
72
+ "haproxy_listens_to_nodes",
73
+ "health",
74
+ "hosts_entries",
75
+ "htpasswd_files",
76
+ "htpasswd_users",
77
+ "logs",
78
+ "mail_accounts",
79
+ "mail_aliases",
80
+ "mail_domains",
81
+ "mail_hostnames",
82
+ "malwares",
83
+ "mariadb_encryption_keys",
84
+ "nodes",
85
+ "node_add_ons",
86
+ "passenger_apps",
87
+ "redis_instances",
88
+ "root_ssh_keys",
89
+ "security_txt_policies",
90
+ "sites",
91
+ "ssh_keys",
92
+ "task_collections",
93
+ "tombstones",
94
+ "unix_users",
95
+ "url_redirects",
96
+ "virtual_hosts",
97
+ "login",
98
+ "customers",
99
+ ]
@@ -0,0 +1,85 @@
1
+ from cyberfusion.CoreApiClient import models
2
+ from typing import Optional, List
3
+
4
+ from cyberfusion.CoreApiClient.interfaces import Resource
5
+
6
+
7
+ class BasicAuthenticationRealms(Resource):
8
+ def create_basic_authentication_realm(
9
+ self,
10
+ request: models.BasicAuthenticationRealmCreateRequest,
11
+ ) -> models.BasicAuthenticationRealmResource:
12
+ return models.BasicAuthenticationRealmResource.construct(
13
+ **self.api_connector.send_or_fail(
14
+ "POST",
15
+ "/api/v1/basic-authentication-realms",
16
+ data=request.dict(),
17
+ query_parameters={},
18
+ ).json
19
+ )
20
+
21
+ def list_basic_authentication_realms(
22
+ self,
23
+ *,
24
+ skip: Optional[int] = None,
25
+ limit: Optional[int] = None,
26
+ filter_: Optional[List[str]] = None,
27
+ sort: Optional[List[str]] = None,
28
+ ) -> list[models.BasicAuthenticationRealmResource]:
29
+ return [
30
+ models.BasicAuthenticationRealmResource.construct(**model)
31
+ for model in self.api_connector.send_or_fail(
32
+ "GET",
33
+ "/api/v1/basic-authentication-realms",
34
+ data=None,
35
+ query_parameters={
36
+ "skip": skip,
37
+ "limit": limit,
38
+ "filter": filter_,
39
+ "sort": sort,
40
+ },
41
+ ).json
42
+ ]
43
+
44
+ def read_basic_authentication_realm(
45
+ self,
46
+ *,
47
+ id_: int,
48
+ ) -> models.BasicAuthenticationRealmResource:
49
+ return models.BasicAuthenticationRealmResource.construct(
50
+ **self.api_connector.send_or_fail(
51
+ "GET",
52
+ f"/api/v1/basic-authentication-realms/{id_}",
53
+ data=None,
54
+ query_parameters={},
55
+ ).json
56
+ )
57
+
58
+ def update_basic_authentication_realm(
59
+ self,
60
+ request: models.BasicAuthenticationRealmUpdateRequest,
61
+ *,
62
+ id_: int,
63
+ ) -> models.BasicAuthenticationRealmResource:
64
+ return models.BasicAuthenticationRealmResource.construct(
65
+ **self.api_connector.send_or_fail(
66
+ "PATCH",
67
+ f"/api/v1/basic-authentication-realms/{id_}",
68
+ data=request.dict(exclude_unset=True),
69
+ query_parameters={},
70
+ ).json
71
+ )
72
+
73
+ def delete_basic_authentication_realm(
74
+ self,
75
+ *,
76
+ id_: int,
77
+ ) -> models.DetailMessage:
78
+ return models.DetailMessage.construct(
79
+ **self.api_connector.send_or_fail(
80
+ "DELETE",
81
+ f"/api/v1/basic-authentication-realms/{id_}",
82
+ data=None,
83
+ query_parameters={},
84
+ ).json
85
+ )
@@ -0,0 +1,144 @@
1
+ from cyberfusion.CoreApiClient import models
2
+ from typing import Optional, List
3
+
4
+ from cyberfusion.CoreApiClient.interfaces import Resource
5
+
6
+
7
+ class BorgArchives(Resource):
8
+ def create_borg_archive_for_database(
9
+ self,
10
+ request: models.BorgArchiveCreateDatabaseRequest,
11
+ *,
12
+ callback_url: Optional[str] = None,
13
+ ) -> models.TaskCollectionResource:
14
+ return models.TaskCollectionResource.construct(
15
+ **self.api_connector.send_or_fail(
16
+ "POST",
17
+ "/api/v1/borg-archives/database",
18
+ data=request.dict(),
19
+ query_parameters={
20
+ "callback_url": callback_url,
21
+ },
22
+ ).json
23
+ )
24
+
25
+ def create_borg_archive_for_unix_user(
26
+ self,
27
+ request: models.BorgArchiveCreateUNIXUserRequest,
28
+ *,
29
+ callback_url: Optional[str] = None,
30
+ ) -> models.TaskCollectionResource:
31
+ return models.TaskCollectionResource.construct(
32
+ **self.api_connector.send_or_fail(
33
+ "POST",
34
+ "/api/v1/borg-archives/unix-user",
35
+ data=request.dict(),
36
+ query_parameters={
37
+ "callback_url": callback_url,
38
+ },
39
+ ).json
40
+ )
41
+
42
+ def list_borg_archives(
43
+ self,
44
+ *,
45
+ skip: Optional[int] = None,
46
+ limit: Optional[int] = None,
47
+ filter_: Optional[List[str]] = None,
48
+ sort: Optional[List[str]] = None,
49
+ ) -> list[models.BorgArchiveResource]:
50
+ return [
51
+ models.BorgArchiveResource.construct(**model)
52
+ for model in self.api_connector.send_or_fail(
53
+ "GET",
54
+ "/api/v1/borg-archives",
55
+ data=None,
56
+ query_parameters={
57
+ "skip": skip,
58
+ "limit": limit,
59
+ "filter": filter_,
60
+ "sort": sort,
61
+ },
62
+ ).json
63
+ ]
64
+
65
+ def read_borg_archive(
66
+ self,
67
+ *,
68
+ id_: int,
69
+ ) -> models.BorgArchiveResource:
70
+ return models.BorgArchiveResource.construct(
71
+ **self.api_connector.send_or_fail(
72
+ "GET", f"/api/v1/borg-archives/{id_}", data=None, query_parameters={}
73
+ ).json
74
+ )
75
+
76
+ def get_borg_archive_metadata(
77
+ self,
78
+ *,
79
+ id_: int,
80
+ ) -> models.BorgArchiveMetadata:
81
+ return models.BorgArchiveMetadata.construct(
82
+ **self.api_connector.send_or_fail(
83
+ "GET",
84
+ f"/api/v1/borg-archives/{id_}/metadata",
85
+ data=None,
86
+ query_parameters={},
87
+ ).json
88
+ )
89
+
90
+ def restore_borg_archive(
91
+ self,
92
+ *,
93
+ id_: int,
94
+ callback_url: Optional[str] = None,
95
+ path: Optional[str] = None,
96
+ ) -> models.TaskCollectionResource:
97
+ return models.TaskCollectionResource.construct(
98
+ **self.api_connector.send_or_fail(
99
+ "POST",
100
+ f"/api/v1/borg-archives/{id_}/restore",
101
+ data=None,
102
+ query_parameters={
103
+ "callback_url": callback_url,
104
+ "path": path,
105
+ },
106
+ ).json
107
+ )
108
+
109
+ def list_borg_archive_contents(
110
+ self,
111
+ *,
112
+ id_: int,
113
+ path: Optional[str] = None,
114
+ ) -> list[models.BorgArchiveContent]:
115
+ return [
116
+ models.BorgArchiveContent.construct(**model)
117
+ for model in self.api_connector.send_or_fail(
118
+ "GET",
119
+ f"/api/v1/borg-archives/{id_}/contents",
120
+ data=None,
121
+ query_parameters={
122
+ "path": path,
123
+ },
124
+ ).json
125
+ ]
126
+
127
+ def download_borg_archive(
128
+ self,
129
+ *,
130
+ id_: int,
131
+ callback_url: Optional[str] = None,
132
+ path: Optional[str] = None,
133
+ ) -> models.TaskCollectionResource:
134
+ return models.TaskCollectionResource.construct(
135
+ **self.api_connector.send_or_fail(
136
+ "POST",
137
+ f"/api/v1/borg-archives/{id_}/download",
138
+ data=None,
139
+ query_parameters={
140
+ "callback_url": callback_url,
141
+ "path": path,
142
+ },
143
+ ).json
144
+ )
@@ -0,0 +1,134 @@
1
+ from cyberfusion.CoreApiClient import models
2
+ from typing import Optional, List
3
+
4
+ from cyberfusion.CoreApiClient.interfaces import Resource
5
+
6
+
7
+ class BorgRepositories(Resource):
8
+ def create_borg_repository(
9
+ self,
10
+ request: models.BorgRepositoryCreateRequest,
11
+ ) -> models.BorgRepositoryResource:
12
+ return models.BorgRepositoryResource.construct(
13
+ **self.api_connector.send_or_fail(
14
+ "POST",
15
+ "/api/v1/borg-repositories",
16
+ data=request.dict(),
17
+ query_parameters={},
18
+ ).json
19
+ )
20
+
21
+ def list_borg_repositories(
22
+ self,
23
+ *,
24
+ skip: Optional[int] = None,
25
+ limit: Optional[int] = None,
26
+ filter_: Optional[List[str]] = None,
27
+ sort: Optional[List[str]] = None,
28
+ ) -> list[models.BorgRepositoryResource]:
29
+ return [
30
+ models.BorgRepositoryResource.construct(**model)
31
+ for model in self.api_connector.send_or_fail(
32
+ "GET",
33
+ "/api/v1/borg-repositories",
34
+ data=None,
35
+ query_parameters={
36
+ "skip": skip,
37
+ "limit": limit,
38
+ "filter": filter_,
39
+ "sort": sort,
40
+ },
41
+ ).json
42
+ ]
43
+
44
+ def read_borg_repository(
45
+ self,
46
+ *,
47
+ id_: int,
48
+ ) -> models.BorgRepositoryResource:
49
+ return models.BorgRepositoryResource.construct(
50
+ **self.api_connector.send_or_fail(
51
+ "GET",
52
+ f"/api/v1/borg-repositories/{id_}",
53
+ data=None,
54
+ query_parameters={},
55
+ ).json
56
+ )
57
+
58
+ def update_borg_repository(
59
+ self,
60
+ request: models.BorgRepositoryUpdateRequest,
61
+ *,
62
+ id_: int,
63
+ ) -> models.BorgRepositoryResource:
64
+ return models.BorgRepositoryResource.construct(
65
+ **self.api_connector.send_or_fail(
66
+ "PATCH",
67
+ f"/api/v1/borg-repositories/{id_}",
68
+ data=request.dict(exclude_unset=True),
69
+ query_parameters={},
70
+ ).json
71
+ )
72
+
73
+ def delete_borg_repository(
74
+ self,
75
+ *,
76
+ id_: int,
77
+ ) -> models.DetailMessage:
78
+ return models.DetailMessage.construct(
79
+ **self.api_connector.send_or_fail(
80
+ "DELETE",
81
+ f"/api/v1/borg-repositories/{id_}",
82
+ data=None,
83
+ query_parameters={},
84
+ ).json
85
+ )
86
+
87
+ def prune_borg_repository(
88
+ self,
89
+ *,
90
+ id_: int,
91
+ callback_url: Optional[str] = None,
92
+ ) -> models.TaskCollectionResource:
93
+ return models.TaskCollectionResource.construct(
94
+ **self.api_connector.send_or_fail(
95
+ "POST",
96
+ f"/api/v1/borg-repositories/{id_}/prune",
97
+ data=None,
98
+ query_parameters={
99
+ "callback_url": callback_url,
100
+ },
101
+ ).json
102
+ )
103
+
104
+ def check_borg_repository(
105
+ self,
106
+ *,
107
+ id_: int,
108
+ callback_url: Optional[str] = None,
109
+ ) -> models.TaskCollectionResource:
110
+ return models.TaskCollectionResource.construct(
111
+ **self.api_connector.send_or_fail(
112
+ "POST",
113
+ f"/api/v1/borg-repositories/{id_}/check",
114
+ data=None,
115
+ query_parameters={
116
+ "callback_url": callback_url,
117
+ },
118
+ ).json
119
+ )
120
+
121
+ def get_borg_archives_metadata(
122
+ self,
123
+ *,
124
+ id_: int,
125
+ ) -> list[models.BorgArchiveMetadata]:
126
+ return [
127
+ models.BorgArchiveMetadata.construct(**model)
128
+ for model in self.api_connector.send_or_fail(
129
+ "GET",
130
+ f"/api/v1/borg-repositories/{id_}/archives-metadata",
131
+ data=None,
132
+ query_parameters={},
133
+ ).json
134
+ ]
@@ -0,0 +1,99 @@
1
+ from cyberfusion.CoreApiClient import models
2
+ from typing import Optional, List
3
+
4
+ from cyberfusion.CoreApiClient.interfaces import Resource
5
+
6
+
7
+ class CertificateManagers(Resource):
8
+ def create_certificate_manager(
9
+ self,
10
+ request: models.CertificateManagerCreateRequest,
11
+ ) -> models.CertificateManagerResource:
12
+ return models.CertificateManagerResource.construct(
13
+ **self.api_connector.send_or_fail(
14
+ "POST",
15
+ "/api/v1/certificate-managers",
16
+ data=request.dict(),
17
+ query_parameters={},
18
+ ).json
19
+ )
20
+
21
+ def list_certificate_managers(
22
+ self,
23
+ *,
24
+ skip: Optional[int] = None,
25
+ limit: Optional[int] = None,
26
+ filter_: Optional[List[str]] = None,
27
+ sort: Optional[List[str]] = None,
28
+ ) -> list[models.CertificateManagerResource]:
29
+ return [
30
+ models.CertificateManagerResource.construct(**model)
31
+ for model in self.api_connector.send_or_fail(
32
+ "GET",
33
+ "/api/v1/certificate-managers",
34
+ data=None,
35
+ query_parameters={
36
+ "skip": skip,
37
+ "limit": limit,
38
+ "filter": filter_,
39
+ "sort": sort,
40
+ },
41
+ ).json
42
+ ]
43
+
44
+ def read_certificate_manager(
45
+ self,
46
+ *,
47
+ id_: int,
48
+ ) -> models.CertificateManagerResource:
49
+ return models.CertificateManagerResource.construct(
50
+ **self.api_connector.send_or_fail(
51
+ "GET",
52
+ f"/api/v1/certificate-managers/{id_}",
53
+ data=None,
54
+ query_parameters={},
55
+ ).json
56
+ )
57
+
58
+ def update_certificate_manager(
59
+ self,
60
+ request: models.CertificateManagerUpdateRequest,
61
+ *,
62
+ id_: int,
63
+ ) -> models.CertificateManagerResource:
64
+ return models.CertificateManagerResource.construct(
65
+ **self.api_connector.send_or_fail(
66
+ "PATCH",
67
+ f"/api/v1/certificate-managers/{id_}",
68
+ data=request.dict(exclude_unset=True),
69
+ query_parameters={},
70
+ ).json
71
+ )
72
+
73
+ def delete_certificate_manager(
74
+ self,
75
+ *,
76
+ id_: int,
77
+ ) -> models.DetailMessage:
78
+ return models.DetailMessage.construct(
79
+ **self.api_connector.send_or_fail(
80
+ "DELETE",
81
+ f"/api/v1/certificate-managers/{id_}",
82
+ data=None,
83
+ query_parameters={},
84
+ ).json
85
+ )
86
+
87
+ def request_certificate(
88
+ self,
89
+ *,
90
+ id_: int,
91
+ ) -> models.TaskCollectionResource:
92
+ return models.TaskCollectionResource.construct(
93
+ **self.api_connector.send_or_fail(
94
+ "POST",
95
+ f"/api/v1/certificate-managers/{id_}/request",
96
+ data=None,
97
+ query_parameters={},
98
+ ).json
99
+ )
@@ -0,0 +1,63 @@
1
+ from cyberfusion.CoreApiClient import models
2
+ from typing import Optional, List
3
+ from cyberfusion.CoreApiClient.interfaces import Resource
4
+
5
+
6
+ class Certificates(Resource):
7
+ def create_certificate(
8
+ self,
9
+ request: models.CertificateCreateRequest,
10
+ ) -> models.CertificateResource:
11
+ return models.CertificateResource.construct(
12
+ **self.api_connector.send_or_fail(
13
+ "POST",
14
+ "/api/v1/certificates",
15
+ data=request.dict(),
16
+ query_parameters={},
17
+ ).json
18
+ )
19
+
20
+ def list_certificates(
21
+ self,
22
+ *,
23
+ skip: Optional[int] = None,
24
+ limit: Optional[int] = None,
25
+ filter_: Optional[List[str]] = None,
26
+ sort: Optional[List[str]] = None,
27
+ ) -> list[models.CertificateResource]:
28
+ return [
29
+ models.CertificateResource.construct(**model)
30
+ for model in self.api_connector.send_or_fail(
31
+ "GET",
32
+ "/api/v1/certificates",
33
+ data=None,
34
+ query_parameters={
35
+ "skip": skip,
36
+ "limit": limit,
37
+ "filter": filter_,
38
+ "sort": sort,
39
+ },
40
+ ).json
41
+ ]
42
+
43
+ def read_certificate(
44
+ self,
45
+ *,
46
+ id_: int,
47
+ ) -> models.CertificateResource:
48
+ return models.CertificateResource.construct(
49
+ **self.api_connector.send_or_fail(
50
+ "GET", f"/api/v1/certificates/{id_}", data=None, query_parameters={}
51
+ ).json
52
+ )
53
+
54
+ def delete_certificate(
55
+ self,
56
+ *,
57
+ id_: int,
58
+ ) -> models.DetailMessage:
59
+ return models.DetailMessage.construct(
60
+ **self.api_connector.send_or_fail(
61
+ "DELETE", f"/api/v1/certificates/{id_}", data=None, query_parameters={}
62
+ ).json
63
+ )