Example #1
0
        def wrapper(request, *args, **kwargs):

            if not getattr(settings, 'ENABLE_OPEN_PORTAL', False):
                from django.contrib.auth.decorators import login_required as lr
                dec = lr(function=function, redirect_field_name=redirect_field_name, login_url=login_url)
                controller = dec(controller_func)
                return controller(request, *args, **kwargs)
            else:
                return controller_func(request, *args, **kwargs)
Example #2
0
        def wrapper(request, *args, **kwargs):

            if not getattr(settings, 'ENABLE_OPEN_PORTAL', False):
                from django.contrib.auth.decorators import login_required as lr
                dec = lr(function=function,
                         redirect_field_name=redirect_field_name,
                         login_url=login_url)
                controller = dec(controller_func)
                return controller(request, *args, **kwargs)
            else:
                return controller_func(request, *args, **kwargs)
Example #3
0
from django.conf.urls import patterns, include, url
from project import views

urlpatterns = patterns('',
    url(r'^near/$', views.near, name="near"),
    url(r'^near/(?P<projectslug>[-\w]+)/$', views.nearproject, name="nearproject"),
    url(r'^donear/$', views.donear, name="donear"),
    url(r'^parseaddr/$', views.parseaddr, name="parseaddr"),
    url(r'^things/$', views.things, name="things"),
    url(r'^ongs/$', views.ongs, name="ongs"),
    url(r'^ong/(?P<ongslug>[-\w]+)/$', views.ong, name="ong"),
    url(r'^detail/(?P<projectslug>[-\w]+)/$', views.detail, name="detail"),
    url(r'^donate/(?P<projectslug>[-\w]+)/$', views.donate, name="donate"),
    url(r'^donate/remove/(?P<pk>\d+)/$', views.donate_remove, name="donate_remove"),
    url(r'^cooperate/(?P<projectslug>[-\w]+)/$', views.cooperate, name="cooperate"),
    url(r'^create/ong/$', lr(views.CreateONG.as_view()), name="create_ong"),
    url(r'^edit/ong/(?P<pk>\d+)/$', lr(views.UpdateONG.as_view()), name="edit_ong"),
    url(r'^create/project/(?P<ongslug>[-\w]+)/$', lr(views.CreateProject.as_view()), name="create_project"),
    url(r'^edit/project/(?P<projectslug>[-\w]+)/$', lr(views.UpdateProject.as_view()), name="edit_project"),
    url(r'^create/thing/(\d+)/$', lr(views.CreateThing.as_view()), name="create_thing"),
    url(r'^edit/thing/(?P<pk>\d+)/$', lr(views.UpdateThing.as_view()), name="update_thing"),
    url(r'^remove/thing/(?P<pk>\d+)/$', lr(views.RemoveThing.as_view()), name="remove_thing"),
    url(r'^create/direction/(\d+)/$', lr(views.CreateDirection.as_view()), name="create_direction"),
    url(r'^edit/direction/(?P<pk>\d+)/$', lr(views.UpdateDirection.as_view()), name="update_direction"),
    url(r'^remove/direction/(?P<pk>\d+)/$', lr(views.RemoveDirection.as_view()), name="remove_direction"),
    url(r'^create/objective/(\d+)/$', lr(views.CreateProjectObjective.as_view()), name="create_objective"),
    url(r'^edit/objective/(?P<pk>\d+)/$', lr(views.UpdateProjectObjective.as_view()), name="update_objective"),
    url(r'^remove/objective/(?P<pk>\d+)/$', lr(views.RemoveProjectObjective.as_view()), name="remove_objective"),

    # AJAX
    url(r'^thing/description/$', views.thing_description, name="thing_description"),
Example #4
0
from django.conf.urls import patterns, url
from django.views.generic.base import RedirectView
from django.contrib.auth.decorators import login_required as lr
from forum.views import AdminCourseForumView
from views import AdminView

urlpatterns = patterns(
    '',
    # list all courses
    url(r'^$', lr(RedirectView.as_view(url="courses/")), name="administration.home"),
    url(r'^courses/$', AdminView.as_view(template_name="courses_admin.html")),

    # create and edit course
    url(r'^courses/new/$', AdminView.as_view(template_name="new_course.html")),
    url(r'^courses/(?P<pk>[1-9][0-9]*)/$', AdminView.as_view(template_name="new_course.html")),

    # create and edit lesson
    url(r'^courses/(?P<course_id>[1-9][0-9]*)/lessons/new/$', AdminView.as_view(template_name="new_lesson.html")),
    url(r'^courses/(?P<course_id>[1-9][0-9]*)/lessons/(?P<pk>[1-9][0-9]*)/$', AdminView.as_view(template_name="new_lesson.html")),

    # messages
    url(r'^course/(?P<course_id>[1-9][0-9]*)/messages/$', AdminView.as_view(template_name="messages.html")),
    url(r'^course/(?P<course_id>[1-9][0-9]*)/message/(?P<message_id>[1-9][0-9]*)$', AdminView.as_view(template_name="message.html")),

    url(r'^course/(?P<course_id>[1-9][0-9]*)/forum/', AdminCourseForumView.as_view()),

    url(r'^users/$', AdminView.as_view(template_name="users.html")),

    url(r'^course/(?P<course_id>[1-9][0-9]*)/stats/$', AdminView.as_view(template_name="stats.html")),
)
Example #5
0
from django.urls import path
from ecommerce.views import home, details
from django.contrib.auth.decorators import login_required as lr

app_name = 'ecommerce'

urlpatterns = [
    path('', home, name='home'),
    path('details', lr(details), name='details'),
]
# -*- coding: utf-8 -*-

from django.conf.urls import patterns, url
from django.contrib.auth.decorators import login_required as lr

from .views import RunsView, ReportView, NewRunView, NewHostView, DeleteOlderView, \
    NewLocalRunView, ReportFilesView, RunView, DeleteRunView, ResultViewAjax

urlpatterns = patterns(
    '',
    url(r'^$', lr(RunsView.as_view()), name='index'),
    url(r'^$', lr(RunsView.as_view()), name='results-list'),
    url(r'^delete-older/$', lr(DeleteOlderView.as_view()),
        name='delete-older'),
    url(r'^(?P<result_id>\d+)/detail/$',
        lr(RunView.as_view()),
        name='result-detail'),
    #url(r'^run/(?P<run_id>\d+)/$', lr(RunView.as_view()), name='run'),
    # TODO: creating runs from UI is not done and ready for production
    #url(r'^new/$', lr(NewRunView.as_view()), name='new-run'),
    #url(r'^new-local-run/$', lr(NewLocalRunView.as_view()), name='new-local-run'),
    #url(r'^new-host/$', lr(NewHostView.as_view()), name='new-host'),
    url(r'^(?P<result_id>\d+)/report/$',
        lr(ReportView.as_view()),
        name='show-report'),
    url(r'^(?P<result_id>\d+)/file/$',
        lr(ReportFilesView.as_view()),
        name='show-file'),
    url(r'^(?P<result_id>\d+)/ajax/$',
        lr(ResultViewAjax.as_view()),
        name='show-result-ajax'),
Example #7
0
File: urls.py Project: misli/rhw
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import include, url
from django.contrib import admin
from django.contrib.auth.decorators import login_required as lr, permission_required as pr
from django.contrib.auth.views import login, logout

from .views import *
from .forms import PasswordResetForm

urlpatterns = [
    url(r'^$',                                              HomeView.as_view(),                 name='home'),
    url(r'^ideas/$',                                        IdeasView.as_view(),                name='ideas'),
    url(r'^ideas/new/$',                                    lr(IdeaCreateView.as_view()),       name='idea-create'),
    url(r'^ideas/(?P<slug>[^/]+)/$',                        IdeaView.as_view(),                 name='idea'),
    url(r'^ideas/(?P<slug>[^/]+)/edit/$',                   lr(IdeaEditView.as_view()),         name='idea-edit'),
    url(r'^ideas/(?P<slug>[^/]+)/(?P<op>[+-])1$',           lr(interested),                     name='interested'),
    url(r'^projects/$',                                     ProjectsView.as_view(),             name='projects'),
    url(r'^projects/(?P<slug>[^/]+)/$',                     ProjectView.as_view(),              name='project'),
    url(r'^projects/(?P<slug>[^/]+)/edit/$',                lr(ProjectEditView.as_view()),      name='project-edit'),
    url(r'^projects/(?P<slug>[^/]+)/(?P<op>[+-])1$',        lr(member_vote),                    name='member_vote'),
    url(r'^rhws/$',                                         RhwsView.as_view(),                 name='rhws'),
    url(r'^rhws/new/$',                                     pr('')(RhwCreateView.as_view()),    name='rhw-create'),
    url(r'^rhws/(?P<slug>[^/]+)/$',                         RhwView.as_view(),                  name='rhw'),
    url(r'^rhws/(?P<slug>[^/]+)/edit/$',                    lr(RhwEditView.as_view()),          name='rhw-edit'),
    url(r'^rhws/(?P<slug>[^/]+)/nominate/$',                lr(RhwNominateView.as_view()),      name='rhw-nominate'),
    url(r'^rhws/(?P<slug>[^/]+)/nominate/new$',             lr(RhwNominateNewView.as_view()),   name='rhw-nominate-new'),
    url(r'^rhws/(?P<rhw>[^/]+)/select/(?P<idea>[^/]+)/$',   pr('')(RhwSelectView.as_view()),    name='rhw-select'),
Example #8
0
from django.conf.urls import patterns, url
from django.views.generic.base import RedirectView
from django.contrib.auth.decorators import login_required as lr
from forum.views import AdminCourseForumView
from course_material.views import CourseMaterialAdminView
from .views import (AdminView, CourseAdminView, CourseCreateView,
                    ExportCourseView, ImportCourseView, UserAdminView,)

urlpatterns = patterns(
    '',
    # home admin
    url(r'^home/$', lr(AdminView.as_view(template_name="home.html")), name="administration.home"),

    # list all courses
    url(r'^$', lr(RedirectView.as_view(url="courses/"))),
    url(r'^courses/$', AdminView.as_view(template_name="courses.html"), name='administration.courses'),

    # users
    url(r'^users/$', UserAdminView.as_view(template_name="users.html"), name='administration.users'),
    # url(r'^users/(?P<pk>[0-9]+)/$', UserUpdateView.as_view(), name='administration.user-update'),
    # url(r'^users/(?P<pk>[0-9]+)/delete/$', UserDeleteView.as_view(), name='administration.user-delete'),

    # create, edit and export courses
    url(r'^courses/new/$', CourseCreateView.as_view(), name="administration.new_course"),
    url(r'^courses/(?P<course_id>[1-9][0-9]*)/$', CourseAdminView.as_view(template_name="course.html"), name="administration.edit_course"),
    url(r'^course/(?P<course_id>[1-9][0-9]*)/export/$', ExportCourseView.as_view(), name="administration.export_course"),
    url(r'^course/import/$', ImportCourseView.as_view(), name="administration.import_course"),

    # create and edit lesson
    url(r'^courses/(?P<course_id>[1-9][0-9]*)/lessons/new/$', CourseAdminView.as_view(template_name="lesson.html")),
    url(r'^courses/(?P<course_id>[1-9][0-9]*)/lessons/(?P<pk>[1-9][0-9]*)/$', CourseAdminView.as_view(template_name="lesson.html")),
Example #9
0
from django.conf.urls import url
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.auth.decorators import login_required as lr
from apps.miembros.views import MemberRegister, ArtistRegister, ArtistEditProfile, NotificarInscripcion, RequestList, DetailRequest, \
                                RejectRequest, AuthRequest, Follow, Follow2

urlpatterns = [
    #    url(r'^listArtist$', ArtistList.as_view(), name = 'inicio'),
    url(r'^new_member$', MemberRegister.as_view(), name='member_create'),
    url(r'^artist_profile/(?P<pk>\d+)$',
        lr(ArtistRegister.as_view()),
        name='artist_manage'),
    url(r'^(?P<pk>\d+)$', lr(ArtistEditProfile.as_view()), name='artist_edit'),
    url(r'^send_email/$', lr(NotificarInscripcion), name='notify_request'),
    url(r'^$', lr(RequestList.as_view()), name='requests_list'),
    url(r'^(?P<pk>\d+)$', lr(DetailRequest.as_view()), name='request_detail'),
    url(r'^decline/(?P<pk>\d+)$', lr(RejectRequest), name='reject_request'),
    url(r'^accept/(?P<pk>\d+)$', lr(AuthRequest), name='authorizate_request'),
    url(r'^follow/(?P<pk>\d+)$', lr(Follow), name='following_artist'),
    url(r'^follow2/(?P<pk>\d+)$', lr(Follow2), name='following_artist2'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# -*- coding: utf-8 -*-

from django.conf.urls import patterns, url
from django.contrib.auth.decorators import login_required as lr
from .views import TwoCompareView

urlpatterns = patterns(
    '',
    url(r'^$', lr(TwoCompareView.as_view()), name='compare'),
    url(r'^two-compare/$', lr(TwoCompareView.as_view()), name='two-compare'),
)
Example #11
0
    path('jet/', include('jet.urls', 'jet')),
    path('api/music/', include('music.urls')),
    path('api/user/', include('user.urls')),
    path(
        'openapi/',
        get_schema_view(
            title="Moodsic",
            description="API",
            authentication_classes=[SessionAuthentication],
            permission_classes=[IsAuthenticated],
        ),
        name='openapi-schema',
    ),
    path('swagger-ui/',
         lr(
             TemplateView.as_view(
                 template_name='swagger-ui.html',
                 extra_context={'schema_url': 'openapi-schema'}), ),
         name='swagger-ui')
]

if settings.DEBUG:
    # -- Static Serving
    urlpatterns += static(
        settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(
            settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    # -- Debug Toolbar
    import debug_toolbar

    urlpatterns += [
        path('__debug__/', include(debug_toolbar.urls)),
    ]
# -*- coding: utf-8 -*-

from .views import *

from django.conf.urls import patterns, url
from django.contrib.auth.decorators import login_required as lr

# these are private URLs for auth management

urlpatterns = patterns('',
    url(r'^list/$', lr(AuthListView.as_view()), name='auth-list'),
    url(r'^create/$', lr(CreateUserView.as_view()), name='auth-create'),
    url(r'^enable/$', lr(EnableAuthView.as_view()), name='auth-enable'),
    url(r'^disable/$', lr(DisableAuthView.as_view()), name='auth-disable'),
    url(r'^edit/(?P<username>[\w.@+-]+)/$', lr(EditUserView.as_view()), name='auth-edit'),
    url(r'^delete/(?P<username>[\w.@+-]+)/$', lr(DeleteAuthView.as_view()), name='auth-delete'),
)
Example #13
0
# -*- coding: utf-8 -*-

from django.conf.urls import patterns, url
from django.contrib.auth.decorators import login_required as lr

from .views import RunsView, ReportView, NewRunView, NewHostView, DeleteOlderView, \
    NewLocalRunView, ReportFilesView, RunView, DeleteRunView, ResultViewAjax

urlpatterns = patterns(
    '',
    url(r'^$', lr(RunsView.as_view()), name='index'),
    url(r'^$', lr(RunsView.as_view()), name='results-list'),
    url(r'^delete-older/$', lr(DeleteOlderView.as_view()), name='delete-older'),
    url(r'^(?P<result_id>\d+)/detail/$', lr(RunView.as_view()), name='result-detail'),
    #url(r'^run/(?P<run_id>\d+)/$', lr(RunView.as_view()), name='run'),
    # TODO: creating runs from UI is not done and ready for production
    #url(r'^new/$', lr(NewRunView.as_view()), name='new-run'),
    #url(r'^new-local-run/$', lr(NewLocalRunView.as_view()), name='new-local-run'),
    #url(r'^new-host/$', lr(NewHostView.as_view()), name='new-host'),
    url(r'^(?P<result_id>\d+)/report/$', lr(ReportView.as_view()),  name='show-report'),
    url(r'^(?P<result_id>\d+)/file/$', lr(ReportFilesView.as_view()),        name='show-file'),
    url(r'^(?P<result_id>\d+)/ajax/$', lr(ResultViewAjax.as_view()), name='show-result-ajax'),
    url(r'^(?P<result_id>\d+)/delete/$', lr(DeleteRunView.as_view()), name='result-delete'),
)
Example #14
0
     views.nearproject,
     name="nearproject"),
 url(r'^donear/$', views.donear, name="donear"),
 url(r'^parseaddr/$', views.parseaddr, name="parseaddr"),
 url(r'^things/$', views.things, name="things"),
 url(r'^ongs/$', views.ongs, name="ongs"),
 url(r'^ong/(?P<ongslug>[-\w]+)/$', views.ong, name="ong"),
 url(r'^detail/(?P<projectslug>[-\w]+)/$', views.detail, name="detail"),
 url(r'^donate/(?P<projectslug>[-\w]+)/$', views.donate, name="donate"),
 url(r'^donate/remove/(?P<pk>\d+)/$',
     views.donate_remove,
     name="donate_remove"),
 url(r'^cooperate/(?P<projectslug>[-\w]+)/$',
     views.cooperate,
     name="cooperate"),
 url(r'^create/ong/$', lr(views.CreateONG.as_view()), name="create_ong"),
 url(r'^edit/ong/(?P<pk>\d+)/$',
     lr(views.UpdateONG.as_view()),
     name="edit_ong"),
 url(r'^create/project/(?P<ongslug>[-\w]+)/$',
     lr(views.CreateProject.as_view()),
     name="create_project"),
 url(r'^edit/project/(?P<projectslug>[-\w]+)/$',
     lr(views.UpdateProject.as_view()),
     name="edit_project"),
 url(r'^create/thing/(\d+)/$',
     lr(views.CreateThing.as_view()),
     name="create_thing"),
 url(r'^edit/thing/(?P<pk>\d+)/$',
     lr(views.UpdateThing.as_view()),
     name="update_thing"),
Example #15
0
import os

from django.conf.urls import patterns, url  
from django.views.decorators.cache import cache_page
from django.contrib.auth.decorators import user_passes_test, login_required as lr
from django.forms.models import model_to_dict

from . import views
from . import appname

sur = user_passes_test(lambda u:(u.is_superuser or getattr(u, 'perm', None) == appname)) # super_user_required

# menu的合法值由views.ADMIN_KEY 和 views.ORDI_KEY提供
urlpatterns = [
    # app主页暂时由submit_menu代理
    url(r'^$',  lr(views.submit_menu.as_view(menu='报名')), name='home'),
    url(r'^blank_zkz/$',  views.blank_zkz.as_view(menu='打印准考证'), name='blank_zkz'),
    url(r'^config/create/$', sur(views.config_create.as_view(menu='配置')), name='config_create'),
    url(r'^config/update/(?P<pk>\d+)$', sur(views.config_update.as_view(menu='配置')), name='config_update'),
    url(r'^config/detail/(?P<pk>\d+)$', sur(views.config_detail.as_view(menu='配置')), name='config_detail'),
    #url(r'^zkz_all/$', sur(views.zkz_all.as_view(menu='特殊功能')), name='zkz_all'),
]

for name, code in views.ADMIN_MENU:
    urlpatterns.append(
        url(r'^%s/menu/$'%code.split('_')[0],  sur(getattr(views,code).as_view(menu=name)), name=code)
    )

for name, code in views.ORDI_MENU:
    urlpatterns.append(
        url(r'^%s/menu/$'%code.split('_')[0],  getattr(views,code).as_view(menu=name), name=code)
Example #16
0
from django.conf.urls import url
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.auth.decorators import login_required as lr

from marketing.views import CrearPromocion, ListarHome, ViewMenu, ViewPromo, EnviarCorreo, \
							RegistrarCorreo, ListarRecetaImagen, EditarImagenReceta, \
							DetallePromocion, DetalleProducto


urlpatterns = [
    url(r'^sobre_nosotros/', RegistrarCorreo.as_view(), name = 'acerca_de'),
    url(r'^recetas/', lr(ListarRecetaImagen.as_view()), name='receta_listar'),
    url(r'^receta/editar/(?P<pk>\d+)$', lr(EditarImagenReceta.as_view()), name='receta_editar'),
    url(r'^nueva_promo', lr(CrearPromocion.as_view()), name='crear_promocion'),
    url(r'^home/',ListarHome.as_view(), name='index'),
    url(r'^menu/',ViewMenu.as_view(), name='menu'),
    url(r'^promocion/',ViewPromo.as_view(), name='promo'),
    url(r'^sendmail/',EnviarCorreo, name='mailing'),
    url(r'^detalle/(?P<pk>\d+)/$', DetallePromocion.as_view(), name='detalle_promocion'),
    url(r'^detalle/receta/(?P<pk>\d+)/$', DetalleProducto.as_view(), name='detalle_producto'),
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
Example #17
0
from django.contrib.auth.decorators import login_required as lr
from django.urls import path

from wash.views import washer_list_view, WasherDetail

app_name = 'wash'

urlpatterns = [
    path('', lr(washer_list_view), name='washer-list'),
    path('<int:pk>/', WasherDetail.as_view(), name='washer-detail'),
]
Example #18
0
# -*- coding: utf-8 -*-

from django.conf.urls import patterns, url
from django.contrib.auth.decorators import login_required as lr

from .views import *

urlpatterns = patterns(
    '',
    url(r'^$', lr(SettingsView.as_view()), name='settings'),
    url(r'^state/$',
        lr(SetStateSettingsView.as_view()),
        name='update-state-filter'),
)
Example #19
0
File: urls.py Project: misli/rhw
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import include, url
from django.contrib import admin
from django.contrib.auth.decorators import login_required as lr, permission_required as pr
from django.contrib.auth.views import login, logout

from .views import *
from .forms import PasswordResetForm

urlpatterns = [
    url(r'^$', HomeView.as_view(), name='home'),
    url(r'^ideas/$', IdeasView.as_view(), name='ideas'),
    url(r'^ideas/new/$', lr(IdeaCreateView.as_view()), name='idea-create'),
    url(r'^ideas/(?P<slug>[^/]+)/$', IdeaView.as_view(), name='idea'),
    url(r'^ideas/(?P<slug>[^/]+)/edit/$',
        lr(IdeaEditView.as_view()),
        name='idea-edit'),
    url(r'^ideas/(?P<slug>[^/]+)/(?P<op>[+-])1$',
        lr(interested),
        name='interested'),
    url(r'^projects/$', ProjectsView.as_view(), name='projects'),
    url(r'^projects/(?P<slug>[^/]+)/$', ProjectView.as_view(), name='project'),
    url(r'^projects/(?P<slug>[^/]+)/edit/$',
        lr(ProjectEditView.as_view()),
        name='project-edit'),
    url(r'^projects/(?P<slug>[^/]+)/(?P<op>[+-])1$',
        lr(member_vote),
        name='member_vote'),
Example #20
0
from course_material.views import CourseMaterialAdminView
from .views import (
    AdminView,
    CourseAdminView,
    CourseCreateView,
    ExportCourseView,
    ImportCourseView,
    UserAdminView,
    NewStudentsJocaView,
)

urlpatterns = patterns(
    '',
    # home admin
    url(r'^home/$',
        lr(AdminView.as_view(template_name="home.html")),
        name="administration.home"),

    # list all courses
    url(r'^$', lr(RedirectView.as_view(url="courses/"))),
    url(r'^courses/$',
        AdminView.as_view(template_name="courses.html"),
        name='administration.courses'),

    # users
    url(r'^users/$',
        UserAdminView.as_view(template_name="users.html"),
        name='administration.users'),
    # url(r'^users/(?P<pk>[0-9]+)/$', UserUpdateView.as_view(), name='administration.user-update'),
    # url(r'^users/(?P<pk>[0-9]+)/delete/$', UserDeleteView.as_view(), name='administration.user-delete'),
Example #21
0
# -*- coding: utf-8 -*-

from django.conf.urls import patterns, url
from django.contrib.auth.decorators import login_required as lr

from .views import *

urlpatterns = patterns('',
    url(r'^$', lr(SettingsView.as_view()), name='settings'),
    url(r'^state/$', lr(SetStateSettingsView.as_view()), name='update-state-filter'),
)