Ejemplo n.º 1
0
def nearest(request, template_name="locations/nearest.html"):
    locations = []
    lat, lng = None, None
    query = request.GET.get('q')
    filters = get_query_filters(request.user, 'locations.view_location')

    if query:
        lat, lng = get_coordinates(address=query)

    all_locations = Location.objects.filter(filters).distinct()
    if not request.user.is_anonymous():
        all_locations = all_locations.select_related()

    if all((lat,lng)):
        for location in all_locations:
            location.distance = location.get_distance2(lat, lng)
            if location.distance != None:
                locations.append(location)
            locations.sort(key=lambda x: x.distance)

    log_defaults = {
        'event_id' : 834100,
        'event_data': '%s nearest to %s' % ('Location', request.user),
        'description': '%s nearest' % 'Location',
        'user': request.user,
        'request': request,
        'source': 'locations'
    }
    EventLog.objects.log(**log_defaults)

    return render_to_response(template_name, {
        'locations':locations,
        'origin': {'lat':lat,'lng':lng},
        }, context_instance=RequestContext(request))
Ejemplo n.º 2
0
def search(request, template_name="staff/search.html"):
    """Staff plugin search list view"""
    query = request.GET.get('q', None)

    if get_setting('site', 'global', 'searchindex') and query:
        staff = Staff.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'staff.view_staff')
        staff = Staff.objects.filter(filters).distinct()
        if not request.user.is_anonymous():
            staff = staff.select_related()

    staff = staff.order_by('-status','status_detail','start_date')
    
    log_defaults = {
        'event_id' : 1080400,
        'event_data': '%s searched by %s' % ('Staff', request.user),
        'description': '%s searched' % 'Staff',
        'user': request.user,
        'request': request,
        'source': 'staff'
    }
    EventLog.objects.log(**log_defaults)

    return render_to_response(template_name, {'staff_members':staff},
        context_instance=RequestContext(request))
Ejemplo n.º 3
0
def search(request, template_name="discounts/search.html"):
    if not has_perm(request.user, 'discounts.view_discount'):
        raise Http403

    filters = get_query_filters(request.user, 'discounts.view_discount')
    discounts = Discount.objects.filter(filters).distinct()
    query = request.GET.get('q', None)
    if query:
        discounts = discounts.filter(discount_code__icontains=query)

    log_defaults = {
        'event_id' : 1010400,
        'event_data': '%s searched by %s' % ('Discount', request.user),
        'description': '%s searched' % 'Discount',
        'user': request.user,
        'request': request,
        'source': 'discounts'
    }
    EventLog.objects.log(**log_defaults)
    
    return render_to_response(
        template_name,
        {'discounts':discounts},
        context_instance=RequestContext(request)
    )
Ejemplo n.º 4
0
def search(request, template_name="case_studies/search.html"):
    query = request.GET.get('q', None)

    if get_setting('site', 'global', 'searchindex') and query:
        case_studies = CaseStudy.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'case_studies.view_casestudy')
        case_studies = CaseStudy.objects.filter(filters).distinct()
        if not request.user.is_anonymous():
            case_studies = case_studies.select_related()
    case_studies = case_studies.order_by('-create_dt')
    services = Service.objects.all()
    technologies = Technology.objects.all()
    
    log_defaults = {
        'event_id' : 1000400,
        'event_data': '%s searched by %s' % ('Case Study', request.user),
        'description': '%s searched' % 'Case Study',
        'user': request.user,
        'request': request,
        'source': 'case_studies'
    }
    EventLog.objects.log(**log_defaults)

    return render_to_response(template_name, {'case_studies': case_studies, 'services': services, 'technologies': technologies},
        context_instance=RequestContext(request))
