Пример #1
0
def parse(location):
    """
    Return a Package object from a .podspec file or None.
    """
    if not is_podspec(location):
        return

    podspec_object = Spec()
    podspec_data = podspec_object.parse_spec(location)
    return build_package(podspec_data)
Пример #2
0
def build_packages_from_gemspec(location):
    """
    Return RubyGem Package from gemspec file.
    """
    gemspec_object = Spec()
    gemspec_data = gemspec_object.parse_spec(location)
    
    name = gemspec_data.get('name')
    version = gemspec_data.get('version')
    homepage_url = gemspec_data.get('homepage_url')
    summary = gemspec_data.get('summary')
    description = gemspec_data.get('description')
    if len(summary) > len(description):
        description = summary

    declared_license = gemspec_data.get('license')
    if declared_license:
        declared_license = declared_license.split(',')

    author = gemspec_data.get('author') or []
    email = gemspec_data.get('email') or []
    parties = list(party_mapper(author, email))

    package = RubyGem(
        name=name,
        version=version,
        parties=parties,
        homepage_url=homepage_url,
        description=description,
        declared_license=declared_license
    )

    dependencies = gemspec_data.get('dependencies', {}) or {}
    package_dependencies = []
    for name, version in dependencies.items():
        package_dependencies.append(
            models.DependentPackage(
                purl=PackageURL(
                    type='gem',
                    name=name
                ).to_string(),
                requirement=', '.join(version),
                scope='dependencies',
                is_runtime=True,
                is_optional=False,
                is_resolved=False,
            )
        )
    package.dependencies = package_dependencies

    return package
Пример #3
0
    def recognize(cls, location):
        """
        Yield one or more Package manifest objects given a file ``location`` pointing to a
        package archive, manifest or similar.
        """
        gemspec_object = Spec()
        gemspec_data = gemspec_object.parse_spec(location)

        name = gemspec_data.get('name')
        version = gemspec_data.get('version')
        homepage_url = gemspec_data.get('homepage_url')
        summary = gemspec_data.get('summary')
        description = gemspec_data.get('description')
        if len(summary) > len(description):
            description = summary

        declared_license = gemspec_data.get('license')
        if declared_license:
            declared_license = declared_license.split(',')

        author = gemspec_data.get('author') or []
        email = gemspec_data.get('email') or []
        parties = list(party_mapper(author, email))

        package_manifest = cls(name=name,
                               version=version,
                               parties=parties,
                               homepage_url=homepage_url,
                               description=description,
                               declared_license=declared_license)

        dependencies = gemspec_data.get('dependencies', {}) or {}
        package_dependencies = []
        for name, version in dependencies.items():
            package_dependencies.append(
                models.DependentPackage(
                    purl=PackageURL(type='gem', name=name).to_string(),
                    requirement=', '.join(version),
                    scope='dependencies',
                    is_runtime=True,
                    is_optional=False,
                    is_resolved=False,
                ))
        package_manifest.dependencies = package_dependencies

        yield package_manifest
Пример #4
0
    def recognize(cls, location):
        """
        Yield one or more Package manifest objects given a file ``location`` pointing to a
        package archive, manifest or similar.
        """
        podspec_object = Spec()
        data = podspec_object.parse_spec(location)

        name = data.get('name')
        version = data.get('version')
        declared_license = data.get('license')
        summary = data.get('summary', '')
        description = data.get('description', '')
        homepage_url = data.get('homepage_url')
        source = data.get('source')
        authors = data.get('author') or []
        if summary and not description.startswith(summary):
            desc = [summary]
            if description:
                desc += [description]
            description = '\n'.join(desc)

        author_names = []
        author_email = []
        if authors:
            for split_author in authors:
                split_author = split_author.strip()
                author, email = parse_person(split_author)
                author_names.append(author)
                author_email.append(email)

        parties = list(party_mapper(author_names, author_email))

        yield cls(
            name=name,
            version=version,
            vcs_url=source,
            source_packages=list(source.split('\n')),
            description=description,
            declared_license=declared_license,
            homepage_url=homepage_url,
            parties=parties
        )
Пример #5
0
def parse(location):
    """
    Return a Package object from:
    1. `.podspec` files
    2. `.podspec.json` files
    3. `podfile.lock` files
    or returns None otherwise.
    """
    if is_podspec(location):
        podspec_object = Spec()
        podspec_data = podspec_object.parse_spec(location)
        return build_package(podspec_data)

    if is_podspec_json(location):
        podspec_json_data = read_podspec_json(location)
        return build_xcode_package(podspec_json_data)

    if is_podfile_lock(location):
        podfile_lock_data = read_podfile_lock(location)
        return build_xcode_package_from_lockfile(podfile_lock_data)