From d54cbc539b328adf35f97adf7106502efe671eb3 Mon Sep 17 00:00:00 2001 From: Sindre Stephansen Date: Wed, 28 Dec 2022 13:12:27 +0100 Subject: [PATCH] WIP: resolve nested properties --- update-poms.py | 50 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/update-poms.py b/update-poms.py index 91cbf3a..2fc4007 100755 --- a/update-poms.py +++ b/update-poms.py @@ -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