Ejemplo n.º 5
0
def search(request, template_name="jobs/search.html"):
    query = request.GET.get('q', None)

    if get_setting('site', 'global', 'searchindex') and query:
        jobs = Job.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'jobs.view_job')
        jobs = Job.objects.filter(filters).distinct()
        if not request.user.is_anonymous():
            jobs = jobs.select_related()

    jobs = jobs.order_by('status_detail','list_type','-post_dt')

    log_defaults = {
        'event_id': 254000,
        'event_data': '%s searched by %s' % ('Job', request.user),
        'description': '%s searched' % 'Job',
        'user': request.user,
        'request': request,
        'source': 'jobs'
    }
    EventLog.objects.log(**log_defaults)

    return render_to_response(template_name, {'jobs': jobs},
        context_instance=RequestContext(request))
Ejemplo n.º 6
0
def search(request, template_name="resumes/search.html"):
    """
    This page lists out all resumes from newest to oldest.
    If a search index is available, this page will also
    have the option to search through resumes.
    """
    has_index = get_setting('site', 'global', 'searchindex')
    query = request.GET.get('q', None)

    if has_index and query:
        resumes = Resume.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'resumes.view_resume')
        resumes = Resume.objects.filter(filters).distinct()
        if request.user.is_authenticated():
            resumes = resumes.select_related()
    resumes = resumes.order_by('-create_dt')

    EventLog.objects.log(**{
        'event_id' : 354000,
        'event_data': '%s searched by %s' % ('Resume', request.user),
        'description': '%s searched' % 'Resume',
        'user': request.user,
        'request': request,
        'source': 'resumes'
    })
    
    return render_to_response(template_name, {'resumes':resumes}, 
        context_instance=RequestContext(request))
Ejemplo n.º 7
0
def search(request, template_name="services/search.html"):
    """Search view for Services plugin"""
    query = request.GET.get('q', None)
    if get_setting('site', 'global', 'searchindex') and query:
        services = Service.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'services.view_service')
        services = Service.objects.filter(filters).distinct()
        if not request.user.is_anonymous():
            services = services.select_related()

    services = services.order_by('-create_dt')

    log_defaults = {
        'event_id' : 354000,
        'event_data': '%s searched by %s' % ('Service', request.user),
        'description': '%s searched' % 'service',
        'user': request.user,
        'request': request,
        'source': 'services'
    }
    EventLog.objects.log(**log_defaults)
    
    return render_to_response(template_name, {'services':services}, 
        context_instance=RequestContext(request))
Ejemplo n.º 8
0
def search(request, template_name="user_groups/search.html"):
    """
    This page lists out all user groups.  If a search index
    is available, this page also allows you to search through
    user groups.
    """
    has_index = get_setting('site', 'global', 'searchindex')
    query = request.GET.get('q', None)

    if has_index and query:
        groups = Group.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'groups.view_group', perms_field=False)
        groups = Group.objects.filter(filters).distinct()
        if request.user.is_authenticated():
            groups = groups.select_related()
        groups = groups.order_by('slug')

    log_defaults = {
        'event_id' : 164000,
        'event_data': '%s searched by %s' % ('Group', request.user),
        'description': '%s searched' % 'Group',
        'user': request.user,
        'request': request,
        'source': 'user_groups'
    }
    EventLog.objects.log(**log_defaults)

    return render_to_response(template_name, {'groups':groups}, 
        context_instance=RequestContext(request))
Ejemplo n.º 9
0
def index(request, cat_slug=None, template_name="videos/list.html"):
    """
    This page lists out all videos. The order can be customized.
    Filtering by category only works if a search index is available.
    """
    has_index = get_setting('site', 'global', 'searchindex')

    if has_index and cat_slug:
        videos = Video.objects.search('cat:%s' % cat_slug, user=request.user)
        videos = videos.order_by('-ordering','-create_dt')
        category = get_object_or_404(Category, slug=cat_slug)
    else:
        filters = get_query_filters(request.user, 'videos.view_video')
        videos = Video.objects.filter(filters).distinct()
        if request.user.is_authenticated():
            videos = videos.select_related()
        videos = videos.order_by('-ordering', '-create_dt')

    categories = Category.objects.all()

    EventLog.objects.log(**{
        'event_id' : 1200400,
        'event_data': '%s viewed by %s' % ('Video list', request.user),
        'description': '%s viewed' % 'Video',
        'user': request.user,
        'request': request,
        'source': 'video',
    })

    return render_to_response(template_name, locals(), 
        context_instance=RequestContext(request))
