def get_architecture_detail(codename, component, architecture): """Render a view listing all of the packages referenced by the selected architecture""" g.breadcrumb = [{'name': 'browse', 'url': url_for('get_repository_detail')}, {'name': codename, 'url': url_for('get_codename_detail', codename=codename)}, {'name': component, 'url': url_for('get_component_detail', codename=codename, component=component)}, {'name': architecture, 'url': request.path},] # setup filters on component/architecture, str() cast is required for # subprocess. unicode is unsupported. repository = Repository(settings.basedir) repository.options.components = [str(component)] repository.options.architectures = [str(architecture)] package_list = repository.list(str(codename)) repository.options.components = [] repository.options.architectures = [] for package in package_list: package['version_url'] = url_for('get_package_detail', codename = package.get('codename'), component = package.get('component'), architecture = package.get('architecture'), package = package.get('package'), version = package.get('version')) package['package_url'] = url_for('get_package_versions', codename = package.get('codename'), component = package.get('component'), architecture = package.get('architecture'), package = package.get('package')) return render_template('api/packages.html', packages=sorted(package_list), codename=codename, component=component, architecture=architecture)
def get_package_versions(codename, component, architecture, package): g.breadcrumb = [{'name': 'browse', 'url': url_for('get_repository_detail')}, {'name': codename, 'url': url_for('get_codename_detail', codename=codename)}, {'name': component, 'url': url_for('get_component_detail', codename=codename, component=component)}, {'name': architecture, 'url': url_for('get_architecture_detail', codename=codename, component=component, architecture=architecture)}, {'name': package, 'url': request.path},] # get any un-referenced versions of our package name repository = Repository(settings.basedir) all_versions = repository.list(codename, package) print all_versions return render_template('api/detail/package.html', package=package, versions=all_versions)
def get_repository_detail(): """Render a view listing all of the distributions configured in the repository""" g.breadcrumb = [ {'name': 'browse', 'url': url_for('get_repository_detail')}, ] repository = Repository(settings.basedir) codenames = repository.list_dists() packages = [] for dist in repository.list_dists(): packages.extend(repository.list(dist['Codename'])) for codename in codenames: codename['Url'] = url_for('get_codename_detail', codename=codename.get('Codename','#')) codename['Package Count'] = len([x for x in packages]) return render_template('api/detail/repository.html', codenames=codenames)
def get_codename_detail(codename): """Render a view listing all of the components of the selected distribution""" g.breadcrumb = [{'name': 'browse', 'url': url_for('get_repository_detail')}, {'name': codename, 'url': request.path},] repository = Repository(settings.basedir) components = repository.list_components(codename) packages = repository.list(codename) if components: for c in components: c['url'] = url_for('get_component_detail', codename=codename, component=c['component']) c['count'] = len( [x for x in packages if x['component'] == c['component']] ) return render_template('api/detail/codename.html', codename=codename, components=components) return render_template('api/detail/codename.html', codename=codename)
def get_component_detail(codename, component): """Render a view listing all of the architectures of the selected component""" g.breadcrumb = [{'name': 'browse', 'url': url_for('get_repository_detail')}, {'name': codename, 'url': url_for('get_codename_detail', codename=codename)}, {'name': component, 'url': request.path},] repository = Repository(settings.basedir) archs = repository.list_architectures(codename) packages = repository.list(codename) if archs: for a in archs: a['url'] = url_for('get_architecture_detail', codename=codename, component=component, architecture=a['architecture']) a['count'] = len( [x for x in packages if x['component'] == component and x['architecture'] == a['architecture'] ] ) return render_template('api/detail/component.html', codename=codename, component=component, archs=archs) return render_template('api/detail/component.html', codename=codename, component=component)
def get_packages(): """Render a view listing _all_ of the packages within the repository.""" g.breadcrumb = [ {'name': 'search', 'url': request.path}, ] repository = Repository(settings.basedir) package_list = [] for dist in repository.list_dists(): package_list.extend(repository.list(dist['Codename'])) for package in package_list: package['url'] = url_for('get_package_detail', codename = package.get('codename'), component = package.get('component'), architecture = package.get('architecture'), package = package.get('package'), version = package.get('version') ) return render_template('api/packages.html', packages=sorted(package_list))
def get_package_detail(codename, component, architecture, package, version, format=None): app.logger.info(request.path) g.breadcrumb = [{'name': 'browse', 'url': url_for('get_repository_detail')}, {'name': codename, 'url': url_for('get_codename_detail', codename=codename)}, {'name': component, 'url': url_for('get_component_detail', codename=codename, component=component)}, {'name': architecture, 'url': url_for('get_architecture_detail', codename=codename, component=component, architecture=architecture)}, {'name': package, 'url': url_for('get_package_versions', codename=codename, component=component, architecture=architecture, package=package)}, {'name': version, 'url': request.path},] # get any un-referenced versions of our package name repository = Repository(settings.basedir) all_versions = repository.list(codename, package) try: reference = cache(settings).read(repository, codename, component, architecture, package, version) app.logger.debug('Rendering from cache') except Exception as e: # loop through the references until we find a match. Cache it out afterwards # so that we don't have to do this again. app.logger.info(e) for ref in repository.dumpreferences(): if ref['package'] == package and ref['version'] == version: ref['deb'] = os.path.join(repository.options.basedir, ref['deb']) try: (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(ref['deb']) ref['stats'] = {'mtime': time.ctime(mtime), 'ctime': time.ctime(ctime), 'user': pwd.getpwuid(uid).pw_gecos, 'size': size} except Exception as e: app.logger.warn(e) try: cache(settings).write(repository, codename, component, architecture, package, ref['version'], ref) reference = ref except Exception as e: # unable to cache result. reference local variable will not have been set. app.logger.warn('unable to cache') app.logger.warn(e) if 'reference' in locals(): return render_template('api/detail/version.html', package=package, reference=reference, versions=all_versions) return render_template('api/detail/version.html', package=package)