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 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)
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)
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))
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))
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
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