Ejemplo n.º 10
0
    def render(self, context):
        
        day = self.day.resolve(context)
        type_slug = self.type_slug.resolve(context)

        types = Type.objects.filter(slug=type_slug)

        type = None
        if types:
            type = types[0]

        day = datetime(day.year, day.month, day.day)
        weekday = day.strftime('%a')

        #one day offset so we can get all the events on that day
        bound = timedelta(hours=23, minutes=59)

        start_dt = day+bound
        end_dt = day

        filters = get_query_filters(context['user'], 'events.view_event')
        events = Event.objects.filter(filters).filter(start_dt__lte=start_dt, end_dt__gte=end_dt).distinct()

        if type:
            events = events.filter(type=type)

        if weekday == 'Sun' or weekday == 'Sat':
            events = events.filter(on_weekend=True)

        events = events.order_by(self.ordering or 'start_dt')
        
        context[self.context_var] = events
        return ''
Ejemplo n.º 11
0
def photoset_view_latest(request, template_name="photos/photo-set/latest.html"):
    """ View latest photo set """

    query = request.GET.get('q', None)
    if get_setting('site', 'global', 'searchindex') and query:
        photo_sets = PhotoSet.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'photos.view_photoset')
        photo_sets = PhotoSet.objects.filter(filters).distinct()
        if not request.user.is_anonymous():
            photo_sets = photo_sets.select_related()
    photo_sets = photo_sets.order_by('-create_dt')

    log_defaults = {
        'event_id' : 991400,
        'event_data': '%s searched by %s' % ('PhotoSet', request.user),
        'description': '%s searched' % 'PhotoSet',
        'user': request.user,
        'request': request,
        'source': 'photos'
    }
    EventLog.objects.log(**log_defaults)

    return render_to_response(template_name, {"photo_sets": photo_sets}, 
        context_instance=RequestContext(request))
Ejemplo n.º 12
0
def search(request, template_name="locations/search.html"):
    query = request.GET.get('q', None)

    if get_setting('site', 'global', 'searchindex') and query:
        locations = Location.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'locations.view_location')
        locations = Location.objects.filter(filters).distinct()
        if not request.user.is_anonymous():
            locations = locations.select_related()

    locations = locations.order_by('-create_dt')

    log_defaults = {
        'event_id' : 834000,
        'event_data': '%s listed by %s' % ('Location', request.user),
        'description': '%s listed' % 'Location',
        'user': request.user,
        'request': request,
        'source': 'locations'
    }
    EventLog.objects.log(**log_defaults)
    
    return render_to_response(template_name, {'locations':locations}, 
        context_instance=RequestContext(request))
Ejemplo n.º 13
0
    def get_images(self, user=None, status=True, status_detail='active'):
        """
        Returns the images of this photosets and filters according
        to the given user's permissions.
        This makes use of the search index to avoid hitting the database.
        """
        # user information
        user = user or AnonymousUser()

        filters = get_query_filters(user, 'photologue.view_photo')
        photos = Image.objects.filter(filters).filter(photoset=self.pk).distinct()

        return photos
Ejemplo n.º 14
0
def search(request, template_name="forms/search.html"):
    if not has_perm(request.user,'forms.view_form'):
        raise Http403

    filters = get_query_filters(request.user, 'forms.view_form')
    forms = Form.objects.filter(filters).distinct()
    query = request.GET.get('q', None)
    if query:
        forms = forms.filter(Q(title__icontains=query)|Q(intro__icontains=query)|Q(response__icontains=query))

    forms = forms.order_by('-pk')

    return render_to_response(template_name, {'forms':forms}, 
        context_instance=RequestContext(request))
Ejemplo n.º 15
0
def get_box_list(user):
    """
    Generate a list of 2-tuples of form id and form title
    This will be used as a special select
    """
    from boxes.models import Box
    from perms.utils import get_query_filters
    filters = get_query_filters(user, 'boxes.view_box')
    boxes = Box.objects.filter(filters)
    #To avoid hitting the database n time by calling .object
    #We will use the values in the index field.
    l = [('','None')]
    for box in boxes:
        l.append((box.pk, box.title))
    
    return l
