|
| 1 | +import typing as t |
1 | 2 | from gettext import gettext as _ |
2 | 3 |
|
3 | | -from pulp_glue.common.context import ( |
4 | | - EntityDefinition, |
5 | | - PluginRequirement, |
6 | | - PulpContentContext, |
7 | | - PulpEntityContext, |
8 | | - PulpRemoteContext, |
9 | | - PulpRepositoryContext, |
10 | | - PulpRepositoryVersionContext, |
11 | | -) |
| 4 | +from pulp_glue.common.context import PulpEntityContext |
12 | 5 |
|
13 | 6 |
|
14 | | -class PulpConsoleContentContext(PulpContentContext): |
15 | | - """Context for Console Content.""" |
| 7 | +class PulpVulnerabilityReportContext(PulpEntityContext): |
| 8 | + """Context for working with vulnerability reports.""" |
16 | 9 |
|
17 | | - PLUGIN = "console" |
18 | | - RESOURCE_TYPE = "content" |
19 | | - ENTITY = _("console content") |
20 | | - ENTITIES = _("console content") |
21 | | - HREF = "console_console_content_href" |
22 | | - ID_PREFIX = "content_console_content" |
23 | | - NEEDS_PLUGINS = [PluginRequirement("console", specifier=">=1.0.0")] |
| 10 | + ENTITY = _("vulnerability report") |
| 11 | + ENTITIES = _("vulnerability reports") |
| 12 | + ID_PREFIX = "vuln_report" |
| 13 | + HREF = "service_vulnerability_report_href" |
24 | 14 |
|
| 15 | + def upload(self, file: t.IO[bytes], chunk_size: int = 1000000) -> t.Dict[str, t.Any]: |
| 16 | + """Upload a vulnerability report from a JSON file. |
25 | 17 |
|
26 | | -class PulpConsoleDistributionContext(PulpEntityContext): |
27 | | - """Context for Console Distribution.""" |
| 18 | + Args: |
| 19 | + file: The file object to upload |
| 20 | + chunk_size: The chunk size for the upload |
28 | 21 |
|
29 | | - PLUGIN = "console" |
30 | | - RESOURCE_TYPE = "console" |
31 | | - ENTITY = _("console distribution") |
32 | | - ENTITIES = _("console distributions") |
33 | | - HREF = "console_console_distribution_href" |
34 | | - ID_PREFIX = "distributions_console_console" |
35 | | - NEEDS_PLUGINS = [PluginRequirement("console", specifier=">=1.0.0")] |
36 | | - |
37 | | - def preprocess_entity(self, body: EntityDefinition, partial: bool = False) -> EntityDefinition: |
38 | | - body = super().preprocess_entity(body, partial) |
39 | | - version = body.pop("version", None) |
40 | | - if version is not None: |
41 | | - repository_href = body.pop("repository") |
42 | | - body["repository_version"] = f"{repository_href}versions/{version}/" |
43 | | - return body |
44 | | - |
45 | | - |
46 | | -class PulpConsoleRemoteContext(PulpRemoteContext): |
47 | | - """Context for Console Remote.""" |
48 | | - |
49 | | - PLUGIN = "console" |
50 | | - RESOURCE_TYPE = "console" |
51 | | - ENTITY = _("console remote") |
52 | | - ENTITIES = _("console remotes") |
53 | | - HREF = "console_console_remote_href" |
54 | | - ID_PREFIX = "remotes_console_console" |
55 | | - NEEDS_PLUGINS = [PluginRequirement("console", specifier=">=1.0.0")] |
56 | | - |
57 | | - |
58 | | -class PulpConsoleRepositoryVersionContext(PulpRepositoryVersionContext): |
59 | | - """Context for Console Repository Version.""" |
60 | | - |
61 | | - PLUGIN = "console" |
62 | | - RESOURCE_TYPE = "console" |
63 | | - HREF = "console_console_repository_version_href" |
64 | | - ID_PREFIX = "repositories_console_console_versions" |
65 | | - NEEDS_PLUGINS = [PluginRequirement("console", specifier=">=1.0.0")] |
66 | | - |
67 | | - |
68 | | -class PulpConsoleRepositoryContext(PulpRepositoryContext): |
69 | | - """Context for Console Repository.""" |
70 | | - |
71 | | - PLUGIN = "console" |
72 | | - RESOURCE_TYPE = "console" |
73 | | - HREF = "console_console_repository_href" |
74 | | - ID_PREFIX = "repositories_console_console" |
75 | | - VERSION_CONTEXT = PulpConsoleRepositoryVersionContext |
76 | | - NEEDS_PLUGINS = [PluginRequirement("console", specifier=">=1.0.0")] |
77 | | - CAPABILITIES = { |
78 | | - "sync": [PluginRequirement("console", specifier=">=1.0.0")], |
79 | | - } |
80 | | - |
81 | | - # Add custom methods for your repository operations here |
82 | | - # For example: |
83 | | - # def import_content(self, href: str, artifact: str, ...) -> Any: |
84 | | - # body = {...} |
85 | | - # return self.pulp_ctx.call("your_import_method_id", |
86 | | - # parameters={self.HREF: href}, |
87 | | - # body=body) |
| 22 | + Returns: |
| 23 | + The created vulnerability report entity |
| 24 | + """ |
| 25 | + # Read the raw file content |
| 26 | + file_content = file.read() |
| 27 | + # Submit the file content to the Pulp API |
| 28 | + response = self.pulp_ctx.call( |
| 29 | + operation_id="vuln_report_create", |
| 30 | + body={"package_json": file_content}, |
| 31 | + validate_body=False, |
| 32 | + ) |
| 33 | + return t.cast(t.Dict[str, t.Any], response) |
0 commit comments