Get rid of newstyle flag for Form.validate() method

we always/only use "new style" now
This commit is contained in:
Lance Edgar 2023-05-14 20:28:48 -05:00
parent a991dc0684
commit 85947878c4
17 changed files with 75 additions and 72 deletions

View file

@ -407,7 +407,7 @@ class ReceivingBatchRowViews(APIBatchRowView):
form = forms.Form(schema=schema, request=self.request)
# TODO: this seems hacky, but avoids "complex" date value parsing
form.set_widget('expiration_date', dfwidget.TextInputWidget())
if not form.validate(newstyle=True):
if not form.validate():
log.debug("form did not validate: %s",
form.make_deform_form().error)
return {'error': "Form did not validate"}

View file

@ -89,7 +89,7 @@ class CommonView(APIView):
# identical; perhaps should merge somehow?
schema = Feedback().bind(session=Session())
form = forms.Form(schema=schema, request=self.request)
if form.validate(newstyle=True):
if form.validate():
data = dict(form.validated)
# figure out who the sending user is, if any

View file

@ -26,6 +26,7 @@ Forms Core
import json
import logging
import warnings
from collections import OrderedDict
import sqlalchemy as sa
@ -1167,49 +1168,51 @@ class Form(object):
return self.defaults[field_name]
def validate(self, *args, **kwargs):
if kwargs.pop('newstyle', False):
# yay, new behavior!
if hasattr(self, 'validated'):
del self.validated
if self.request.method != 'POST':
return False
"""
Try to validate the form.
controls = get_form_data(self.request).items()
This should work whether data was submitted as classic POST
data, or as JSON body.
# unfortunately the normal form logic (i.e. peppercorn) is
# expecting all values to be strings, whereas if our data
# came from JSON body, may have given us some Pythonic
# objects. so here we must convert them *back* to strings
# TODO: this seems like a hack, i must be missing something
# TODO: also this uses same "JSON" check as get_form_data()
if self.request.is_xhr and not self.request.POST:
controls = [[key, val] for key, val in controls]
for i in range(len(controls)):
key, value = controls[i]
if value is None:
controls[i][1] = ''
elif value is True:
controls[i][1] = 'true'
elif value is False:
controls[i][1] = 'false'
elif not isinstance(value, str):
controls[i][1] = str(value)
:returns: ``True`` if form data is valid, otherwise ``False``.
"""
if 'newstyle' in kwargs:
warnings.warn("the `newstyle` kwarg is no longer used "
"for Form.validate()",
DeprecationWarning, stacklevel=2)
dform = self.make_deform_form()
try:
self.validated = dform.validate(controls)
return True
except deform.ValidationFailure:
return False
if hasattr(self, 'validated'):
del self.validated
if self.request.method != 'POST':
return False
else: # legacy behavior
raise_error = kwargs.pop('raise_error', True)
dform = self.make_deform_form()
try:
return dform.validate(*args, **kwargs)
except deform.ValidationFailure:
if raise_error:
raise
controls = get_form_data(self.request).items()
# unfortunately the normal form logic (i.e. peppercorn) is
# expecting all values to be strings, whereas if our data
# came from JSON body, may have given us some Pythonic
# objects. so here we must convert them *back* to strings
# TODO: this seems like a hack, i must be missing something
# TODO: also this uses same "JSON" check as get_form_data()
if self.request.is_xhr and not self.request.POST:
controls = [[key, val] for key, val in controls]
for i in range(len(controls)):
key, value = controls[i]
if value is None:
controls[i][1] = ''
elif value is True:
controls[i][1] = 'true'
elif value is False:
controls[i][1] = 'false'
elif not isinstance(value, str):
controls[i][1] = str(value)
dform = self.make_deform_form()
try:
self.validated = dform.validate(controls)
return True
except deform.ValidationFailure:
return False
class FieldList(list):

View file

@ -105,7 +105,7 @@ class AuthenticationView(View):
form.auto_disable = False # TODO: deprecate / remove this
form.show_reset = True
form.show_cancel = False
if form.validate(newstyle=True):
if form.validate():
user = self.authenticate_user(form.validated['username'],
form.validated['password'])
if user:
@ -185,7 +185,7 @@ class AuthenticationView(View):
schema = ChangePassword().bind(user=self.request.user, request=self.request)
form = forms.Form(schema=schema, request=self.request)
if form.validate(newstyle=True):
if form.validate():
set_user_password(self.request.user, form.validated['new_password'])
self.request.session.flash("Your password has been changed.")
return self.redirect(self.request.get_referrer())

View file