Ejemplo n.º 16
0
def get_form_list(user):
    """
    Generate a list of 2-tuples of form id and form title
    This will be used as a special select
    """
    from forms_builder.forms.models import Form
    from perms.utils import get_query_filters
    filters = get_query_filters(user, 'forms.view_form')
    forms = Form.objects.filter(filters)
    #To avoid hitting the database n time by calling .object
    #We will use the values in the index field.
    l = [('','None')]
    for form in forms:
        l.append((form.pk, form.title))
    
    return l
Ejemplo n.º 17
0
def search(request, template_name="entities/search.html"):
    filters = get_query_filters(request.user, 'entities.view_entity')
    entities = Entity.objects.filter(filters).distinct()

    log_defaults = {
        'event_id' : 294000,
        'event_data': '%s searched by %s' % ('Entity', request.user),
        'description': '%s searched' % 'Entity',
        'user': request.user,
        'request': request,
        'source': 'entities'
    }
    EventLog.objects.log(**log_defaults)
    
    return render_to_response(template_name, {'entities':entities}, 
        context_instance=RequestContext(request))
Ejemplo n.º 18
0
def search(request, template_name="contacts/search.html"):
    if request.user.is_anonymous():
        raise Http403
    if not has_perm(request.user,'contacts.view_contact'):
        raise Http403

    query = request.GET.get('q', None)
    if get_setting('site', 'global', 'searchindex') and query:
        contacts = Contact.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'contacts.view_contact')
        contacts = Contact.objects.filter(filters).distinct()
        if not request.user.is_anonymous():
            contacts = contacts.select_related()

    contacts = contacts.order_by('-create_dt')

    return render_to_response(template_name, {'contacts':contacts},
        context_instance=RequestContext(request))
Ejemplo n.º 19
0
def search(request, template_name="articles/search.html"):
    from datetime import datetime
    get = dict(request.GET)
    query = get.pop('q', [])
    get.pop('page', None)  # pop page query string out; page ruins pagination
    query_extra = ['%s:%s' % (k,v[0]) for k,v in get.items() if v[0].strip()]
    query = ' '.join(query)
    if query_extra:
        query = '%s %s' % (query, ' '.join(query_extra))

    if get_setting('site', 'global', 'searchindex') and query:
        articles = Article.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'articles.view_article')
        articles = Article.objects.filter(filters).distinct()
        articles = articles.filter(release_dt__lte==datetime.now())
        if not request.user.is_anonymous():
            articles = articles.select_related()

    articles = articles.order_by('-release_dt')

    log_defaults = {
        'event_id': 434000,
        'event_data': '%s searched by %s' % ('Article', request.user),
        'description': '%s searched' % 'Article',
        'user': request.user,
        'request': request,
        'source': 'articles'
    }
    EventLog.objects.log(**log_defaults)

    # Query list of category and subcategory for dropdown filters
    category = request.GET.get('category')
    try:
        category = int(category)
    except:
        category = 0
    categories, sub_categories = Article.objects.get_categories(category=category)

    return render_to_response(template_name, {'articles': articles,'categories':categories,
        'sub_categories':sub_categories},
        context_instance=RequestContext(request))
Ejemplo n.º 20
0
def search(request, template_name="testimonials/search.html"):
    """
    This page lists out all testimonials from newest to oldest.
    If a search index is available, this page will also
    have the option to search through testimonials.
    """
    has_index = get_setting('site', 'global', 'searchindex')
    query = request.GET.get('q', None)

    if has_index and query:
        testimonials = Testimonial.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'testimonials.view_story')
        testimonials = Testimonial.objects.filter(filters).distinct()
        if request.user.is_authenticated():
            testimonials = testimonials.select_related()
    testimonials = testimonials.order_by('-create_dt')

    return render_to_response(template_name, {'testimonials': testimonials},
        context_instance=RequestContext(request))
