Add dependency support
This commit is contained in:
parent
47432ea7e4
commit
acad90c312
|
@ -218,13 +218,23 @@ class PackagePropertyKey(enum.Enum):
|
||||||
|
|
||||||
def convert(self, value):
|
def convert(self, value):
|
||||||
if self == PackagePropertyKey.tags:
|
if self == PackagePropertyKey.tags:
|
||||||
return ','.join([t.title for t in value])
|
return ",".join([t.title for t in value])
|
||||||
else:
|
else:
|
||||||
return str(value)
|
return str(value)
|
||||||
|
|
||||||
tags = db.Table('tags',
|
tags = db.Table("tags",
|
||||||
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'), primary_key=True),
|
db.Column("tag_id", db.Integer, db.ForeignKey("tag.id"), primary_key=True),
|
||||||
db.Column('package_id', db.Integer, db.ForeignKey('package.id'), primary_key=True)
|
db.Column("package_id", db.Integer, db.ForeignKey("package.id"), primary_key=True)
|
||||||
|
)
|
||||||
|
|
||||||
|
harddeps = db.Table("harddeps",
|
||||||
|
db.Column("package_id", db.Integer, db.ForeignKey("package.id"), primary_key=True),
|
||||||
|
db.Column("dependency_id", db.Integer, db.ForeignKey("package.id"), primary_key=True)
|
||||||
|
)
|
||||||
|
|
||||||
|
softdeps = db.Table("softdeps",
|
||||||
|
db.Column("package_id", db.Integer, db.ForeignKey("package.id"), primary_key=True),
|
||||||
|
db.Column("dependency_id", db.Integer, db.ForeignKey("package.id"), primary_key=True)
|
||||||
)
|
)
|
||||||
|
|
||||||
class Package(db.Model):
|
class Package(db.Model):
|
||||||
|
@ -248,9 +258,20 @@ class Package(db.Model):
|
||||||
issueTracker = db.Column(db.String(200), nullable=True)
|
issueTracker = db.Column(db.String(200), nullable=True)
|
||||||
forums = db.Column(db.Integer, nullable=False)
|
forums = db.Column(db.Integer, nullable=False)
|
||||||
|
|
||||||
|
tags = db.relationship("Tag", secondary=tags, lazy="subquery",
|
||||||
|
backref=db.backref("packages", lazy=True))
|
||||||
|
|
||||||
tags = db.relationship('Tag', secondary=tags, lazy='subquery',
|
harddeps = db.relationship("Package",
|
||||||
backref=db.backref('packages', lazy=True))
|
secondary=harddeps,
|
||||||
|
primaryjoin=id==harddeps.c.package_id,
|
||||||
|
secondaryjoin=id==harddeps.c.dependency_id,
|
||||||
|
backref="dependents")
|
||||||
|
|
||||||
|
softdeps = db.relationship("Package",
|
||||||
|
secondary=softdeps,
|
||||||
|
primaryjoin=id==softdeps.c.package_id,
|
||||||
|
secondaryjoin=id==softdeps.c.dependency_id,
|
||||||
|
backref="softdependents")
|
||||||
|
|
||||||
releases = db.relationship("PackageRelease", backref="package",
|
releases = db.relationship("PackageRelease", backref="package",
|
||||||
lazy="dynamic", order_by=db.desc("package_release_releaseDate"))
|
lazy="dynamic", order_by=db.desc("package_release_releaseDate"))
|
||||||
|
@ -357,7 +378,7 @@ class Tag(db.Model):
|
||||||
self.textColor = textColor
|
self.textColor = textColor
|
||||||
|
|
||||||
import re
|
import re
|
||||||
regex = re.compile('[^a-z_]')
|
regex = re.compile("[^a-z_]")
|
||||||
self.name = regex.sub("", self.title.lower().replace(" ", "_"))
|
self.name = regex.sub("", self.title.lower().replace(" ", "_"))
|
||||||
|
|
||||||
class PackageRelease(db.Model):
|
class PackageRelease(db.Model):
|
||||||
|
|
|
@ -374,3 +374,7 @@ table.fancyTable tfoot td {
|
||||||
background: #444;
|
background: #444;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.table-topalign td {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
{{ render_field(form.type, class_="pkg_meta") }}
|
{{ render_field(form.type, class_="pkg_meta") }}
|
||||||
{{ render_field(form.license, class_="pkg_meta") }}
|
{{ render_field(form.license, class_="pkg_meta") }}
|
||||||
{{ render_field(form.tags, class_="pkg_meta") }}
|
{{ render_field(form.tags, class_="pkg_meta") }}
|
||||||
|
{{ render_field(form.harddeps, class_="pkg_meta") }}
|
||||||
|
{{ render_field(form.softdeps, class_="pkg_meta") }}
|
||||||
|
|
||||||
<div class="pkg_wiz_1">
|
<div class="pkg_wiz_1">
|
||||||
<p>Enter the repo URL for the package.
|
<p>Enter the repo URL for the package.
|
||||||
|
|
|
@ -118,6 +118,41 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<table class="table-topalign">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>Dependencies</h3>
|
||||||
|
<ul>
|
||||||
|
{% for p in package.harddeps %}
|
||||||
|
<li><a href="{{ p.getDetailsURL() }}">{{ p.title }}</a> by {{ p.author.display_name }}</li>
|
||||||
|
{% else %}
|
||||||
|
{% if not package.softdeps %}
|
||||||
|
<li>No dependencies.</li>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% for p in package.softdeps %}
|
||||||
|
<li><a href="{{ p.getDetailsURL() }}">{{ p.title }}</a> by {{ p.author.display_name }} [optional]</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<h3>Required by</h3>
|
||||||
|
<ul>
|
||||||
|
{% for p in package.dependents %}
|
||||||
|
<li><a href="{{ p.getDetailsURL() }}">{{ p.title }}</a> by {{ p.author.display_name }}</li>
|
||||||
|
{% else %}
|
||||||
|
{% if not package.softdependents %}
|
||||||
|
<li>No dependents.</li>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% for p in package.softdependents %}
|
||||||
|
<li><a href="{{ p.getDetailsURL() }}">{{ p.title }}</a> by {{ p.author.display_name }} [optional]</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
{% if current_user.is_authenticated or requests %}
|
{% if current_user.is_authenticated or requests %}
|
||||||
<h3>Edit Requests</h3>
|
<h3>Edit Requests</h3>
|
||||||
|
|
||||||
|
|
|
@ -125,6 +125,8 @@ class PackageForm(FlaskForm):
|
||||||
type = SelectField("Type", [InputRequired()], choices=PackageType.choices(), coerce=PackageType.coerce, default=PackageType.MOD)
|
type = SelectField("Type", [InputRequired()], choices=PackageType.choices(), coerce=PackageType.coerce, default=PackageType.MOD)
|
||||||
license = QuerySelectField("License", [InputRequired()], query_factory=lambda: License.query, get_pk=lambda a: a.id, get_label=lambda a: a.name)
|
license = QuerySelectField("License", [InputRequired()], query_factory=lambda: License.query, get_pk=lambda a: a.id, get_label=lambda a: a.name)
|
||||||
tags = QuerySelectMultipleField('Tags', query_factory=lambda: Tag.query, get_pk=lambda a: a.id, get_label=lambda a: a.title)
|
tags = QuerySelectMultipleField('Tags', query_factory=lambda: Tag.query, get_pk=lambda a: a.id, get_label=lambda a: a.title)
|
||||||
|
harddeps = QuerySelectMultipleField('Dependencies', query_factory=lambda: Package.query, get_pk=lambda a: a.id, get_label=lambda a: a.title + " by " + a.author.display_name)
|
||||||
|
softdeps = QuerySelectMultipleField('Soft Dependencies', query_factory=lambda: Package.query, get_pk=lambda a: a.id, get_label=lambda a: a.title + " by " + a.author.display_name)
|
||||||
repo = StringField("Repo URL", [Optional(), URL()])
|
repo = StringField("Repo URL", [Optional(), URL()])
|
||||||
website = StringField("Website URL", [Optional(), URL()])
|
website = StringField("Website URL", [Optional(), URL()])
|
||||||
issueTracker = StringField("Issue Tracker URL", [Optional(), URL()])
|
issueTracker = StringField("Issue Tracker URL", [Optional(), URL()])
|
||||||
|
|
9
setup.py
9
setup.py
|
@ -52,11 +52,6 @@ if not os.path.isfile("db.sqlite"):
|
||||||
jeija.github_username = "Jeija"
|
jeija.github_username = "Jeija"
|
||||||
db.session.add(jeija)
|
db.session.add(jeija)
|
||||||
|
|
||||||
sam = User("fillthisinlater")
|
|
||||||
sam.github_username = "fillthisinlater"
|
|
||||||
sam.rank = UserRank.EDITOR
|
|
||||||
db.session.add(sam)
|
|
||||||
|
|
||||||
tags = {}
|
tags = {}
|
||||||
for tag in ["Inventory", "Mapgen", "Building", \
|
for tag in ["Inventory", "Mapgen", "Building", \
|
||||||
"Mobs and NPCs", "Tools", "Player effects", \
|
"Mobs and NPCs", "Tools", "Player effects", \
|
||||||
|
@ -235,7 +230,7 @@ No warranty is provided, express or implied, for any part of the project.
|
||||||
mod = Package()
|
mod = Package()
|
||||||
mod.approved = True
|
mod.approved = True
|
||||||
mod.name = "handholds"
|
mod.name = "handholds"
|
||||||
mod.title = "Mountain Climbing"
|
mod.title = "Handholds"
|
||||||
mod.license = licenses["MIT"]
|
mod.license = licenses["MIT"]
|
||||||
mod.type = PackageType.MOD
|
mod.type = PackageType.MOD
|
||||||
mod.author = ez
|
mod.author = ez
|
||||||
|
@ -283,6 +278,7 @@ No warranty is provided, express or implied, for any part of the project.
|
||||||
mod.forums = 2960
|
mod.forums = 2960
|
||||||
mod.shortDesc = "Adds lots of food and an API to manage ingredients"
|
mod.shortDesc = "Adds lots of food and an API to manage ingredients"
|
||||||
mod.desc = "This is the long desc"
|
mod.desc = "This is the long desc"
|
||||||
|
food = mod
|
||||||
db.session.add(mod)
|
db.session.add(mod)
|
||||||
|
|
||||||
mod = Package()
|
mod = Package()
|
||||||
|
@ -291,6 +287,7 @@ No warranty is provided, express or implied, for any part of the project.
|
||||||
mod.title = "Sweet Foods"
|
mod.title = "Sweet Foods"
|
||||||
mod.license = licenses["CC0"]
|
mod.license = licenses["CC0"]
|
||||||
mod.type = PackageType.MOD
|
mod.type = PackageType.MOD
|
||||||
|
mod.harddeps.append(food)
|
||||||
mod.author = ruben
|
mod.author = ruben
|
||||||
mod.tags.append(tags["player_effects"])
|
mod.tags.append(tags["player_effects"])
|
||||||
mod.repo = "https://github.com/rubenwardy/food_sweet/"
|
mod.repo = "https://github.com/rubenwardy/food_sweet/"
|
||||||
|
|
Loading…
Reference in New Issue