| @@ -37,6 +37,8 @@ class TooManyRequestsException(Exception): | |||||
| class PackagePOM: | class PackagePOM: | ||||
| def __init__(self, package: 'Package', pom: str): | def __init__(self, package: 'Package', pom: str): | ||||
| self._package = package | |||||
| logger.debug(f'{package}: Parsing POM') | logger.debug(f'{package}: Parsing POM') | ||||
| self.raw_root = ET.fromstring(pom) | self.raw_root = ET.fromstring(pom) | ||||
| @@ -125,27 +127,41 @@ class PackagePOM: | |||||
| else: | else: | ||||
| return None | return None | ||||
| def _package_from_xml_dep(self, dep: ET.Element): | |||||
| def prop_replace(match): | |||||
| def _package_from_xml_dep(self, dep: ET.Element) -> 'Package': | |||||
| def lookup_prop(match) -> str: | |||||
| prop = match.group(1) | prop = match.group(1) | ||||
| value = self.get_property(match.group(1)) | |||||
| logger.debug(f'Replacing property {prop} with {value}') | |||||
| if prop == 'project.groupId': | |||||
| value = str(self._package.groupId) | |||||
| elif prop == 'project.artifactId': | |||||
| value = str(self._package.artifactId) | |||||
| elif prop == 'project.version': | |||||
| value = str(self._package.version) | |||||
| else: | |||||
| value = self.get_property(prop) | |||||
| logger.debug(f'{self._package}: Trying to recurse prop {value}') | |||||
| value = prop_replace(value) | |||||
| logger.debug(f'{self._package}: Replacing property {prop} with {value}') | |||||
| return value | return value | ||||
| return Package( | |||||
| *[ | |||||
| re.sub( | |||||
| r'\$\{([^\}]*)\}', | |||||
| prop_replace, | |||||
| elem.text or '' if (elem := dep.find(tag, ns)) is not None else '', | |||||
| ) | |||||
| def prop_replace(text) -> str: | |||||
| logger.debug(f'{self._package}: Getting prop {text}') | |||||
| return re.sub( | |||||
| r'\$\{([^\}]*)\}', | |||||
| lookup_prop, | |||||
| text, | |||||
| ) | |||||
| for tag in [ | |||||
| 'groupId', | |||||
| 'artifactId', | |||||
| 'version', | |||||
| ] | |||||
| ] | |||||
| def prop_replace_tag(tag) -> str: | |||||
| return prop_replace( | |||||
| elem.text or '' if (elem := dep.find(tag, ns)) is not None else '', | |||||
| ) | |||||
| return Package( | |||||
| groupId=prop_replace_tag('groupId'), | |||||
| artifactId=prop_replace_tag('artifactId'), | |||||
| version=prop_replace_tag('version'), | |||||
| ) | ) | ||||
| @property | @property | ||||