Beispiel #1
0
 def params(self):
     # (!) Olivier Pons ! REQUEST removed
     a = QueryDict('', mutable=True)
     a.update(self.request.GET)
     a.update(self.request.POST)
     retour = {}
     for key, value in a.iterlists():
         if len(value) > 1:
             retour[key] = value
         else:
             retour[key] = value[0]
     return retour
Beispiel #2
0
    def create_channel_params(self,
                              path_params,
                              channel_item,
                              wsgi_environ,
                              raw_request,
                              post_data=None,
                              _has_debug=_has_debug):
        """ Collects parameters specific to this channel (HTTP) and updates wsgi_environ
        with HTTP-specific data.
        """
        qs = wsgi_environ.get('QUERY_STRING')
        if qs:
            qs = QueryDict(qs, encoding='utf-8')
            _qs = {}
            for key, value in qs.iterlists():
                if len(value) > 1:
                    _qs[key] = value
                else:
                    _qs[key] = value[0]
        else:
            _qs = {}

        # Whoever called us has already parsed POST for us so we just use it as is
        if post_data:
            post = post_data
        else:
            if channel_item.data_format == DATA_FORMAT.POST:
                post = QueryDict(raw_request, encoding='utf-8')
            else:
                post = QueryDict(None, encoding='utf-8')

        if channel_item.url_params_pri == URL_PARAMS_PRIORITY.QS_OVER_PATH:
            if _qs:
                path_params.update((key, value) for key, value in _qs.items())
            channel_params = path_params
        else:
            if _qs:
                channel_params = dict(
                    (key, value) for key, value in _qs.items())
            else:
                channel_params = {}
            channel_params.update(path_params)

        if _has_debug:
            logger.debug('channel_params `%s`, path_params `%s`, _qs `%s`',
                         channel_params, path_params, _qs)

        wsgi_environ['zato.http.GET'] = _qs
        wsgi_environ['zato.http.POST'] = post

        return channel_params
Beispiel #3
0
    def _get_flattened(self, params):
        """ Returns a QueryDict of parameters with single-element lists unwrapped to point to the sole element directly.
        """
        if params:
            params = QueryDict(params, encoding='utf-8')
            out = {}
            for key, value in params.iterlists():
                if len(value) > 1:
                    out[key] = value
                else:
                    out[key] = value[0]
        else:
            out = {}

        return out
Beispiel #4
0
    def put(self, request, id):
        """ edit a checklist """
        try:
            checklist = CheckList.objects.get(pk=id)
        except Exception:
            return HttpResponseNotFound()

        query_dict = QueryDict(request.body)
        put_params = dict(query_dict.iterlists())

        name = put_params.get('name')
        is_starred = put_params.get('is_starred')
        if name:
            checklist.name = name[0]
        if is_starred is not None:
            checklist.is_starred = bool(is_starred)
        checklist.save()
        return JsonResponse({'success': True})
Beispiel #5
0
 def get_link_url(self, link):
     url = link.get_base_url()
     params = self.get('extra_get_params', None) or QueryDict('', mutable=True)
     if params:
         params = copy(params)
         if '?' in url:
             url, get_string = url.split('?', 1)
             url_args = QueryDict(get_string)
             if hasattr(params, 'setlist'):
                 for key, value in url_args.iterlists():
                     params.setlist(key, value)
             else:
                 params.update(url_args)
         if hasattr(params, 'urlencode'):
             params = params.urlencode()
         else:
             params = urlencode(params)
         url += '?' + params
     return url
 def get_link_url(self, link):
     url = link.get_base_url()
     params = self.get('extra_get_params', None) or QueryDict('',
                                                              mutable=True)
     if params:
         params = copy(params)
         if '?' in url:
             url, get_string = url.split('?', 1)
             url_args = QueryDict(get_string)
             if hasattr(params, 'setlist'):
                 for key, value in url_args.iterlists():
                     params.setlist(key, value)
             else:
                 params.update(url_args)
         if hasattr(params, 'urlencode'):
             params = params.urlencode()
         else:
             params = urlencode(params)
         url += '?' + params
     return url
Beispiel #7
0
    def put(self, request, id):
        """ edit a checklist item """
        try:
            checklist_item = CheckListItem.objects.get(pk=id)
        except Exception:
            return HttpResponseNotFound()

        query_dict = QueryDict(request.body)
        put_params = dict(query_dict.iterlists())

        item = put_params.get('item')
        position = put_params.get('position')
        is_checked = put_params.get('is_checked')
        if item:
            checklist_item.item = item[0]
        if position:
            checklist_item.position = position[0]
        if is_checked is not None:
            checklist_item.is_checked = is_checked[0] == 'true'

        checklist_item.save()
        return JsonResponse({'success': True})
Beispiel #8
0
    def create_channel_params(self, url_match, channel_item, wsgi_environ, raw_request, post_data=None):
        """ Collects parameters specific to this channel (HTTP) and updates wsgi_environ
        with HTTP-specific data.
        """
        path_params = url_match.named

        qs = wsgi_environ.get('QUERY_STRING')
        qs = QueryDict(qs, encoding='utf-8')

        # Whoever called us has already parsed POST for us so we just use it as is
        if post_data:
            post = post_data
        else:
            if channel_item.data_format == DATA_FORMAT.POST:
                post = QueryDict(raw_request, encoding='utf-8')
            else:
                post = QueryDict(None, encoding='utf-8')

        _qs = {}
        for key, value in qs.iterlists():
            if len(value) > 1:
                _qs[key] = value
            else:
                _qs[key] = value[0]

        wsgi_environ['zato.http.GET'] = _qs
        wsgi_environ['zato.http.POST'] = post

        if channel_item.url_params_pri == URL_PARAMS_PRIORITY.QS_OVER_PATH:
            path_params.update((key, value) for key, value in _qs.items())
            channel_params = path_params
        else:
            channel_params = dict((key, value) for key, value in _qs.items())
            channel_params.update(path_params)

        logger.debug('channel_params `%s`, path_params `%s`, _qs `%s`', channel_params, path_params, _qs)

        return channel_params