| @@ -249,7 +249,7 @@ class Package: | |||
| def __init__(self, groupId: str, artifactId: str, version: str | None = None, implicit: bool = False): | |||
| self.groupId = groupId | |||
| self.artifactId = artifactId | |||
| self.version = version | |||
| self.version = version if version and not version.isspace() else None | |||
| self.implicit = implicit | |||
| def __str__(self) -> str: | |||
| @@ -317,34 +317,51 @@ class Package: | |||
| return q | |||
| async def _query_maven(self) -> None: | |||
| url = f'{baseurl}/solrsearch/select?q={self._urlquery}&rows=1&wt=json' | |||
| logger.debug(f'{self}: Querying maven at url {url}') | |||
| self._verified = False | |||
| async with aiohttp.ClientSession() as session: | |||
| async with session.get(url) as response: | |||
| if response.status == 200: | |||
| message = await response.json() | |||
| num = message['response']['numFound'] | |||
| if num: | |||
| logger.debug(f'{self}: Query successful') | |||
| self._verified = True | |||
| if self.version is None: | |||
| version = message['response']['docs'][0]['latestVersion'] | |||
| logger.debug(f'{self}: Using newest version {version}') | |||
| self.version = version | |||
| else: | |||
| if self.implicit: | |||
| logger.debug(f'{self}: No matching packages found') | |||
| else: | |||
| logger.warning(f'{self}: No matching packages found') | |||
| for mirror in mirrors: | |||
| url = f'{mirror}/{self.groupId.replace(".", "/")}/{self.artifactId}/maven-metadata.xml' | |||
| logger.debug(f'{self}: Querying maven at url {url}') | |||
| self._verified = False | |||
| elif response.status == 429: | |||
| raise TooManyRequestsException() | |||
| async with session.get(url) as response: | |||
| if response.status == 200: | |||
| response_text = await response.text() | |||
| metadata = ET.fromstring(response_text) | |||
| if metadata is not None: | |||
| logger.debug(f'{self}: Metadata found') | |||
| if self.version is None: | |||
| release_tag = metadata.find('./versioning/release') | |||
| latest_tag = metadata.find('./versioning/latest') | |||
| version = release_tag.text if release_tag is not None else latest_tag.text if latest_tag is not None else None | |||
| if version is not None: | |||
| logger.debug(f'{self}: Using newest version {version}') | |||
| self.version = version | |||
| self._verified = True | |||
| return | |||
| else: | |||
| logger.info(f'{self}: Could not find latest version in metadata from mirror {mirror}') | |||
| else: | |||
| if metadata.find(f'./versioning/versions/version[.="{self.version}"]') is not None: | |||
| logger.debug(f'{self}: Version {self.version} is valid') | |||
| self._verified = True | |||
| return | |||
| else: | |||
| logger.info(f'{self}: Could not find version {self.version} in metadata from mirror {mirror}') | |||
| else: | |||
| logger.warning('{self}: Invalid XML for maven metadata: {response_text}') | |||
| elif response.status == 429: | |||
| raise TooManyRequestsException() | |||
| else: | |||
| logger.info(f'{self}: HTTP error {response.status} downloading maven metadata from {url}') | |||
| else: | |||
| if self.implicit: | |||
| logger.info(f'{self}: Package not found in any mirror') | |||
| else: | |||
| self._verified = False | |||
| logger.warning(f'{self}: HTTP error {response.status} downloading pom') | |||
| logger.warning(f'{self}: Package not found in any mirror') | |||
| async def verify(self) -> bool: | |||
| if not self._verified: | |||
| @@ -479,7 +496,6 @@ async def worker(queue: asyncio.Queue) -> None: | |||
| break | |||
| except Exception: | |||
| logger.exception(f'{package}: Unknown error while processing package') | |||
| logger.error(global_properties) | |||
| break | |||