Ejemplo n.º 21
0
def search(request, template_name="files/search.html"):
    """
    This page lists out all files from newest to oldest.
    If a search index is available, this page will also
    have the option to search through files.
    """
    has_index = get_setting('site', 'global', 'searchindex')
    query = request.GET.get('q', None)

    if has_index and query:
        files = File.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'files.view_file', perms_field=False)
        files = File.objects.filter(filters).distinct()
        if request.user.is_authenticated():
            files = files.select_related()
    files = files.order_by('-update_dt')

    return render_to_response(template_name, {'files':files}, 
        context_instance=RequestContext(request))
Ejemplo n.º 22
0
    def render(self, context):
        user = AnonymousUser()
        
        if 'user' in context:
            if isinstance(context['user'], User):
                user = context['user']

        try:
            filters = get_query_filters(user, 'boxes.view_box')
            box = Box.objects.filter(filters).filter(pk=self.pk).distinct()
            context['box'] = box[0]
            template = get_template('boxes/edit-link.html')
            output = '<div id="box-%s" class="boxes">%s %s</div>' % (
                box[0].pk,
                box[0].content,
                template.render(context),
            )
            return output
        except:
            return unicode()
Ejemplo n.º 23
0
def search(request, cat_slug=None, template_name="videos/list.html"):
    """
    This page lists out all videos. The order can be customized.
    If a search index is available, this page will also
    have the option to search through videos.
    """
    has_index = get_setting('site', 'global', 'searchindex')
    query = request.GET.get('q', None)

    categories = Category.objects.all()

    if has_index and query:
        cat = request.GET.get('cat', cat_slug)
        if cat:
            cat_query = 'cat:%s' % cat
            query = ' '.join([query, cat_query])
            categories = Category.objects.filter(slug=cat)
            category = None
            if categories:
                category = category[0]
        videos = Video.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'videos.view_video')
        videos = Video.objects.filter(filters).distinct()
        if request.user.is_authenticated():
            videos = videos.select_related()
        videos = videos.order_by('-ordering', '-create_dt')

    log_defaults = {
        'event_id' : 1200400,
        'event_data': '%s searched by %s' % ('Videos', request.user),
        'description': '%s searched' % 'Videos',
        'user': request.user,
        'request': request,
        'source': 'video',
    }
    EventLog.objects.log(**log_defaults)
    return render_to_response(template_name, locals(), 
        context_instance=RequestContext(request))
Ejemplo n.º 24
0
def search(request, template_name="news/search.html"):
    query = request.GET.get("q", None)
    if get_setting("site", "global", "searchindex") and query:
        news = News.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, "news.view_news")
        news = News.objects.filter(filters).distinct()
        if request.user.is_authenticated():
            news = news.select_related()
    news = news.order_by("-release_dt")

    log_defaults = {
        "event_id": 305400,
        "event_data": "%s searched by %s" % ("News", request.user),
        "description": "%s searched" % "News",
        "user": request.user,
        "request": request,
        "source": "news",
    }
    EventLog.objects.log(**log_defaults)

    return render_to_response(template_name, {"search_news": news}, context_instance=RequestContext(request))
Ejemplo n.º 25
0
def application_entries_search(request, template_name="memberships/entries/search.html"):
    """
    Displays a page for searching membership application entries.
    """
    query = request.GET.get('q')
    if get_setting('site', 'global', 'searchindex') and query:
        entries = AppEntry.objects.search(query, user=request.user)
    else:
        status = request.GET.get('status', None)

        filters = get_query_filters(request.user, 'memberships.view_appentry')
        entries = AppEntry.objects.filter(filters).distinct()
        if status:
            status_filter = get_status_filter(status)
            entries = entries.filter(status_filter)

        entries = entries.select_related()

    entries = entries.order_by('-entry_time')

    apps = App.objects.all()
    types = MembershipType.objects.all()

    # log entry search view
    EventLog.objects.log(**{
        'event_id' : 1084000,
        'event_data': '%s listed by %s' % ('Membership Entries', request.user),
        'description': '%s listed' % 'Membership Entries',
        'user': request.user,
        'request': request,
        'source': 'memberships',
    })

    return render_to_response(template_name, {
        'entries':entries,
        'apps':apps,
        'types':types,
        }, context_instance=RequestContext(request))