@ -566,7 +566,7 @@ class BatchMasterView(MasterView):
self.request.session.flash("Request ignored, since batch has already been executed")
else:
form = forms.Form(schema=ToggleComplete(), request=self.request)
if form.validate(newstyle=True):
if form.validate():
if form.validated['complete']:
self.mark_batch_complete(batch)
else:
@ -1273,7 +1273,7 @@ class BatchMasterView(MasterView):
batch = self.get_instance()
self.executing = True
form = self.make_execute_form(batch)
if form.validate(newstyle=True):
if form.validate():
kwargs = dict(form.validated)
# cache options to use as defaults next time
@ -1344,7 +1344,7 @@ class BatchMasterView(MasterView):
indicator page.
"""
form = self.make_execute_form()
if form.validate(newstyle=True):
if form.validate():
kwargs = dict(form.validated)
# cache options to use as defaults next time

View file

@ -234,7 +234,7 @@ class InventoryBatchView(BatchMasterView):
schema = DesktopForm().bind(session=self.Session())
form = forms.Form(schema=schema, request=self.request)
if self.request.method == 'POST':
if form.validate(newstyle=True):
if form.validate():
product = self.Session.get(model.Product, form.validated['product'])

View file

@ -161,7 +161,7 @@ class CommonView(View):
model = self.model
schema = Feedback().bind(session=Session())
form = forms.Form(schema=schema, request=self.request)
if form.validate(newstyle=True):
if form.validate():
data = dict(form.validated)
if data['user']:
data['user'] = Session.get(model.User, data['user'])

View file

@ -62,7 +62,7 @@ class GenerateFeatureView(View):
result = rendered_result = None
feature_type = 'new-report'
if self.request.method == 'POST':
if app_form.validate(newstyle=True):
if app_form.validate():
feature_type = self.request.POST['feature_type']
feature = self.handler.get_feature(feature_type)
@ -70,7 +70,7 @@ class GenerateFeatureView(View):
raise ValueError("Unknown feature type: {}".format(feature_type))
feature_form = feature_forms[feature.feature_key]
if feature_form.validate(newstyle=True):
if feature_form.validate():
context = dict(app_form.validated)
context.update(feature_form.validated)
result = self.handler.do_generate(feature, **context)

View file

@ -723,7 +723,7 @@ class MasterView(View):
form = forms.Form(schema=schema, request=self.request)
form.save_label = "Upload"
form.cancel_url = self.get_index_url()
if form.validate(newstyle=True):
if form.validate():
uploads = self.normalize_uploads(form)
filepath = uploads['filename']['temp_path']
@ -1408,7 +1408,7 @@ class MasterView(View):
pass
def validate_quick_row_form(self, form):
return form.validate(newstyle=True)
return form.validate()
def make_default_row_grid_tools(self, obj):
if self.rows_creatable:
@ -2301,7 +2301,7 @@ class MasterView(View):
factory = self.get_form_factory()
form = factory(schema=schema, request=self.request)
if not form.validate(newstyle=True):
if not form.validate():
return {'error': "Form did not validate"}
# nb. self.Session may differ, so use tailbone.db.Session
@ -2334,7 +2334,7 @@ class MasterView(View):
factory = self.get_form_factory()
form = factory(schema=schema, request=self.request)
if not form.validate(newstyle=True):
if not form.validate():
return {'error': "Form did not validate"}
# nb. self.Session may differ, so use tailbone.db.Session
@ -4057,7 +4057,7 @@ class MasterView(View):
supp.configure_form(form)
def validate_form(self, form):
if form.validate(newstyle=True):
if form.validate():
self.form_deserialized = form.validated
return True
return False
@ -4514,7 +4514,7 @@ class MasterView(View):
self.configure_field_product_key(form)
def validate_row_form(self, form):
if form.validate(newstyle=True):
if form.validate():
self.form_deserialized = form.validated
return True
return False

View file

@ -1000,7 +1000,7 @@ class PersonView(MasterView):
def profile_add_note(self):
person = self.get_instance()
form = self.make_note_form('create', person)
if form.validate(newstyle=True):
if form.validate():
note = self.create_note(person, form)
self.Session.flush()
return self.profile_add_note_success(note)
@ -1025,7 +1025,7 @@ class PersonView(MasterView):
def profile_edit_note(self):
person = self.get_instance()
form = self.make_note_form('edit', person)
if form.validate(newstyle=True):
if form.validate():
note = self.update_note(person, form)
self.Session.flush()
return self.profile_edit_note_success(note)
@ -1047,7 +1047,7 @@ class PersonView(MasterView):
def profile_delete_note(self):
person = self.get_instance()
form = self.make_note_form('delete', person)
if form.validate(newstyle=True):
if form.validate():
self.delete_note(person, form)
self.Session.flush()
return self.profile_delete_note_success(person)

View file

@ -1972,7 +1972,7 @@ class ProductView(MasterView):
params_forms[key] = forms.Form(schema=schema, request=self.request)
if self.request.method == 'POST':
if form.validate(newstyle=True):
if form.validate():
data = form.validated
fully_validated = True
@ -1985,7 +1985,7 @@ class ProductView(MasterView):
# collect batch-type-specific params
pform = params_forms.get(batch_key)
if pform:
if pform.validate(newstyle=True):
if pform.validate():
pdata = pform.validated
for field in pform.schema:
param_name = pform.schema[field.name].param_name

View file

@ -65,7 +65,7 @@ class GeneratedProjectView(MasterView):
project_type = self.request.matchdict.get('project_type')
if project_type:
form = self.make_project_form(project_type)
if form.validate(newstyle=True):
if form.validate():
zipped = self.generate_project(project_type, form)
return self.file_response(zipped)
@ -83,7 +83,7 @@ class GeneratedProjectView(MasterView):
# if form validates, then user has chosen a project type, so
# we redirect to the appropriate "generate project" page
if form.validate(newstyle=True):
if form.validate():
raise self.redirect(self.request.route_url(
'generate_specific_project',
project_type=form.validated['project_type']))

View file

@ -225,7 +225,7 @@ class CostingBatchView(PurchasingBatchView):
# if form validates, that means user has chosen a creation type, so we
# just redirect to the appropriate "new batch of type X" page
if form.validate(newstyle=True):
if form.validate():
workflow_key = form.validated['workflow']
vendor_uuid = form.validated['vendor']
url = self.request.route_url('{}.create_workflow'.format(route_prefix),

View file

@ -358,7 +358,7 @@ class ReceivingBatchView(PurchasingBatchView):
# if form validates, that means user has chosen a creation type, so we
# just redirect to the appropriate "new batch of type X" page
if form.validate(newstyle=True):
if form.validate():
workflow_key = form.validated['workflow']
vendor_uuid = form.validated['vendor']
url = self.request.route_url('{}.create_workflow'.format(route_prefix),
@ -1196,7 +1196,7 @@ class ReceivingBatchView(PurchasingBatchView):
# TODO: what is this one about again?
form.remove_field('quick_receive')
if form.validate(newstyle=True):
if form.validate():
# handler takes care of the row receiving logic for us
kwargs = dict(form.validated)
@ -1382,7 +1382,7 @@ class ReceivingBatchView(PurchasingBatchView):
# expiration_date
form.set_type('expiration_date', 'date_jquery')
if form.validate(newstyle=True):
if form.validate():
# handler takes care of the row receiving logic for us
kwargs = dict(form.validated)

View file

@ -373,7 +373,7 @@ class ReportOutputView(ExportMasterView):
# if form validates, that means user has chosen a report type, so we
# just redirect to the appropriate "new report" page
if form.validate(newstyle=True):
if form.validate():
raise self.redirect(self.request.route_url('generate_specific_report',
type_key=form.validated['report_type']))
@ -465,7 +465,7 @@ class ReportOutputView(ExportMasterView):
form.set_default(param.name, value)
# if form validates, start generating new report output; show progress page
if form.validate(newstyle=True):
if form.validate():
key = 'report_output.generate'
progress = self.make_progress(key)
kwargs = {'progress': progress}

View file

@ -274,7 +274,7 @@ class AppSettingsView(View):
form = self.make_form(settings)
form.cancel_url = self.request.current_route_url()
if form.validate(newstyle=True):
if form.validate():
self.save_form(form)
group = self.request.POST.get('settings-group')
if group is not None:

View file

@ -164,7 +164,7 @@ class TimeSheetView(View):
Process a "shift filter" form if one was in fact POST'ed. If it was
then we store new context in session and redirect to display as normal.
"""
if form.validate(newstyle=True):
if form.validate():
store = form.validated['store']
self.request.session['timesheet.{}.store'.format(self.key)] = store.uuid if store else None
department = form.validated['department']
@ -178,7 +178,7 @@ class TimeSheetView(View):
Process an "employee shift filter" form if one was in fact POST'ed. If it
was then we store new context in session and redirect to display as normal.
"""
if form.validate(newstyle=True):
if form.validate():
employee = form.validated['employee']
self.request.session['timesheet.{}.employee'.format(self.key)] = employee.uuid if employee else None
date = form.validated['date']