Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4082863b5a | ||
|
|
cc564af44e | ||
|
|
655ed2255a | ||
|
|
96b22744ec | ||
|
|
130d0bc7a0 | ||
|
|
1469e37c38 |
@@ -213,6 +213,9 @@ class Notification(db.Model):
|
|||||||
url = db.Column(db.String(200), nullable=True)
|
url = db.Column(db.String(200), nullable=True)
|
||||||
|
|
||||||
def __init__(self, us, cau, titl, ur):
|
def __init__(self, us, cau, titl, ur):
|
||||||
|
if len(titl) > 100:
|
||||||
|
title = title[:99] + "…"
|
||||||
|
|
||||||
self.user = us
|
self.user = us
|
||||||
self.causer = cau
|
self.causer = cau
|
||||||
self.title = titl
|
self.title = titl
|
||||||
@@ -395,7 +398,7 @@ class Package(db.Model):
|
|||||||
forums = db.Column(db.Integer, nullable=True)
|
forums = db.Column(db.Integer, nullable=True)
|
||||||
|
|
||||||
provides = db.relationship("MetaPackage", secondary=provides, lazy="subquery",
|
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])
|
dependencies = db.relationship("Dependency", backref="depender", lazy="dynamic", foreign_keys=[Dependency.depender_id])
|
||||||
|
|
||||||
@@ -438,6 +441,13 @@ class Package(db.Model):
|
|||||||
else:
|
else:
|
||||||
return "ready"
|
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):
|
def getAsDictionaryShort(self, base_url, version=None, protonum=None):
|
||||||
tnurl = self.getThumbnailURL(1)
|
tnurl = self.getThumbnailURL(1)
|
||||||
release = self.getDownloadRelease(version=version, protonum=protonum)
|
release = self.getDownloadRelease(version=version, protonum=protonum)
|
||||||
|
|||||||
@@ -299,15 +299,17 @@ def cloneRepo(urlstr, ref=None, recursive=False):
|
|||||||
gitUrl = generateGitURL(urlstr)
|
gitUrl = generateGitURL(urlstr)
|
||||||
print("Cloning from " + gitUrl)
|
print("Cloning from " + gitUrl)
|
||||||
repo = git.Repo.clone_from(gitUrl, gitDir, \
|
repo = git.Repo.clone_from(gitUrl, gitDir, \
|
||||||
progress=None, env=None, depth=1, recursive=recursive, kill_after_timeout=15)
|
progress=None, env=None, depth=1, recursive=recursive, kill_after_timeout=15, b=ref)
|
||||||
|
|
||||||
if ref is not None:
|
|
||||||
repo.create_head("myhead", ref).checkout()
|
|
||||||
return gitDir, repo
|
return gitDir, repo
|
||||||
|
|
||||||
except GitCommandError as e:
|
except GitCommandError as e:
|
||||||
# This is needed to stop the backtrace being weird
|
# This is needed to stop the backtrace being weird
|
||||||
err = e.stderr
|
err = e.stderr
|
||||||
|
|
||||||
|
except gitdb.exc.BadName as e:
|
||||||
|
err = "Unable to find the reference " + (ref or "?") + "\n" + e.stderr
|
||||||
|
|
||||||
raise TaskError(err.replace("stderr: ", "") \
|
raise TaskError(err.replace("stderr: ", "") \
|
||||||
.replace("Cloning into '" + gitDir + "'...", "") \
|
.replace("Cloning into '" + gitDir + "'...", "") \
|
||||||
.strip())
|
.strip())
|
||||||
|
|||||||
@@ -32,12 +32,42 @@ def api_packages_page():
|
|||||||
for package in query.all()]
|
for package in query.all()]
|
||||||
return jsonify(pkgs)
|
return jsonify(pkgs)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/api/packages/<author>/<name>/")
|
@app.route("/api/packages/<author>/<name>/")
|
||||||
@is_package_page
|
@is_package_page
|
||||||
def api_package_page(package):
|
def api_package_page(package):
|
||||||
return jsonify(package.getAsDictionary(app.config["BASE_URL"]))
|
return jsonify(package.getAsDictionary(app.config["BASE_URL"]))
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/api/packages/<author>/<name>/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/")
|
@app.route("/api/topics/")
|
||||||
def api_topics_page():
|
def api_topics_page():
|
||||||
qb = QueryBuilder(request.args)
|
qb = QueryBuilder(request.args)
|
||||||
|
|||||||
@@ -180,9 +180,9 @@ class PackageForm(FlaskForm):
|
|||||||
tags = QuerySelectMultipleField('Tags', query_factory=lambda: Tag.query.order_by(db.asc(Tag.name)), get_pk=lambda a: a.id, get_label=lambda a: a.title)
|
tags = QuerySelectMultipleField('Tags', query_factory=lambda: Tag.query.order_by(db.asc(Tag.name)), get_pk=lambda a: a.id, get_label=lambda a: a.title)
|
||||||
harddep_str = StringField("Hard Dependencies", [Optional()])
|
harddep_str = StringField("Hard Dependencies", [Optional()])
|
||||||
softdep_str = StringField("Soft Dependencies", [Optional()])
|
softdep_str = StringField("Soft Dependencies", [Optional()])
|
||||||
repo = StringField("VCS Repository URL", [Optional(), URL()])
|
repo = StringField("VCS Repository URL", [Optional(), URL()], filters = [lambda x: x or None])
|
||||||
website = StringField("Website URL", [Optional(), URL()])
|
website = StringField("Website URL", [Optional(), URL()], filters = [lambda x: x or None])
|
||||||
issueTracker = StringField("Issue Tracker URL", [Optional(), URL()])
|
issueTracker = StringField("Issue Tracker URL", [Optional(), URL()], filters = [lambda x: x or None])
|
||||||
forums = IntegerField("Forum Topic ID", [Optional(), NumberRange(0,999999)])
|
forums = IntegerField("Forum Topic ID", [Optional(), NumberRange(0,999999)])
|
||||||
submit = SubmitField("Save")
|
submit = SubmitField("Save")
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class CreatePackageReleaseForm(FlaskForm):
|
|||||||
class EditPackageReleaseForm(FlaskForm):
|
class EditPackageReleaseForm(FlaskForm):
|
||||||
title = StringField("Title", [InputRequired(), Length(1, 30)])
|
title = StringField("Title", [InputRequired(), Length(1, 30)])
|
||||||
url = StringField("URL", [URL])
|
url = StringField("URL", [URL])
|
||||||
task_id = StringField("Task ID")
|
task_id = StringField("Task ID", filters = [lambda x: x or None])
|
||||||
approved = BooleanField("Is Approved")
|
approved = BooleanField("Is Approved")
|
||||||
min_rel = QuerySelectField("Minimum Minetest Version", [InputRequired()],
|
min_rel = QuerySelectField("Minimum Minetest Version", [InputRequired()],
|
||||||
query_factory=lambda: get_mt_releases(False), get_pk=lambda a: a.id, get_label=lambda a: a.name)
|
query_factory=lambda: get_mt_releases(False), get_pk=lambda a: a.id, get_label=lambda a: a.name)
|
||||||
@@ -164,7 +164,7 @@ def edit_release_page(package, id):
|
|||||||
if package.checkPerm(current_user, Permission.CHANGE_RELEASE_URL):
|
if package.checkPerm(current_user, Permission.CHANGE_RELEASE_URL):
|
||||||
release.url = form["url"].data
|
release.url = form["url"].data
|
||||||
release.task_id = form["task_id"].data
|
release.task_id = form["task_id"].data
|
||||||
if release.task_id.strip() == "":
|
if release.task_id is not None:
|
||||||
release.task_id = None
|
release.task_id = None
|
||||||
|
|
||||||
if canApprove:
|
if canApprove:
|
||||||
|
|||||||
@@ -31,9 +31,9 @@ from app.tasks.phpbbparser import getProfile
|
|||||||
# Define the User profile form
|
# Define the User profile form
|
||||||
class UserProfileForm(FlaskForm):
|
class UserProfileForm(FlaskForm):
|
||||||
display_name = StringField("Display name", [Optional(), Length(2, 20)])
|
display_name = StringField("Display name", [Optional(), Length(2, 20)])
|
||||||
email = StringField("Email", [Optional(), Email()])
|
email = StringField("Email", [Optional(), Email()], filters = [lambda x: x or None])
|
||||||
website_url = StringField("Website URL", [Optional(), URL()])
|
website_url = StringField("Website URL", [Optional(), URL()], filters = [lambda x: x or None])
|
||||||
donate_url = StringField("Donation URL", [Optional(), URL()])
|
donate_url = StringField("Donation URL", [Optional(), URL()], filters = [lambda x: x or None])
|
||||||
rank = SelectField("Rank", [Optional()], choices=UserRank.choices(), coerce=UserRank.coerce, default=UserRank.NEW_MEMBER)
|
rank = SelectField("Rank", [Optional()], choices=UserRank.choices(), coerce=UserRank.coerce, default=UserRank.NEW_MEMBER)
|
||||||
submit = SubmitField("Save")
|
submit = SubmitField("Save")
|
||||||
|
|
||||||
@@ -162,8 +162,8 @@ def send_email_page(username):
|
|||||||
|
|
||||||
class SetPasswordForm(FlaskForm):
|
class SetPasswordForm(FlaskForm):
|
||||||
email = StringField("Email", [Optional(), Email()])
|
email = StringField("Email", [Optional(), Email()])
|
||||||
password = PasswordField("New password", [InputRequired(), Length(2, 20)])
|
password = PasswordField("New password", [InputRequired(), Length(2, 100)])
|
||||||
password2 = PasswordField("Verify password", [InputRequired(), Length(2, 20)])
|
password2 = PasswordField("Verify password", [InputRequired(), Length(2, 100)])
|
||||||
submit = SubmitField("Save")
|
submit = SubmitField("Save")
|
||||||
|
|
||||||
@app.route("/user/set-password/", methods=["GET", "POST"])
|
@app.route("/user/set-password/", methods=["GET", "POST"])
|
||||||
|
|||||||
@@ -33,5 +33,6 @@ services:
|
|||||||
- config.env
|
- config.env
|
||||||
volumes:
|
volumes:
|
||||||
- "./data/uploads:/home/cdb/app/public/uploads"
|
- "./data/uploads:/home/cdb/app/public/uploads"
|
||||||
|
- "./app:/home/cdb/app"
|
||||||
depends_on:
|
depends_on:
|
||||||
- redis
|
- redis
|
||||||
|
|||||||
@@ -18,4 +18,4 @@ GitPython~=2.1
|
|||||||
lxml~=4.2
|
lxml~=4.2
|
||||||
pillow~=5.3
|
pillow~=5.3
|
||||||
pyScss~=1.3
|
pyScss~=1.3
|
||||||
redis~=3.0
|
redis==2.10.6
|
||||||
|
|||||||
Reference in New Issue
Block a user