| @@ -249,7 +249,7 @@ class Package: | |||||
| def __init__(self, groupId: str, artifactId: str, version: str | None = None, implicit: bool = False): | def __init__(self, groupId: str, artifactId: str, version: str | None = None, implicit: bool = False): | ||||
| self.groupId = groupId | self.groupId = groupId | ||||
| self.artifactId = artifactId | self.artifactId = artifactId | ||||
| self.version = version | |||||
| self.version = version if version and not version.isspace() else None | |||||
| self.implicit = implicit | self.implicit = implicit | ||||
| def __str__(self) -> str: | def __str__(self) -> str: | ||||
| @@ -317,34 +317,51 @@ class Package: | |||||
| return q | return q | ||||
| async def _query_maven(self) -> None: | 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 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: | 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: | async def verify(self) -> bool: | ||||
| if not self._verified: | if not self._verified: | ||||
| @@ -479,7 +496,6 @@ async def worker(queue: asyncio.Queue) -> None: | |||||
| break | break | ||||
| except Exception: | except Exception: | ||||
| logger.exception(f'{package}: Unknown error while processing package') | logger.exception(f'{package}: Unknown error while processing package') | ||||
| logger.error(global_properties) | |||||
| break | break | ||||