Ejemplo n.º 26
0
def search(request, template_name="pages/search.html"):
    query = request.GET.get('q', None)
    if get_setting('site', 'global', 'searchindex') and query:
        pages = Page.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'pages.view_page')
        pages = Page.objects.filter(filters).distinct()
        if request.user.is_authenticated():
            pages = pages.select_related() 
    pages = pages.order_by('-create_dt')

    log_defaults = {
        'event_id' : 584000,
        'event_data': '%s searched by %s' % ('Page', request.user),
        'description': '%s searched' % 'Page',
        'user': request.user,
        'request': request,
        'source': 'pages'
    }
    EventLog.objects.log(**log_defaults)
    
    return render_to_response(template_name, {'pages':pages}, 
        context_instance=RequestContext(request))
Ejemplo n.º 27
0
def search(request, template_name="help_files/search.html"):
    """ Help Files Search """
    query = request.GET.get("q", None)

    if get_setting("site", "global", "searchindex") and query:
        help_files = HelpFile.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, "help_files.view_helpfile")
        help_files = HelpFile.objects.filter(filters).distinct()
        if not request.user.is_anonymous():
            help_files = help_files.select_related()

    log_defaults = {
        "event_id": 1000400,
        "event_data": "%s searched by %s" % ("Help File", request.user),
        "description": "%s searched" % "Help File",
        "user": request.user,
        "request": request,
        "source": "help_files",
    }
    EventLog.objects.log(**log_defaults)

    return render_to_response(template_name, {"help_files": help_files}, context_instance=RequestContext(request))
Ejemplo n.º 28
0
def topic(request, id, template_name="help_files/topic.html"):
    """ List of topic help files """
    topic = get_object_or_404(Topic, pk=id)
    query = None

    filters = get_query_filters(request.user, "help_files.view_helpfile")
    help_files = HelpFile.objects.filter(filters).filter(topics__in=[topic.pk]).distinct()
    if not request.user.is_anonymous():
        help_files = help_files.select_related()

    log_defaults = {
        "event_id": 1000400,
        "event_data": "%s topic searched by %s" % ("Help File", request.user),
        "description": "%s topic searched" % "Help File",
        "user": request.user,
        "request": request,
        "source": "help_files",
    }
    EventLog.objects.log(**log_defaults)

    return render_to_response(
        template_name, {"topic": topic, "help_files": help_files}, context_instance=RequestContext(request)
    )
Ejemplo n.º 29
0
def membership_search(request, template_name="memberships/search.html"):
    query = request.GET.get('q')
    if get_setting('site', 'global', 'searchindex') and query:
        members = Membership.objects.search(query, user=request.user)
    else:
        filters = get_query_filters(request.user, 'memberships.view_membership')
        members = Membership.objects.filter(filters).distinct()
        if not request.user.is_anonymous():
            members = members.select_related()
            
    types = MembershipType.objects.all()

    EventLog.objects.log(**{
        'event_id' : 474000,
        'event_data': '%s searched by %s' % ('Membership', request.user),
        'description': '%s searched' % 'Membership',
        'user': request.user,
        'request': request,
        'source': 'memberships'
    })

    return render_to_response(template_name, {'members': members, 'types': types},
        context_instance=RequestContext(request))  
Ejemplo n.º 30
0
def search(request, template_name="navs/search.html"):
    query = request.GET.get('q', None)

    filters = get_query_filters(request.user, 'navs.view_nav')
    navs = Nav.objects.filter(filters).distinct()
    if query:
        navs = navs.filter(Q(title__icontains=query)|Q(description__icontains=query))

    log_defaults = {
        'event_id' : 195400,
        'event_data': '%s searched by %s' % ('Nav', request.user),
        'description': '%s searched' % 'Nav',
        'user': request.user,
        'request': request,
        'source': 'navs'
    }
    EventLog.objects.log(**log_defaults)
    
    return render_to_response(
        template_name,
        {'navs':navs},
        context_instance=RequestContext(request)
    )