Exemple #1
0
    def get_objects(self, packagename, version):
        try:
            sources_path = helper.get_sources_path(session, packagename,
                                                   version,
                                                   current_app.config)
        except (FileOrFolderNotFound, InvalidPackageOrVersionError) as e:
            if isinstance(e, FileOrFolderNotFound):
                raise Http404MissingCopyright(packagename, version, '')
            else:
                raise Http404ErrorSuggestions(packagename, version, '')

        try:
            c = helper.parse_license(sources_path)
        except Exception:
            # non machine readable license
            sourcefile = SourceCodeIterator(sources_path)
            return dict(package=packagename,
                        version=version,
                        code=sourcefile,
                        dump='True',
                        nlines=sourcefile.get_number_of_lines(),)
        return dict(package=packagename,
                    version=version,
                    dump='False',
                    header=helper.get_copyright_header(c),
                    files=helper.parse_copyright_paragraphs_for_html_render(
                        c, "/src/" + packagename + "/" + version + "/"),
                    licenses=helper.parse_licenses_for_html_render(c))
Exemple #2
0
    def get_objects(self, packagename, version):
        try:
            sources_path = helper.get_sources_path(session, packagename,
                                                   version, current_app.config)
        except (FileOrFolderNotFound, InvalidPackageOrVersionError) as e:
            if isinstance(e, FileOrFolderNotFound):
                raise Http404MissingCopyright(packagename, version, "")
            else:
                raise Http404ErrorSuggestions(packagename, version, "")

        try:
            c = helper.parse_license(sources_path)
        except Exception:
            # non machine readable license
            sourcefile = SourceCodeIterator(sources_path)
            return dict(
                package=packagename,
                version=version,
                code=sourcefile,
                dump="True",
                nlines=sourcefile.get_number_of_lines(),
            )
        return dict(
            package=packagename,
            version=version,
            dump="False",
            header=helper.get_copyright_header(c),
            files=helper.parse_copyright_paragraphs_for_html_render(
                c, "/src/" + packagename + "/" + version + "/"),
            licenses=helper.parse_licenses_for_html_render(c),
        )
def add_package(session, pkg, pkgdir, file_table):
    global conf
    logging.debug('add-package %s' % pkg)

    license_file = license_path(pkgdir)
    license_file_tmp = license_file + '.new'

    try:
        c = helper.parse_license(os.path.join(pkgdir, 'debian/copyright'))
    except copyright.NotMachineReadableError:
        return

    def emit_license(out, package, version, relpath, copyright):
        """ Retrieve license of the file. We use `relpath` as we want the path
            inside the package directory which is used in the d/copyright files
            paragraphs
        """
        synopsis = helper.get_license(package, version, relpath, copyright)
        if synopsis is not None:
            s = '%s\t%s\n' % (synopsis, relpath.decode('utf-8'))
            out.write(s)

    if 'hooks.fs' in conf['backends']:
        if not os.path.exists(license_file):  # run license only if needed
            with io.open(license_file_tmp, 'w', encoding='utf-8') as out:
                for (relpath, abspath) in \
                        fs_storage.walk_pkg_files(pkgdir, file_table):
                    emit_license(out, pkg['package'], pkg['version'],
                                 relpath, c)
            os.rename(license_file_tmp, license_file)

    if 'hooks.db' in conf['backends']:
        db_package = db_storage.lookup_package(session, pkg['package'],
                                               pkg['version'])
        if not session.query(FileCopyright).join(File)\
                      .filter(File.package_id == db_package.id).first():
            # ASSUMPTION: if *a* license of this package has already been
            # added to the db in the past, then *all* of them have, as
            # additions are part of the same transaction
            licenses = parse_license_file(license_file)
            for (synopsis, path) in licenses:
                if file_table:
                    try:
                        file_id = file_table[path]
                    except KeyError:
                        continue
                else:
                    file_ = session.query(File) \
                                   .filter_by(package_id=db_package.id,
                                              path=path) \
                                   .first()
                    if not file_:
                        continue
                    file_id = file_.id
                license = FileCopyright(file_id, 'debian', synopsis)
                session.add(license)
