def parse_pom(location, check_is_pom=False): """ Return a MavenPom object from the Maven POM file at location. """ pom = _get_mavenpom(location, check_is_pom) if not pom: return {} return pom.to_dict()
def parse(location=None, text=None, check_is_pom=True, extra_properties=None): """ Return a MavenPomPackage or None. Parse a pom file at `location` or using the provided `text` (one or the other but not both). Check if the location is a POM if `check_is_pom` is True. When resolving the POM, use an optional `extra_properties` mapping of name/value pairs to resolve properties. """ pom = get_maven_pom(location, text, check_is_pom, extra_properties) if not pom: return if TRACE: logger.debug('parse: pom:.to_dict()\n{}'.format(pformat(pom.to_dict()))) version = pom.version # pymaven whart if version == 'latest.release': version = None qualifiers = {} classifier = pom.classifier if classifier: qualifiers['classifier'] = classifier packaging = pom.packaging if packaging: extension = get_extension(packaging) if extension and extension not in ('jar', 'pom'): # we use type as in the PURL spec: this is a problematic field with # complex defeinition in Maven qualifiers['type'] = extension declared_license = pom.licenses source_packages = [] # TODO: what does this mean???? if not classifier and all([pom.group_id, pom.artifact_id, version]): spurl = PackageURL( type=MavenPomPackage.default_type, namespace=pom.group_id, name=pom.artifact_id, version=version, # we hardcode the source qualifier for now... qualifiers=dict(classifier='sources')) source_packages = [spurl.to_string()] pname = pom.name or '' pdesc = pom.description or '' if pname == pdesc: description = pname else: description = [d for d in (pname, pdesc) if d] description = '\n'.join(description) issue_mngt = pom.issue_management or {} bug_tracking_url = issue_mngt.get('url') scm = pom.scm or {} vcs_url, code_view_url = build_vcs_and_code_view_urls(scm) # FIXME: there are still other data to map in a Package package = MavenPomPackage( namespace=pom.group_id, name=pom.artifact_id, version=version, qualifiers=qualifiers or None, description=description or None, homepage_url=pom.url or None, declared_license=declared_license or None, parties=get_parties(pom), dependencies=get_dependencies(pom), source_packages=source_packages, bug_tracking_url=bug_tracking_url, vcs_url=vcs_url, code_view_url=code_view_url, ) return package
def parse( location, datasource_id, package_type, primary_language, base_url='https://repo1.maven.org/maven2', ): """ Yield Packagedata objects from parsing a Maven pom file at `location` or using the provided `text` (one or the other but not both). """ pom = get_maven_pom(location=location) if not pom: return if TRACE: ptd = pformat(pom.to_dict()) logger.debug(f'PomXmlHandler.parse: pom:.to_dict()\n{ptd}') version = pom.version # pymaven whart if version == 'latest.release': version = None qualifiers = {} classifier = pom.classifier if classifier: qualifiers['classifier'] = classifier packaging = pom.packaging if packaging: extension = get_extension(packaging) if extension and extension not in ('jar', 'pom'): # we use type as in the PURL spec: this is a problematic field with # complex defeinition in Maven qualifiers['type'] = extension declared_license = pom.licenses group_id = pom.group_id artifact_id = pom.artifact_id # craft a source package purl for the main binary source_packages = [] is_main_binary_jar = not classifier and all( [group_id, artifact_id, version]) if is_main_binary_jar: spurl = PackageURL( type=package_type, namespace=group_id, name=artifact_id, version=version, # we hardcode the source qualifier for now... qualifiers=dict(classifier='sources')) source_packages = [spurl.to_string()] pname = pom.name or '' pdesc = pom.description or '' if pname == pdesc: description = pname else: description = [d for d in (pname, pdesc) if d] description = '\n'.join(description) issue_mngt = pom.issue_management or {} bug_tracking_url = issue_mngt.get('url') scm = pom.scm or {} urls = build_vcs_and_code_view_urls(scm) urls.update( get_urls( namespace=group_id, name=artifact_id, version=version, qualifiers=qualifiers, base_url=base_url, )) # FIXME: there are still other data to map in a PackageData package_data = models.PackageData( datasource_id=datasource_id, type=package_type, primary_language=primary_language, namespace=group_id, name=artifact_id, version=version, qualifiers=qualifiers or None, description=description or None, homepage_url=pom.url or None, declared_license=declared_license or None, parties=get_parties(pom), dependencies=get_dependencies(pom), source_packages=source_packages, bug_tracking_url=bug_tracking_url, **urls, ) if not package_data.license_expression and package_data.declared_license: package_data.license_expression = models.compute_normalized_license( package_data.declared_license) yield package_data