|
1 | 1 | import collections.abc
|
2 | 2 | import logging
|
| 3 | +import urllib.parse |
3 | 4 |
|
| 5 | +import ci.util |
4 | 6 | import cnudie.iter
|
5 | 7 | import cnudie.retrieve_async
|
6 | 8 | import dso.model
|
@@ -64,7 +66,7 @@ def iter_local_blob_content(
|
64 | 66 | )
|
65 | 67 |
|
66 | 68 |
|
67 |
| -async def find_artefact_node( |
| 69 | +async def find_artefact_node_async( |
68 | 70 | component_descriptor_lookup: cnudie.retrieve_async.ComponentDescriptorLookupById,
|
69 | 71 | artefact: dso.model.ComponentArtefactId,
|
70 | 72 | absent_ok: bool=False,
|
@@ -119,3 +121,57 @@ async def find_artefact_node(
|
119 | 121 |
|
120 | 122 | if not absent_ok:
|
121 | 123 | raise ValueError(f'could not find OCM node for {artefact=}')
|
| 124 | + |
| 125 | + |
| 126 | +def to_absolute_access( |
| 127 | + access: ocm.OciAccess | ocm.RelativeOciAccess, |
| 128 | + ocm_repo: ocm.OciOcmRepository=None, |
| 129 | +) -> ocm.OciAccess: |
| 130 | + if access.type is ocm.AccessType.OCI_REGISTRY: |
| 131 | + return access |
| 132 | + |
| 133 | + if access.type is ocm.AccessType.RELATIVE_OCI_REFERENCE: |
| 134 | + if not '://' in ocm_repo.baseUrl: |
| 135 | + base_url = urllib.parse.urlparse(f'x://{ocm_repo.baseUrl}').netloc |
| 136 | + else: |
| 137 | + base_url = urllib.parse.urlparse(ocm_repo.baseUrl).netloc |
| 138 | + |
| 139 | + return ocm.OciAccess( |
| 140 | + imageReference=ci.util.urljoin(base_url, access.reference), |
| 141 | + ) |
| 142 | + |
| 143 | + raise NotImplementedError(access.type) |
| 144 | + |
| 145 | + |
| 146 | +def find_artefact_node( |
| 147 | + component: ocm.Component, |
| 148 | + component_descriptor_lookup, |
| 149 | + artefact_name: str, |
| 150 | + artefact_version: str, |
| 151 | + artefact_type: str, |
| 152 | + node_filter: collections.abc.Callable | None, |
| 153 | + absent_ok: bool=False, |
| 154 | + recursion_depth: int=-1, |
| 155 | +) -> cnudie.iter.ArtefactNode | None: |
| 156 | + for rnode in cnudie.iter.iter( |
| 157 | + component=component, |
| 158 | + lookup=component_descriptor_lookup, |
| 159 | + node_filter=node_filter, |
| 160 | + recursion_depth=recursion_depth, |
| 161 | + ): |
| 162 | + rnode: cnudie.iter.ResourceNode |
| 163 | + if not ( |
| 164 | + rnode.resource.name == artefact_name |
| 165 | + and rnode.resource.version == artefact_version |
| 166 | + and rnode.resource.type == artefact_type |
| 167 | + ): |
| 168 | + continue |
| 169 | + |
| 170 | + return rnode |
| 171 | + |
| 172 | + else: |
| 173 | + if absent_ok: |
| 174 | + return None |
| 175 | + |
| 176 | + raise ValueError(f'no ocm node found for {artefact_name=} {artefact_version=} \ |
| 177 | + {artefact_type=}') |
0 commit comments