Exemple #4
0
def add_package(session, pkg, pkgdir, file_table):
    global conf
    logging.debug('add-package %s' % pkg)

    license_file = license_path(pkgdir)
    license_file_tmp = license_file + '.new'

    try:
        c = helper.parse_license(os.path.join(pkgdir, 'debian/copyright'))
    except copyright.NotMachineReadableError:
        return

    def emit_license(out, package, version, relpath, copyright):
        """ Retrieve license of the file. We use `relpath` as we want the path
            inside the package directory which is used in the d/copyright files
            paragraphs
        """
        synopsis = helper.get_license(package, version, relpath, copyright)
        if synopsis is not None:
            s = '%s\t%s\n' % (synopsis, relpath.decode('utf-8'))
            out.write(s)

    if 'hooks.fs' in conf['backends']:
        if not os.path.exists(license_file):  # run license only if needed
            with io.open(license_file_tmp, 'w', encoding='utf-8') as out:
                for (relpath, abspath) in \
                        fs_storage.walk_pkg_files(pkgdir, file_table):
                    emit_license(out, pkg['package'], pkg['version'], relpath,
                                 c)
            os.rename(license_file_tmp, license_file)

    if 'hooks.db' in conf['backends']:
        db_package = db_storage.lookup_package(session, pkg['package'],
                                               pkg['version'])
        if not session.query(FileCopyright).join(File)\
                      .filter(File.package_id == db_package.id).first():
            # ASSUMPTION: if *a* license of this package has already been
            # added to the db in the past, then *all* of them have, as
            # additions are part of the same transaction
            licenses = parse_license_file(license_file)
            for (synopsis, path) in licenses:
                if file_table:
                    try:
                        file_id = file_table[path]
                    except KeyError:
                        continue
                else:
                    file_ = session.query(File) \
                                   .filter_by(package_id=db_package.id,
                                              path=path) \
                                   .first()
                    if not file_:
                        continue
                    file_id = file_.id
                license = FileCopyright(file_id, 'debian', synopsis)
                session.add(license)
Exemple #5
0
def add_package(session, pkg, pkgdir, file_table):
    global conf
    logging.debug("add-package %s" % pkg)

    license_file = license_path(pkgdir)
    license_file_tmp = Path(str(license_file) + ".new")

    try:
        c = helper.parse_license(pkgdir / "debian/copyright")
    except copyright.NotMachineReadableError:
        return

    def emit_license(out, package, version, relpath, copyright):
        """Retrieve license of the file. We use `relpath` as we want the path
        inside the package directory which is used in the d/copyright files
        paragraphs
        """
        synopsis = helper.get_license(package, version, relpath, copyright)
        if synopsis is not None:
            s = b"%s\t%s\n" % (synopsis.encode("utf8"), relpath)
            out.write(s)

    if "hooks.fs" in conf["backends"]:
        if not license_file.exists():  # run license only if needed
            with io.open(license_file_tmp, "wb") as out:
                for relpath in file_table:
                    emit_license(out, pkg["package"], pkg["version"], relpath,
                                 c)
            os.rename(license_file_tmp, license_file)

    if "hooks.db" in conf["backends"]:
        db_package = db_storage.lookup_package(session, pkg["package"],
                                               pkg["version"])
        if (not session.query(FileCopyright).join(
                File, File.id == FileCopyright.file_id).filter(
                    File.package_id == db_package.id).first()):
            # ASSUMPTION: if *a* license of this package has already been
            # added to the db in the past, then *all* of them have, as
            # additions are part of the same transaction
            licenses = parse_license_file(license_file)
            for (synopsis, path) in licenses:
                if file_table:
                    try:
                        file_id = file_table[path]
                    except KeyError:
                        continue
                else:
                    file_ = (session.query(File).filter_by(
                        package_id=db_package.id, path=path).first())
                    if not file_:
                        continue
                    file_id = file_.id
                license = FileCopyright(file_id, "debian", synopsis)
                session.add(license)
