Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit 4b1ec255d6b62b4ad8a6b80cef53903c17c1921b
Author: Jakub Kadl����k <jkadlcik(a)redhat.com>
Date: Tue Dec 1 14:36:33 2015 +0100
[frontend] remove duplicates from build forms
---------------------------------------------------------------
frontend/coprs_frontend/coprs/forms.py | 311 +++++---------------
.../templates/coprs/detail/_builds_forms.html | 2 +
.../coprs/views/coprs_ns/coprs_builds.py | 26 +-
3 files changed, 92 insertions(+), 247 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/forms.py
b/frontend/coprs_frontend/coprs/forms.py
index 682489c..0093909 100644
--- a/frontend/coprs_frontend/coprs/forms.py
+++ b/frontend/coprs_frontend/coprs/forms.py
@@ -270,239 +270,7 @@ class CoprDeleteForm(wtf.Form):
])
-class BuildFormFactory(object):
- @staticmethod
- def create_form_cls(active_chroots):
- class F(wtf.Form):
- @property
- def selected_chroots(self):
- selected = []
- for ch in self.chroots_list:
- if getattr(self, ch).data:
- selected.append(ch)
- return selected
-
- pkgs = wtforms.TextAreaField(
- "Pkgs",
- validators=[
- wtforms.validators.DataRequired(message="URLs to packages are
required"),
- UrlListValidator(),
- UrlSrpmListValidator()],
- filters=[StringListFilter()])
-
- memory_reqs = wtforms.IntegerField(
- "Memory requirements",
- validators=[
- wtforms.validators.Optional(),
- wtforms.validators.NumberRange(
- min=constants.MIN_BUILD_MEMORY,
- max=constants.MAX_BUILD_MEMORY)],
- default=constants.DEFAULT_BUILD_MEMORY)
-
- timeout = wtforms.IntegerField(
- "Timeout",
- validators=[
- wtforms.validators.Optional(),
- wtforms.validators.NumberRange(
- min=constants.MIN_BUILD_TIMEOUT,
- max=constants.MAX_BUILD_TIMEOUT)],
- default=constants.DEFAULT_BUILD_TIMEOUT)
-
- enable_net = wtforms.BooleanField()
-
- F.chroots_list = list(map(lambda x: x.name, active_chroots))
- F.chroots_list.sort()
- F.chroots_sets = {}
- for ch in F.chroots_list:
- setattr(F, ch, wtforms.BooleanField(ch, default=True))
- if ch[0] in F.chroots_sets:
- F.chroots_sets[ch[0]].append(ch)
- else:
- F.chroots_sets[ch[0]] = [ch]
-
- return F
-
-
-class BuildFormUploadFactory(object):
- @staticmethod
- def create_form_cls(active_chroots):
- class F(wtf.Form):
- @property
- def selected_chroots(self):
- selected = []
- for ch in self.chroots_list:
- if getattr(self, ch).data:
- selected.append(ch)
- return selected
-
- pkgs = FileField('srpm', validators=[
- FileRequired(),
- SrpmValidator()])
-
- memory_reqs = wtforms.IntegerField(
- "Memory requirements",
- validators=[
- wtforms.validators.Optional(),
- wtforms.validators.NumberRange(
- min=constants.MIN_BUILD_MEMORY,
- max=constants.MAX_BUILD_MEMORY)],
- default=constants.DEFAULT_BUILD_MEMORY)
-
- timeout = wtforms.IntegerField(
- "Timeout",
- validators=[
- wtforms.validators.Optional(),
- wtforms.validators.NumberRange(
- min=constants.MIN_BUILD_TIMEOUT,
- max=constants.MAX_BUILD_TIMEOUT)],
- default=constants.DEFAULT_BUILD_TIMEOUT)
-
- enable_net = wtforms.BooleanField()
-
- F.chroots_list = map(lambda x: x.name, active_chroots)
- F.chroots_list.sort()
- F.chroots_sets = {}
- for ch in F.chroots_list:
- setattr(F, ch, wtforms.BooleanField(ch, default=True))
- if ch[0] in F.chroots_sets:
- F.chroots_sets[ch[0]].append(ch)
- else:
- F.chroots_sets[ch[0]] = [ch]
-
- return F
-
-
-class BuildFormTitoFactory(object):
- @staticmethod
- def create_form_cls(active_chroots):
- class F(wtf.Form):
- @property
- def selected_chroots(self):
- selected = []
- for ch in self.chroots_list:
- if getattr(self, ch).data:
- selected.append(ch)
- return selected
-
- git_url = wtforms.StringField(
- "Git URL",
- validators=[
- wtforms.validators.DataRequired(),
- wtforms.validators.URL()])
-
- git_directory = wtforms.StringField(
- "Git Directory",
- validators=[
- wtforms.validators.Optional()])
-
- git_branch = wtforms.StringField(
- "Git Branch",
- validators=[
- wtforms.validators.Optional()])
-
- tito_test = wtforms.BooleanField(default=False)
-
- memory_reqs = wtforms.IntegerField(
- "Memory requirements",
- validators=[
- wtforms.validators.Optional(),
- wtforms.validators.NumberRange(
- min=constants.MIN_BUILD_MEMORY,
- max=constants.MAX_BUILD_MEMORY)],
- default=constants.DEFAULT_BUILD_MEMORY)
-
- timeout = wtforms.IntegerField(
- "Timeout",
- validators=[
- wtforms.validators.Optional(),
- wtforms.validators.NumberRange(
- min=constants.MIN_BUILD_TIMEOUT,
- max=constants.MAX_BUILD_TIMEOUT)],
- default=constants.DEFAULT_BUILD_TIMEOUT)
-
- enable_net = wtforms.BooleanField()
-
- F.chroots_list = map(lambda x: x.name, active_chroots)
- F.chroots_list.sort()
- F.chroots_sets = {}
- for ch in F.chroots_list:
- setattr(F, ch, wtforms.BooleanField(ch, default=True))
- if ch[0] in F.chroots_sets:
- F.chroots_sets[ch[0]].append(ch)
- else:
- F.chroots_sets[ch[0]] = [ch]
-
- return F
-
-
-class BuildFormMockFactory(object):
- @staticmethod
- def create_form_cls(active_chroots):
- class F(wtf.Form):
- @property
- def selected_chroots(self):
- selected = []
- for ch in self.chroots_list:
- if getattr(self, ch).data:
- selected.append(ch)
- return selected
-
- scm_type = wtforms.SelectField(
- "SCM Type",
- choices=[("git", "Git"), ("svn",
"SVN")])
-
- scm_url = wtforms.StringField(
- "SCM URL",
- validators=[
- wtforms.validators.DataRequired(),
- wtforms.validators.URL()])
-
- scm_branch = wtforms.StringField(
- "Git Branch",
- validators=[
- wtforms.validators.Optional()])
-
- spec = wtforms.StringField(
- "Spec File",
- validators=[
- wtforms.validators.Regexp(
- "^.+\.spec$",
- message="RPM spec file must end with .spec"
- )])
-
- memory_reqs = wtforms.IntegerField(
- "Memory requirements",
- validators=[
- wtforms.validators.Optional(),
- wtforms.validators.NumberRange(
- min=constants.MIN_BUILD_MEMORY,
- max=constants.MAX_BUILD_MEMORY)],
- default=constants.DEFAULT_BUILD_MEMORY)
-
- timeout = wtforms.IntegerField(
- "Timeout",
- validators=[
- wtforms.validators.Optional(),
- wtforms.validators.NumberRange(
- min=constants.MIN_BUILD_TIMEOUT,
- max=constants.MAX_BUILD_TIMEOUT)],
- default=constants.DEFAULT_BUILD_TIMEOUT)
-
- enable_net = wtforms.BooleanField()
-
- F.chroots_list = map(lambda x: x.name, active_chroots)
- F.chroots_list.sort()
- F.chroots_sets = {}
- for ch in F.chroots_list:
- setattr(F, ch, wtforms.BooleanField(ch, default=True))
- if ch[0] in F.chroots_sets:
- F.chroots_sets[ch[0]].append(ch)
- else:
- F.chroots_sets[ch[0]] = [ch]
-
- return F
-
-
+# @TODO jkadlcik - rewrite via BaseBuildFormFactory after fe-dev-cloud is back online
class BuildFormRebuildFactory(object):
@staticmethod
def create_form_cls(active_chroots):
@@ -546,7 +314,7 @@ class BuildFormRebuildFactory(object):
return F
-class PackageFormFactory(wtf.Form):
+class BasePackageForm(wtf.Form):
webhook_rebuild = wtforms.BooleanField(default=False)
@@ -602,6 +370,81 @@ class PackageFormMock(BasePackageForm):
message="RPM spec file must end with .spec")])
+class BaseBuildFormFactory(object):
+ def __new__(cls, active_chroots, form):
+ class F(form):
+ @property
+ def selected_chroots(self):
+ selected = []
+ for ch in self.chroots_list:
+ if getattr(self, ch).data:
+ selected.append(ch)
+ return selected
+
+ F.memory_reqs = wtforms.IntegerField(
+ "Memory requirements",
+ validators=[
+ wtforms.validators.Optional(),
+ wtforms.validators.NumberRange(
+ min=constants.MIN_BUILD_MEMORY,
+ max=constants.MAX_BUILD_MEMORY)],
+ default=constants.DEFAULT_BUILD_MEMORY)
+
+ F.timeout = wtforms.IntegerField(
+ "Timeout",
+ validators=[
+ wtforms.validators.Optional(),
+ wtforms.validators.NumberRange(
+ min=constants.MIN_BUILD_TIMEOUT,
+ max=constants.MAX_BUILD_TIMEOUT)],
+ default=constants.DEFAULT_BUILD_TIMEOUT)
+
+ F.enable_net = wtforms.BooleanField()
+
+ F.chroots_list = map(lambda x: x.name, active_chroots)
+ F.chroots_list.sort()
+ F.chroots_sets = {}
+ for ch in F.chroots_list:
+ setattr(F, ch, wtforms.BooleanField(ch, default=True))
+ if ch[0] in F.chroots_sets:
+ F.chroots_sets[ch[0]].append(ch)
+ else:
+ F.chroots_sets[ch[0]] = [ch]
+ return F
+
+
+class BuildFormTitoFactory(object):
+ def __new__(cls, active_chroots):
+ return BaseBuildFormFactory(active_chroots, PackageFormTito)
+
+
+class BuildFormMockFactory(object):
+ def __new__(cls, active_chroots):
+ return BaseBuildFormFactory(active_chroots, PackageFormMock)
+
+
+class BuildFormUploadFactory(object):
+ def __new__(cls, active_chroots):
+ form = BaseBuildFormFactory(active_chroots, wtf.Form)
+ form.pkgs = FileField('srpm', validators=[
+ FileRequired(),
+ SrpmValidator()])
+ return form
+
+
+class BuildFormUrlFactory(object):
+ def __new__(cls, active_chroots):
+ form = BaseBuildFormFactory(active_chroots, wtf.Form)
+ form.pkgs = wtforms.TextAreaField(
+ "Pkgs",
+ validators=[
+ wtforms.validators.DataRequired(message="URLs to packages are
required"),
+ UrlListValidator(),
+ UrlSrpmListValidator()],
+ filters=[StringListFilter()])
+ return form
+
+
class ChrootForm(wtf.Form):
"""
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_forms.html
b/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_forms.html
index 464db46..38f8aca 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_forms.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_forms.html
@@ -137,6 +137,7 @@
</div>
</div>
+ <input type="hidden" name="source_type"
value="git_and_tito" />
{{ copr_build_form_end(form, view, copr) }}
{% endmacro %}
@@ -150,6 +151,7 @@
{{ render_field(form.spec, placeholder="Path from repository root directory to
your .spec file") }}
{{ render_field(form.scm_branch, placeholder="Optional - A branch you want to
build from.") }}
+ <input type="hidden" name="source_type"
value="mock_scm" />
{{ copr_build_form_end(form, view, copr) }}
{% endmacro %}
diff --git a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
index 84e67b6..51935e6 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
@@ -127,10 +127,10 @@ def render_package_edit(copr, package_name, view, form_tito=None,
form_mock=None
if not form_tito:
if "git_dir" in data:
data["git_directory"] = data["git_dir"] # @FIXME
workaround
- form_tito = forms.PackageFormTitoFactory(data=data)
+ form_tito = forms.PackageFormTito(data=data)
if not form_mock:
- form_mock = forms.PackageFormMockFactory(data=data)
+ form_mock = forms.PackageFormMock(data=data)
return flask.render_template("coprs/detail/package_edit.html",
package=package, copr=copr, form_tito=form_tito,
form_mock=form_mock, view=view)
@@ -152,10 +152,10 @@ def group_package_edit_post(copr, package_name):
def process_package_edit(copr, package_name, view):
if request.form["source_type"] == "git_and_tito":
- form = forms.PackageFormTitoFactory()
+ form = forms.PackageFormTito()
form_var = "form_tito"
elif request.form["source_type"] == "mock_scm":
- form = forms.PackageFormMockFactory()
+ form = forms.PackageFormMock()
form_var = "form_mock"
else:
raise Exception("Wrong source type")
@@ -210,7 +210,7 @@ def render_copr_package_rebuild(copr, package_name, view):
f = render_add_build_mock
view_suffix = "_mock"
- form = form.create_form_cls(copr.active_chroots)(data=data)
+ form = form(copr.active_chroots)(data=data)
return f(copr, form, view=view + view_suffix)
@@ -230,7 +230,7 @@ def group_copr_add_build(copr, form=None):
def render_add_build(copr, form, view):
if not form:
- form = forms.BuildFormFactory.create_form_cls(copr.active_chroots)()
+ form = forms.BuildFormUrlFactory(copr.active_chroots)()
return flask.render_template("coprs/detail/add_build/url.html",
copr=copr, view=view, form=form)
@@ -251,7 +251,7 @@ def group_copr_add_build_upload(copr, form=None):
def render_add_build_upload(copr, form, view):
if not form:
- form = forms.BuildFormUploadFactory.create_form_cls(copr.active_chroots)()
+ form = forms.BuildFormUploadFactory(copr.active_chroots)()
return flask.render_template("coprs/detail/add_build/upload.html",
copr=copr, form=form, view=view)
@@ -272,14 +272,14 @@ def group_copr_add_build_tito(copr, form=None):
def render_add_build_tito(copr, form, view):
if not form:
- form = forms.BuildFormTitoFactory.create_form_cls(copr.active_chroots)()
+ form = forms.BuildFormTitoFactory(copr.active_chroots)()
return flask.render_template("coprs/detail/add_build/tito.html",
copr=copr, form=form, view=view)
def process_new_build_tito(copr, add_view, url_on_success):
- form = forms.BuildFormTitoFactory.create_form_cls(copr.active_chroots)()
+ form = forms.BuildFormTitoFactory(copr.active_chroots)()
if form.validate_on_submit():
build_options = {
@@ -342,7 +342,7 @@ def group_copr_add_build_mock(copr, form=None):
def render_add_build_mock(copr, form, view):
if not form:
- form = forms.BuildFormMockFactory.create_form_cls(copr.active_chroots)()
+ form = forms.BuildFormMockFactory(copr.active_chroots)()
return flask.render_template("coprs/detail/add_build/mock.html",
copr=copr, form=form, view=view)
@@ -368,7 +368,7 @@ def group_copr_new_build_mock(copr):
def process_new_build_mock(copr, add_view, url_on_success):
- form = forms.BuildFormMockFactory.create_form_cls(copr.active_chroots)()
+ form = forms.BuildFormMockFactory(copr.active_chroots)()
if form.validate_on_submit():
build_options = {
@@ -394,7 +394,7 @@ def process_new_build_mock(copr, add_view, url_on_success):
def process_new_build_upload(copr, add_view, url_on_success):
- form = forms.BuildFormUploadFactory.create_form_cls(copr.active_chroots)()
+ form = forms.BuildFormUploadFactory(copr.active_chroots)()
if form.validate_on_submit():
build_options = {
"enable_net": form.enable_net.data,
@@ -442,7 +442,7 @@ def group_copr_new_build_upload(copr):
def process_new_build_url(copr, add_view, url_on_success):
- form = forms.BuildFormFactory.create_form_cls(copr.active_chroots)()
+ form = forms.BuildFormUrlFactory(copr.active_chroots)()
if form.validate_on_submit():
pkgs = form.pkgs.data.split("\n")