|
|
|
@@ -37,6 +37,8 @@ class TooManyRequestsException(Exception): |
|
|
|
|
|
|
|
class PackagePOM: |
|
|
|
def __init__(self, package: 'Package', pom: str): |
|
|
|
self._package = package |
|
|
|
|
|
|
|
logger.debug(f'{package}: Parsing POM') |
|
|
|
self.raw_root = ET.fromstring(pom) |
|
|
|
|
|
|
|
@@ -125,27 +127,41 @@ class PackagePOM: |
|
|
|
else: |
|
|
|
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) |
|
|
|
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 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 |
|
|
|
|