def index(): repo_name = AurBSConfig().public_repo['name'] try: repo_url = AurBSConfig().public_repo['http_url'] except KeyError: repo_url = url_for('public_repo', _external=True) return render_template("base.html", repo_name=repo_name, repo_url=repo_url)
def filter_dependencies(args, local=True, nofilter=False): deps = set() for arg in args: deps = deps.union(arg) if nofilter: return deps if local: return [d for d in deps if d in AurBSConfig().aurpkgs] else: return [d for d in deps if d not in AurBSConfig().aurpkgs]
def cleanup_orphaned(self): # cleanup pkgs and results, that are not in AurBSConfig().aurpkgs for pkg in self._db.packages.find({}): if pkg['name'] not in AurBSConfig().aurpkgs: self._db.packages.remove({'name': pkg['name']}) log.info("Cleanup orphaned db pkg-entry: %s" % pkg['name']) for rtype in ['build', 'problem']: for result in self.get_results(rtype): if result['name'] not in AurBSConfig().aurpkgs: self._db["%ss" % rtype].remove({'name': result['name']}) log.info("Cleanup orphaned db result-entry: %s" % result['name'])
def get_pkg_required_by(self, pkgname): pkgs = [] for pkg in AurBSConfig().aurpkgs: try: pkg = self.get_pkg(pkg) if pkgname in pkg['depends']: pkgs.append(pkg['name']) except KeyError: pass return pkgs
def package_list(): pkgs = [] query = request.args.get('query', None) for pkgname in AurBSConfig().aurpkgs: try: pkg = db.get_pkg(pkgname) except KeyError: pkg = dummy.aurpkg(pkgname) if query: if query not in pkg['name']: continue pkgs.append(pkg) if query and len(pkgs) == 1: return redirect(url_for('package_view', pkgname=pkgs[0]['name'])) pkgs = sorted(pkgs, key=lambda i: i['name']) return render_template("package_list.html", pkgs=pkgs)
def __init__(self): self._client = MongoClient(AurBSConfig().database['host'], AurBSConfig().database['port']) self._db = self._client[AurBSConfig().database['database']] if AurBSConfig().database.get('user'): try: self._db.authenticate(AurBSConfig().database['user'], AurBSConfig().database['pass']) log.info("Authentificated with database user '%s'" % AurBSConfig().database['user']) except Exception as e: print(e) raise FatalError("Authentification failed with database user '%s'" % AurBSConfig().database['user']) else: try: self._db.collection_names() except Exception: raise FatalError("Database requires authentification") self._db.packages.ensure_index("name", unique=True, dropDups=True) for rtype in ['build', 'problem']: self._db["%ss" % rtype].ensure_index("name")
def package_view(pkgname): try: pkg = db.get_pkg(pkgname) except KeyError: pkg = dummy.aurpkg(pkgname) building_arch = None try: status = db.get_status() if status['building'] == pkgname: building_arch = status['arch'] except KeyError: pass results = {} builds = {} for arch in pkg['arch']: if building_arch == arch or building_arch is not None and arch == 'any': results[arch] = { 'rtype': 'building', 'rvalue': { 'name': pkgname, 'build_arch': building_arch } } else: results[arch] = db.get_result(pkgname, build_arch=arch) if not results[arch]: if arch in AurBSConfig().architectures or arch == 'any': results[arch] = {'rtype': 'scheduled'} else: results[arch] = {'rtype': 'disabled'} try: builds[arch] = find_pkg_files(pkgname, directory=repodir(arch))[0] except (IndexError, FileNotFoundError): pass local_depends = filter_dependencies([pkg['depends']], local=True) required_by = db.get_pkg_required_by(pkgname) return render_template("package_view.html", pkg=pkg, results=results, local_depends=local_depends, required_by=required_by, builds=builds)
def public_repo_get(arch, pkg): if arch not in AurBSConfig().architectures and arch != 'any': return "invalid arch" else: return send_from_directory(repodir_public(arch), pkg)
def aurstaging_get(arch, pkg): if arch not in AurBSConfig().architectures and arch != 'any': return "404" else: return send_from_directory(repodir(arch), pkg)
#!/usr/bin/env python import os import sys from flask import Flask, render_template, request, redirect, url_for, jsonify, Response, send_file, send_from_directory sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/' + '../..')) from aurbs import dummy from aurbs.db import Database from aurbs.config import AurBSConfig from aurbs.static import * from aurbs.helper import * app = Flask(__name__) AurBSConfig("/etc/aurbs.yml") db = Database() @app.template_filter('datetimeformat') def datetimeformat(value, format='%Y-%m-%d %H:%M:%S'): return value.strftime(format) @app.route('/') def index(): repo_name = AurBSConfig().public_repo['name'] try: repo_url = AurBSConfig().public_repo['http_url'] except KeyError: repo_url = url_for('public_repo', _external=True) return render_template("base.html", repo_name=repo_name, repo_url=repo_url)