示例#1
0
文件: wsgi.py 项目: jek/alfajor
 def _prep_input(self, method, data, content_type):
     """Return encoded and packed POST data."""
     if data is None or method != 'POST':
         prepped = {
             'input_stream': None,
             'content_length': None,
             'content_type': None,
             }
         if method == 'GET' and data:
             qs = MultiDict()
             for key, value in to_pairs(data):
                 qs.setlistdefault(key).append(value)
             prepped['query_string'] = url_encode(qs)
         return prepped
     else:
         if content_type == 'multipart/form-data':
             data = [(k, _wrap_file(*v)) if isinstance(v, tuple) else (k,v)
                     for k,v in data]
             boundary, payload = encode_multipart(MultiDict(to_pairs(data)))
             content_type = 'multipart/form-data; boundary=' + boundary
         else:
             payload = url_encode(MultiDict(to_pairs(data)))
             content_type = 'application/x-www-form-urlencoded'
         return {
             'input_stream': StringIO(payload),
             'content_length': len(payload),
             'content_type': content_type
             }
示例#2
0
    def __init__(self, browser, mixins):
        lxml_html.HtmlElementClassLookup.__init__(self)
        mixins = list(to_pairs(mixins))

        mix_all = tuple(cls for name, cls in mixins if name == '*')

        for name in ('HtmlElement', 'HtmlComment', 'HtmlProcessingInstruction',
                     'HtmlEntity'):
            base = getattr(lxml_html, name)
            mixed = type(name, mix_all + base.__bases__, {'browser': browser})
            setattr(self, name, mixed)

        classes = self._element_classes
        mixers = {}
        for name, value in mixins:
            if name == '*':
                continue
            mixers.setdefault(name, []).append(value)

        for name, value in mixins:
            if name != '*':
                continue
            for n in classes.keys():
                mixers.setdefault(n, []).append(value)

        for name, mix_bases in mixers.items():
            cur = classes.get(name, self.HtmlElement)
            bases = tuple(mix_bases + [cur])
            classes[name] = type(cur.__name__, bases, {'browser': browser})
        self._element_classes = classes
示例#3
0
文件: _lxml.py 项目: jek/alfajor
    def __init__(self, browser, mixins):
        lxml_html.HtmlElementClassLookup.__init__(self)
        mixins = list(to_pairs(mixins))

        mix_all = tuple(cls for name, cls in mixins if name == '*')

        for name in ('HtmlElement', 'HtmlComment', 'HtmlProcessingInstruction',
                     'HtmlEntity'):
            base = getattr(lxml_html, name)
            mixed = type(name,  mix_all + base.__bases__, {'browser': browser})
            setattr(self, name, mixed)

        classes = self._element_classes
        mixers = {}
        for name, value in mixins:
            if name == '*':
                continue
            mixers.setdefault(name, []).append(value)

        for name, value in mixins:
            if name != '*':
                continue
            for n in classes.keys():
                mixers.setdefault(n, []).append(value)

        for name, mix_bases in mixers.items():
            cur = classes.get(name, self.HtmlElement)
            bases = tuple(mix_bases + [cur])
            classes[name] = type(cur.__name__, bases, {'browser': browser})
        self._element_classes = classes
示例#4
0
 def _prep_input(self, method, data, content_type):
     """Return encoded and packed POST data."""
     if data is None or method != 'POST':
         prepped = {
             'input_stream': None,
             'content_length': None,
             'content_type': None,
             }
         if method == 'GET' and data:
             qs = MultiDict()
             for key, value in to_pairs(data):
                 qs.setlistdefault(key).append(value)
             prepped['query_string'] = url_encode(qs)
         return prepped
     else:
         payload = url_encode(MultiDict(to_pairs(data)))
         content_type = 'application/x-www-form-urlencoded'
         return {
             'input_stream': StringIO(payload),
             'content_length': len(payload),
             'content_type': content_type
             }
示例#5
0
 def _prep_input(self, method, data, content_type):
     """Return encoded and packed POST data."""
     if data is None or method != 'POST':
         prepped = {
             'input_stream': None,
             'content_length': None,
             'content_type': None,
         }
         if method == 'GET' and data:
             qs = MultiDict()
             for key, value in to_pairs(data):
                 qs.setlistdefault(key).append(value)
             prepped['query_string'] = url_encode(qs)
         return prepped
     else:
         payload = url_encode(MultiDict(to_pairs(data)))
         content_type = 'application/x-www-form-urlencoded'
         return {
             'input_stream': StringIO(payload),
             'content_length': len(payload),
             'content_type': content_type
         }
示例#6
0
def _group_key_value_pairs(values, with_prefix=''):
    """Transform *values* into a sequence of ('name', ['values']) pairs.

    For use by form.fill().  Collapses repeats of a given name into a single
    list of values.  (And non-repeated names as a list of one value.)

    :param values: a mapping or sequence of name/value pairs.

    :param with_prefix: optional, a string that all form fields should
      start with.  If a supplied field name does not start with this
      prefix, it will be prepended.

    """
    grouped = defaultdict(list)
    transformed_keys = []
    for key, value in to_pairs(values):
        if with_prefix and not key.startswith(with_prefix):
            key = with_prefix + key
        grouped[key].append(value)
        if key not in transformed_keys:
            transformed_keys.append(key)
    return [(key, grouped[key]) for key in transformed_keys]
示例#7
0
文件: _lxml.py 项目: jek/alfajor
def _group_key_value_pairs(values, with_prefix=''):
    """Transform *values* into a sequence of ('name', ['values']) pairs.

    For use by form.fill().  Collapses repeats of a given name into a single
    list of values.  (And non-repeated names as a list of one value.)

    :param values: a mapping or sequence of name/value pairs.

    :param with_prefix: optional, a string that all form fields should
      start with.  If a supplied field name does not start with this
      prefix, it will be prepended.

    """
    grouped = defaultdict(list)
    transformed_keys = []
    for key, value in to_pairs(values):
        if with_prefix and not key.startswith(with_prefix):
            key = with_prefix + key
        grouped[key].append(value)
        if key not in transformed_keys:
            transformed_keys.append(key)
    return [(key, grouped[key]) for key in transformed_keys]