class PackageForm(FlaskForm):
- name = StringField("Name (Technical)", [InputRequired(), Length(1, 100), Regexp("^[a-z0-9_]+$", 0, "Lower case letters (a-z), digits (0-9), and underscores (_) only")])
- title = StringField("Title (Human-readable)", [InputRequired(), Length(3, 100)])
- short_desc = StringField("Short Description (Plaintext)", [InputRequired(), Length(1,200)])
- desc = TextAreaField("Long Description (Markdown)", [Optional(), Length(0,10000)])
- type = SelectField("Type", [InputRequired()], choices=PackageType.choices(), coerce=PackageType.coerce, default=PackageType.MOD)
- license = QuerySelectField("License", [DataRequired()], allow_blank=True, query_factory=lambda: License.query.order_by(db.asc(License.name)), get_pk=lambda a: a.id, get_label=lambda a: a.name)
- media_license = QuerySelectField("Media License", [DataRequired()], allow_blank=True, query_factory=lambda: License.query.order_by(db.asc(License.name)), get_pk=lambda a: a.id, get_label=lambda a: a.name)
- provides_str = StringField("Provides (mods included in package)", [Optional()])
- 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()])
- softdep_str = StringField("Soft Dependencies", [Optional()])
- repo = StringField("VCS Repository URL", [Optional(), URL()], filters = [lambda x: x or None])
- website = StringField("Website URL", [Optional(), URL()], filters = [lambda x: x or None])
- issueTracker = StringField("Issue Tracker URL", [Optional(), URL()], filters = [lambda x: x or None])
- forums = IntegerField("Forum Topic ID", [Optional(), NumberRange(0,999999)])
- submit = SubmitField("Save")
+ name = StringField("Name (Technical)", [InputRequired(), Length(1, 100), Regexp("^[a-z0-9_]+$", 0, "Lower case letters (a-z), digits (0-9), and underscores (_) only")])
+ title = StringField("Title (Human-readable)", [InputRequired(), Length(3, 100)])
+ short_desc = StringField("Short Description (Plaintext)", [InputRequired(), Length(1,200)])
+ desc = TextAreaField("Long Description (Markdown)", [Optional(), Length(0,10000)])
+ type = SelectField("Type", [InputRequired()], choices=PackageType.choices(), coerce=PackageType.coerce, default=PackageType.MOD)
+ license = QuerySelectField("License", [DataRequired()], allow_blank=True, query_factory=lambda: License.query.order_by(db.asc(License.name)), get_pk=lambda a: a.id, get_label=lambda a: a.name)
+ media_license = QuerySelectField("Media License", [DataRequired()], allow_blank=True, query_factory=lambda: License.query.order_by(db.asc(License.name)), get_pk=lambda a: a.id, get_label=lambda a: a.name)
+ provides_str = StringField("Provides (mods included in package)", [Optional()])
+ 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)
+ content_warnings = QuerySelectMultipleField('Content Warnings', query_factory=lambda: ContentWarning.query.order_by(db.asc(ContentWarning.name)), get_pk=lambda a: a.id, get_label=lambda a: a.title)
+ harddep_str = StringField("Hard Dependencies", [Optional()])
+ softdep_str = StringField("Soft Dependencies", [Optional()])
+ repo = StringField("VCS Repository URL", [Optional(), URL()], filters = [lambda x: x or None])
+ website = StringField("Website URL", [Optional(), URL()], filters = [lambda x: x or None])
+ issueTracker = StringField("Issue Tracker URL", [Optional(), URL()], filters = [lambda x: x or None])
+ forums = IntegerField("Forum Topic ID", [Optional(), NumberRange(0,999999)])
+ submit = SubmitField("Save")
+
@bp.route("/packages/new/", methods=["GET", "POST"])
@bp.route("/packages/<author>/<name>/edit/", methods=["GET", "POST"])
form.softdep_str.data = ",".join([str(x) for x in package.getSortedOptionalDependencies() ])
form.provides_str.data = MetaPackage.ListToSpec(package.provides)
form.tags.data = list(package.tags)
+ form.content_warnings.data = list(package.content_warnings)
if request.method == "POST" and form.validate():
wasNew = False
for tag in form.tags.raw_data:
package.tags.append(Tag.query.get(tag))
+ package.content_warnings.clear()
+ for warning in form.content_warnings.raw_data:
+ package.content_warnings.append(ContentWarning.query.get(warning))
+
db.session.commit() # save
next_url = package.getDetailsURL()