diff --git a/app/models.py b/app/models.py index a260154..9148f05 100644 --- a/app/models.py +++ b/app/models.py @@ -398,7 +398,7 @@ class Package(db.Model): forums = db.Column(db.Integer, nullable=True) provides = db.relationship("MetaPackage", secondary=provides, lazy="subquery", - backref=db.backref("packages", lazy="dynamic")) + backref=db.backref("packages", lazy="dynamic", order_by=db.desc("score"))) dependencies = db.relationship("Dependency", backref="depender", lazy="dynamic", foreign_keys=[Dependency.depender_id]) @@ -441,6 +441,13 @@ class Package(db.Model): else: return "ready" + def getAsDictionaryKey(self): + return { + "name": self.name, + "author": self.author.display_name, + "type": self.type.toName(), + } + def getAsDictionaryShort(self, base_url, version=None, protonum=None): tnurl = self.getThumbnailURL(1) release = self.getDownloadRelease(version=version, protonum=protonum) diff --git a/app/views/api.py b/app/views/api.py index 6d54fdf..ba42aca 100644 --- a/app/views/api.py +++ b/app/views/api.py @@ -32,12 +32,42 @@ def api_packages_page(): for package in query.all()] return jsonify(pkgs) + @app.route("/api/packages///") @is_package_page def api_package_page(package): return jsonify(package.getAsDictionary(app.config["BASE_URL"])) +@app.route("/api/packages///dependencies/") +@is_package_page +def api_package_deps_page(package): + ret = [] + + for dep in package.dependencies: + name = None + fulfilled_by = None + + if dep.package: + name = dep.package.name + fulfilled_by = [ dep.package.getAsDictionaryKey() ] + + elif dep.meta_package: + name = dep.meta_package.name + fulfilled_by = [ pkg.getAsDictionaryKey() for pkg in dep.meta_package.packages] + + else: + raise "Malformed dependency" + + ret.append({ + "name": name, + "is_optional": dep.optional, + "packages": fulfilled_by + }) + + return jsonify(ret) + + @app.route("/api/topics/") def api_topics_page(): qb = QueryBuilder(request.args) diff --git a/docker-compose.yml b/docker-compose.yml index a7e71e6..be02d76 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -33,5 +33,6 @@ services: - config.env volumes: - "./data/uploads:/home/cdb/app/public/uploads" + - "./app:/home/cdb/app" depends_on: - redis diff --git a/requirements.txt b/requirements.txt index 7926abd..7f19020 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,4 +18,4 @@ GitPython~=2.1 lxml~=4.2 pillow~=5.3 pyScss~=1.3 -redis~=3.0 +redis==2.10.6