admin: filter errors when cleaning up from subpage (#87946)
gitea/wcs/pipeline/head This commit looks good
Details
gitea/wcs/pipeline/head This commit looks good
Details
This commit is contained in:
parent
99d1f4c21f
commit
977cdb0019
|
@ -390,3 +390,66 @@ def test_logged_error_cleanup(pub):
|
|||
'types$elementcarddef',
|
||||
'types$elementothers',
|
||||
]
|
||||
|
||||
|
||||
def test_logged_error_cleanup_from_filtered_page(pub):
|
||||
create_superuser(pub)
|
||||
|
||||
FormDef.wipe()
|
||||
CardDef.wipe()
|
||||
Workflow.wipe()
|
||||
pub.loggederror_class.wipe()
|
||||
|
||||
formdef = FormDef()
|
||||
formdef.name = 'foo'
|
||||
formdef.store()
|
||||
carddef = CardDef()
|
||||
carddef.name = 'bar'
|
||||
carddef.store()
|
||||
workflow = Workflow()
|
||||
workflow.name = 'blah'
|
||||
workflow.store()
|
||||
|
||||
# FormDef error
|
||||
error1 = pub.loggederror_class()
|
||||
error1.summary = 'LoggedError'
|
||||
error1.formdef_class = 'FormDef'
|
||||
error1.formdef_id = formdef.id
|
||||
error1.first_occurence_timestamp = error1.latest_occurence_timestamp = datetime.datetime.now()
|
||||
error1.store()
|
||||
|
||||
# CardDef error
|
||||
error2 = pub.loggederror_class()
|
||||
error2.summary = 'LoggedError'
|
||||
error2.formdef_class = 'CardDef'
|
||||
error2.formdef_id = carddef.id
|
||||
error2.first_occurence_timestamp = error2.latest_occurence_timestamp = datetime.datetime.now()
|
||||
error2.store()
|
||||
|
||||
# workflow-only error
|
||||
error3 = pub.loggederror_class()
|
||||
error3.summary = 'LoggedError'
|
||||
error3.workflow_id = workflow.id
|
||||
error3.first_occurence_timestamp = error3.latest_occurence_timestamp = datetime.datetime.now()
|
||||
error3.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get(formdef.get_admin_url() + 'logged-errors/')
|
||||
resp = resp.click('Cleanup')
|
||||
resp.form['latest_occurence'] = (datetime.datetime.now() + datetime.timedelta(days=1)).strftime(
|
||||
'%Y-%m-%d'
|
||||
)
|
||||
resp = resp.form.submit('submit')
|
||||
assert not pub.loggederror_class.has_key(error1.id)
|
||||
assert pub.loggederror_class.has_key(error2.id)
|
||||
assert pub.loggederror_class.has_key(error3.id)
|
||||
|
||||
resp = app.get(workflow.get_admin_url() + 'logged-errors/')
|
||||
resp = resp.click('Cleanup')
|
||||
resp.form['latest_occurence'] = (datetime.datetime.now() + datetime.timedelta(days=1)).strftime(
|
||||
'%Y-%m-%d'
|
||||
)
|
||||
resp = resp.form.submit('submit')
|
||||
assert not pub.loggederror_class.has_key(error1.id)
|
||||
assert pub.loggederror_class.has_key(error2.id)
|
||||
assert not pub.loggederror_class.has_key(error3.id)
|
||||
|
|
|
@ -253,14 +253,15 @@ class LoggedErrorsDirectory(AccessControlled, Directory):
|
|||
options.append(('carddef', _('Card Models'), 'carddef'))
|
||||
if backoffice_root.is_accessible('workflows'):
|
||||
options.append(('others', _('Others'), 'others'))
|
||||
form.add(
|
||||
CheckboxesWidget,
|
||||
'types',
|
||||
title=_('Error types'),
|
||||
value=[x[0] for x in options], # check all by default
|
||||
options=options,
|
||||
required=True,
|
||||
)
|
||||
if not (self.formdef_id or self.workflow_id):
|
||||
form.add(
|
||||
CheckboxesWidget,
|
||||
'types',
|
||||
title=_('Error types'),
|
||||
value=[x[0] for x in options], # check all by default
|
||||
options=options,
|
||||
required=True,
|
||||
)
|
||||
form.add(
|
||||
DateWidget,
|
||||
'latest_occurence',
|
||||
|
@ -275,17 +276,22 @@ class LoggedErrorsDirectory(AccessControlled, Directory):
|
|||
return redirect('.')
|
||||
|
||||
if form.get_submit() == 'submit' and not form.has_errors():
|
||||
type_criterias = []
|
||||
if 'formdef' in form.get_widget('types').parse():
|
||||
type_criterias.append(Equal('formdef_class', 'FormDef'))
|
||||
if 'carddef' in form.get_widget('types').parse():
|
||||
type_criterias.append(Equal('formdef_class', 'CardDef'))
|
||||
if 'others' in form.get_widget('types').parse():
|
||||
type_criterias.append(Null('formdef_class'))
|
||||
criterias = [
|
||||
Less('latest_occurence_timestamp', form.get_widget('latest_occurence').parse()),
|
||||
Or(type_criterias),
|
||||
]
|
||||
criterias = []
|
||||
|
||||
if self.formdef_id and self.formdef_class:
|
||||
criterias.append(Equal('formdef_id', self.formdef_id))
|
||||
criterias.append(Equal('formdef_class', self.formdef_class.__name__))
|
||||
elif self.workflow_id:
|
||||
criterias.append(Equal('workflow_id', self.workflow_id))
|
||||
else:
|
||||
if 'formdef' in form.get_widget('types').parse():
|
||||
criterias.append(Equal('formdef_class', 'FormDef'))
|
||||
if 'carddef' in form.get_widget('types').parse():
|
||||
criterias.append(Equal('formdef_class', 'CardDef'))
|
||||
if 'others' in form.get_widget('types').parse():
|
||||
criterias.append(Null('formdef_class'))
|
||||
criterias = [Or(criterias)]
|
||||
criterias.append(Less('latest_occurence_timestamp', form.get_widget('latest_occurence').parse()))
|
||||
get_publisher().loggederror_class.wipe(clause=criterias)
|
||||
return redirect('.')
|
||||
|
||||
|
|
Loading…
Reference in New Issue