Exemple #6
0
    def get_objects(self, path_to):
        path_dict = path_to.split('/')

        package = path_dict[0]
        version = path_dict[1]

        if len(path_dict) > 2:
            raise Http404ErrorSuggestions(package, version, '')

        path = '/'.join(path_dict[2:])

        if version == "latest":  # we search the latest available version
            return self._handle_latest_version(request.endpoint,
                                               package, path)

        versions = self.handle_versions(version, package, path)
        if versions:
            redirect_url_parts = [package, versions[-1]]
            if path:
                redirect_url_parts.append(path)
            redirect_url = '/'.join(redirect_url_parts)
            return self._redirect_to_url(request.endpoint,
                                         redirect_url, redirect_code=302)

        try:
            sources_path = helper.get_sources_path(session, package, version,
                                                   current_app.config)
        except (FileOrFolderNotFound, InvalidPackageOrVersionError) as e:
            if isinstance(e, FileOrFolderNotFound):
                raise Http404MissingCopyright(package, version, '')
            else:
                raise Http404ErrorSuggestions(package, version, '')

        try:
            c = helper.parse_license(sources_path)
        except Exception:
            # non machine readable license
            sourcefile = SourceCodeIterator(sources_path)
            return dict(package=package,
                        version=version,
                        code=sourcefile,
                        dump='True',
                        nlines=sourcefile.get_number_of_lines(),)
        return dict(package=package,
                    version=version,
                    dump='False',
                    header=helper.get_copyright_header(c),
                    files=helper.parse_copyright_paragraphs_for_html_render(
                        c, "/src/" + package + "/" + version + "/"),
                    licenses=helper.parse_licenses_for_html_render(c))
Exemple #7
0
    def _license_of_files(self, f):
        # once DB full, remove license path
        try:
            license_path = helper.get_sources_path(session, f.package,
                                                   f.version,
                                                   current_app.config)
        except (FileOrFolderNotFound, InvalidPackageOrVersionError):
            raise Http404ErrorSuggestions(f.package, f.version, '')

        try:
            c = helper.parse_license(license_path)
            l = helper.get_license(f.package, f.version, f.path, c)
        except copyright.NotMachineReadableError:
            l = None
        return dict(oracle='debian',
                    path=f.path,
                    package=f.package,
                    version=f.version,
                    license=l,
                    origin=helper.license_url(f.package, f.version))
Exemple #8
0
    def _license_of_files(self, f):
        # once DB full, remove license path
        try:
            license_path = helper.get_sources_path(session, f.package,
                                                   f.version,
                                                   current_app.config)
        except (FileOrFolderNotFound, InvalidPackageOrVersionError):
            raise Http404ErrorSuggestions(f.package, f.version, '')

        try:
            c = helper.parse_license(license_path)
            l = helper.get_license(f.package, f.version, f.path, c)
        except copyright.NotMachineReadableError:
            l = None
        return dict(oracle='debian',
                    path=f.path,
                    package=f.package,
                    version=f.version,
                    license=l,
                    origin=helper.license_url(f.package, f.version))
Exemple #9
0
 def _get_license_dict(self, files):
     result = []
     for f in files:
         try:
             # once DB full, remove license path
             try:
                 license_path = helper.get_sources_path(
                     session, f["package"], f["version"],
                     current_app.config)
             except (FileOrFolderNotFound, InvalidPackageOrVersionError):
                 raise Http404ErrorSuggestions(f["package"], f["version"],
                                               "")
             # parse file
             try:
                 c = helper.parse_license(license_path)
                 license = helper.get_license(f["package"], f["version"],
                                              f["path"], c)
             except copyright.NotMachineReadableError:
                 license = None
             result.append(
                 dict(
                     oracle="debian",
                     path=f["path"],
                     package=f["package"],
                     version=f["version"],
                     license=license,
                     origin=helper.license_url(f["package"], f["version"]),
                 ))
         except Exception:
             result.append(
                 dict(
                     oracle="debian",
                     path=f["path"],
                     package=f["package"],
                     version=f["version"],
                     license=None,
                     origin=helper.license_url(f["package"], f["version"]),
                 ))
     return result
Exemple #10
0
 def _get_license_dict(self, files):
     result = []
     for f in files:
         try:
             # once DB full, remove license path
             try:
                 license_path = helper.get_sources_path(session,
                                                        f['package'],
                                                        f['version'],
                                                        current_app.config)
             except (FileOrFolderNotFound, InvalidPackageOrVersionError):
                 raise Http404ErrorSuggestions(f['package'], f['version'],
                                               '')
             # parse file
             try:
                 c = helper.parse_license(license_path)
                 l = helper.get_license(f['package'], f['version'],
                                        f['path'], c)
             except copyright.NotMachineReadableError:
                 l = None
             result.append(dict(oracle='debian',
                                path=f['path'],
                                package=f['package'],
                                version=f['version'],
                                license=l,
                                origin=helper.license_url(f['package'],
                                                          f['version'])))
         except Exception:
             result.append(dict(oracle='debian',
                                path=f['path'],
                                package=f['package'],
                                version=f['version'],
                                license=None,
                                origin=helper.license_url(f['package'],
                                                          f['version'])))
     return result