コード例 #1
0
ファイル: composers.py プロジェクト: pjsier/muckrock
def _process_request_form(request):
    """A helper function for getting info out of a request composer form"""
    form = RequestForm(request.POST, request=request)
    foia_request = {}
    if form.is_valid():
        data = form.cleaned_data
        if request.user.is_anonymous():
            _make_user(request, data)
        title = data['title']
        document = data['document']
        level = data['jurisdiction']
        if level == 'f':
            jurisdiction = Jurisdiction.objects.filter(level='f')[0]
        elif level == 's':
            jurisdiction = data['state']
        else:
            jurisdiction = data['local']
        agency_query = Agency.objects.filter(name=data['agency'],
                                             jurisdiction=jurisdiction)
        agency = agency_query[0] if agency_query \
                 else _make_new_agency(request, data['agency'], jurisdiction)
        foia_request.update({
            'title': title,
            'document': document,
            'jurisdiction': jurisdiction,
            'agency': agency,
        })
    return foia_request
コード例 #2
0
ファイル: composers.py プロジェクト: pjsier/muckrock
def create_request(request):
    """A very important view for composing FOIA requests"""
    # pylint: disable=too-many-locals
    # we should refactor this, its too long, and remove the pylint disable
    initial_data = {}
    clone = False
    parent = None
    try:
        foia_pk = request.GET['clone']
        foia = get_object_or_404(FOIARequest, pk=foia_pk)
        if not foia.has_perm(request.user, 'view'):
            raise Http404()
        initial_data = {
            'title': foia.title,
            'document': smart_text(foia.requested_docs),
            'agency': foia.agency.name if foia.agency else ''
        }
        jurisdiction = foia.jurisdiction
        level = jurisdiction.level
        if level == 's':
            initial_data['state'] = jurisdiction
        elif level == 'l':
            initial_data['local'] = jurisdiction
        initial_data['jurisdiction'] = level
        clone = True
        parent = foia
    except (KeyError, ValueError):
        # KeyError if no clone was passed in
        # Value error if invalid clone is passed in
        pass
    if request.method == 'POST':
        foia_request = _process_request_form(request)
        if foia_request:
            foia, foia_comm = _make_request(request, foia_request, parent)
            foia_comm.save()
            foia.save(comment='request drafted')
            request.session['ga'] = 'request_drafted'
            return redirect(foia)
        else:
            # form is invalid
            # autocomplete blows up if you pass it a bad value in state
            # or local - not sure how this is happening, but am removing
            # non numeric values for these keys
            # this seems to technically be a bug in autocompletes rendering
            # should probably fix it there and submit a patch
            post = request.POST.copy()
            for chk_val in ['local', 'state']:
                try:
                    chk_val in post and int(post[chk_val])
                except (ValueError, TypeError):
                    del post[chk_val]
            form = RequestForm(post, request=request)
    else:
        if clone:
            form = RequestForm(initial=initial_data, request=request)
        else:
            form = RequestForm(request=request)

    featured = (FOIARequest.objects.get_viewable(request.user).filter(
        featured=True).select_related_view().get_public_file_count())

    context = {'form': form, 'clone': clone, 'featured': featured}

    return render(
        request,
        'forms/foia/create.html',
        context,
    )