Add support for clearing the generic object error log.
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -26,10 +26,14 @@ from .links import (
|
||||
link_about, link_check_version, link_code, link_current_user_details,
|
||||
link_current_user_edit, link_current_user_locale_profile_edit,
|
||||
link_documentation, link_filters, link_forum, link_license,
|
||||
link_packages_licenses, link_setup, link_support, link_tools
|
||||
link_object_error_list_clear, link_packages_licenses, link_setup,
|
||||
link_support, link_tools
|
||||
)
|
||||
|
||||
from .literals import DELETE_STALE_UPLOADS_INTERVAL
|
||||
from .menus import menu_about, menu_main, menu_tools, menu_user
|
||||
from .menus import (
|
||||
menu_about, menu_main, menu_secondary, menu_tools, menu_user
|
||||
)
|
||||
from .licenses import * # NOQA
|
||||
from .queues import * # NOQA - Force queues registration
|
||||
from .settings import setting_auto_logging, setting_production_error_log_path
|
||||
@@ -90,23 +94,6 @@ class CommonApp(MayanAppConfig):
|
||||
|
||||
APIEndPoint(app=self, version_string='1')
|
||||
|
||||
SourceColumn(
|
||||
source=ErrorLogEntry, label=_('Namespace'),
|
||||
attribute='namespace'
|
||||
)
|
||||
SourceColumn(
|
||||
source=ErrorLogEntry, label=_('Object'),
|
||||
attribute='content_object'
|
||||
)
|
||||
SourceColumn(
|
||||
source=ErrorLogEntry, label=_('Date and time'),
|
||||
attribute='datetime'
|
||||
)
|
||||
SourceColumn(
|
||||
source=ErrorLogEntry, label=_('Result'),
|
||||
attribute='result'
|
||||
)
|
||||
|
||||
app.conf.CELERYBEAT_SCHEDULE.update(
|
||||
{
|
||||
'task_delete_stale_uploads': {
|
||||
@@ -156,7 +143,11 @@ class CommonApp(MayanAppConfig):
|
||||
)
|
||||
|
||||
menu_main.bind_links(links=(menu_about, menu_user,), position=99)
|
||||
|
||||
menu_secondary.bind_links(
|
||||
links=(link_object_error_list_clear,), sources=(
|
||||
'common:object_error_list',
|
||||
)
|
||||
)
|
||||
menu_tools.bind_links(
|
||||
links=(link_filters,)
|
||||
)
|
||||
|
||||
@@ -109,6 +109,9 @@ class ErrorLogNamespace(object):
|
||||
def __str__(self):
|
||||
return force_text(self.label)
|
||||
|
||||
def create(self, obj, result):
|
||||
obj.error_logs.create(namespace=self.name, result=result)
|
||||
|
||||
def all(self):
|
||||
ErrorLogEntry = apps.get_model(
|
||||
app_label='common', model_name='ErrorLogEntry'
|
||||
|
||||
@@ -56,14 +56,20 @@ link_documentation = Link(
|
||||
icon='fa fa-book', tags='new_window', text=_('Documentation'),
|
||||
url='https://mayan.readthedocs.io/en/stable/'
|
||||
)
|
||||
link_error_list = Link(
|
||||
link_object_error_list = Link(
|
||||
kwargs=get_kwargs_factory('resolved_object'),
|
||||
permissions=(permission_error_log_view,), text=_('Errors'),
|
||||
view='common:error_list', kwargs=get_kwargs_factory('resolved_object')
|
||||
view='common:object_error_list',
|
||||
)
|
||||
link_error_list_with_icon = Link(
|
||||
icon='fa fa-lock', permissions=(permission_error_log_view,),
|
||||
text=_('Errors'), view='common:error_list',
|
||||
kwargs=get_kwargs_factory('resolved_object')
|
||||
link_object_error_list_clear = Link(
|
||||
kwargs=get_kwargs_factory('resolved_object'),
|
||||
permissions=(permission_error_log_view,), text=_('Clear all'),
|
||||
view='common:object_error_list_clear',
|
||||
)
|
||||
link_object_error_list_with_icon = Link(
|
||||
kwargs=get_kwargs_factory('resolved_object'), icon='fa fa-lock',
|
||||
permissions=(permission_error_log_view,), text=_('Errors'),
|
||||
view='common:error_list',
|
||||
)
|
||||
link_filters = Link(
|
||||
icon='fa fa-filter', text=_('Data filters'),
|
||||
|
||||
@@ -7,9 +7,10 @@ from .api_views import APIContentTypeList
|
||||
from .views import (
|
||||
AboutView, CheckVersionView, CurrentUserDetailsView, CurrentUserEditView,
|
||||
CurrentUserLocaleProfileDetailsView, CurrentUserLocaleProfileEditView,
|
||||
ErrorLogEntryListView, FaviconRedirectView, FilterResultListView,
|
||||
FilterSelectView, HomeView, LicenseView, PackagesLicensesView,
|
||||
SetupListView, ToolsListView, multi_object_action_view
|
||||
FaviconRedirectView, FilterResultListView, FilterSelectView, HomeView,
|
||||
LicenseView, ObjectErrorLogEntryListClearView, ObjectErrorLogEntryListView,
|
||||
PackagesLicensesView, SetupListView, ToolsListView,
|
||||
multi_object_action_view
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
@@ -55,8 +56,13 @@ urlpatterns = [
|
||||
name='filter_results'
|
||||
),
|
||||
url(
|
||||
r'^(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/errors/$',
|
||||
ErrorLogEntryListView.as_view(), name='error_list'
|
||||
r'^object/(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/errors/$',
|
||||
ObjectErrorLogEntryListView.as_view(), name='object_error_list'
|
||||
),
|
||||
url(
|
||||
r'^object/(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/errors/clear/$',
|
||||
ObjectErrorLogEntryListClearView.as_view(),
|
||||
name='object_error_list_clear'
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
@@ -135,43 +135,6 @@ class CurrentUserLocaleProfileEditView(SingleObjectEditView):
|
||||
return self.request.user.locale_profile
|
||||
|
||||
|
||||
class ErrorLogEntryListView(SingleObjectListView):
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
self.object_content_type = get_object_or_404(
|
||||
ContentType, app_label=self.kwargs['app_label'],
|
||||
model=self.kwargs['model']
|
||||
)
|
||||
|
||||
try:
|
||||
self.content_object = self.object_content_type.get_object_for_this_type(
|
||||
pk=self.kwargs['object_id']
|
||||
)
|
||||
except self.object_content_type.model_class().DoesNotExist:
|
||||
raise Http404
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
obj=self.content_object, permissions=permission_error_log_view,
|
||||
user=request.user
|
||||
)
|
||||
|
||||
return super(ErrorLogEntryListView, self).dispatch(
|
||||
request, *args, **kwargs
|
||||
)
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'hide_object': True,
|
||||
'object': self.content_object,
|
||||
'title': _('Error log entries for: %s' % self.content_object),
|
||||
}
|
||||
|
||||
def get_object_list(self):
|
||||
return ErrorLogEntry.objects.filter(
|
||||
content_type=self.object_content_type,
|
||||
object_id=self.content_object.pk
|
||||
)
|
||||
|
||||
|
||||
class FaviconRedirectView(RedirectView):
|
||||
permanent = True
|
||||
|
||||
@@ -236,6 +199,67 @@ class LicenseView(SimpleView):
|
||||
template_name = 'appearance/generic_form.html'
|
||||
|
||||
|
||||
class ObjectErrorLogEntryListClearView(ConfirmView):
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'object': self.get_object(),
|
||||
'title': _('Clear error log entries for: %s' % self.get_object()),
|
||||
}
|
||||
|
||||
def get_object(self):
|
||||
content_type = get_object_or_404(
|
||||
klass=ContentType, app_label=self.kwargs['app_label'],
|
||||
model=self.kwargs['model']
|
||||
)
|
||||
|
||||
return get_object_or_404(
|
||||
klass=content_type.model_class(),
|
||||
pk=self.kwargs['object_id']
|
||||
)
|
||||
|
||||
def view_action(self):
|
||||
self.get_object().error_logs.all().delete()
|
||||
messages.success(
|
||||
self.request, _('Object error log cleared successfully')
|
||||
)
|
||||
|
||||
|
||||
class ObjectErrorLogEntryListView(SingleObjectListView):
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
AccessControlList.objects.check_access(
|
||||
obj=self.get_object(), permissions=permission_error_log_view,
|
||||
user=request.user
|
||||
)
|
||||
|
||||
return super(ObjectErrorLogEntryListView, self).dispatch(
|
||||
request, *args, **kwargs
|
||||
)
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'extra_columns': (
|
||||
{'name': _('Date and time'), 'attribute': 'datetime'},
|
||||
{'name': _('Result'), 'attribute': 'result'},
|
||||
),
|
||||
'hide_object': True,
|
||||
'object': self.get_object(),
|
||||
'title': _('Error log entries for: %s' % self.get_object()),
|
||||
}
|
||||
|
||||
def get_object(self):
|
||||
content_type = get_object_or_404(
|
||||
klass=ContentType, app_label=self.kwargs['app_label'],
|
||||
model=self.kwargs['model']
|
||||
)
|
||||
|
||||
return get_object_or_404(
|
||||
klass=content_type.model_class(), pk=self.kwargs['object_id']
|
||||
)
|
||||
|
||||
def get_object_list(self):
|
||||
return self.get_object().error_logs.all()
|
||||
|
||||
|
||||
class PackagesLicensesView(SimpleView):
|
||||
template_name = 'appearance/generic_form.html'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user