def test_dict(): d = MultiDict({'a': 1}) assert d.items() == [('a', 1)] d['b'] = 2 d['c'] = 3 assert d.items() == [('a', 1), ('b', 2), ('c', 3)] d['b'] = 4 assert d.items() == [('a', 1), ('c', 3), ('b', 4)] d.add('b', 5) raises(KeyError, 'd.getone("b")') assert d.getall('b') == [4, 5] assert d.items() == [('a', 1), ('c', 3), ('b', 4), ('b', 5)] del d['b'] assert d.items() == [('a', 1), ('c', 3)] assert d.pop('xxx', 5) == 5 assert d.getone('a') == 1 assert d.popitem() == ('c', 3) assert d.items() == [('a', 1)] item = [] assert d.setdefault('z', item) is item assert d.items() == [('a', 1), ('z', item)] assert d.setdefault('y', 6) == 6 assert d.mixed() == {'a': 1, 'y': 6, 'z': item} assert d.dict_of_lists() == {'a': [1], 'y': [6], 'z': [item]} assert 'a' in d dcopy = d.copy() assert dcopy is not d assert dcopy == d d['x'] = 'x test' assert dcopy != d d[(1, None)] = (None, 1) assert d.items() == [('a', 1), ('z', []), ('y', 6), ('x', 'x test'), ((1, None), (None, 1))]
def test_dict(): d = MultiDict({'a': 1}) assert list(d.items()) == [('a', 1)] d['b'] = 2 d['c'] = 3 assert list(d.items()) == [('a', 1), ('b', 2), ('c', 3)] d['b'] = 4 assert list(d.items()) == [('a', 1), ('c', 3), ('b', 4)] d.add('b', 5) assert_raises(KeyError, d.getone, "b") assert d.getall('b') == [4, 5] assert list(d.items()) == [('a', 1), ('c', 3), ('b', 4), ('b', 5)] del d['b'] assert list(d.items()) == [('a', 1), ('c', 3)] assert d.pop('xxx', 5) == 5 assert d.getone('a') == 1 assert d.popitem() == ('c', 3) assert list(d.items()) == [('a', 1)] item = [] assert d.setdefault('z', item) is item assert list(d.items()) == [('a', 1), ('z', item)] assert d.setdefault('y', 6) == 6 assert d.mixed() == {'a': 1, 'y': 6, 'z': item} assert d.dict_of_lists() == {'a': [1], 'y': [6], 'z': [item]} assert 'a' in d dcopy = d.copy() assert dcopy is not d assert dcopy == d d['x'] = 'x test' assert dcopy != d d[(1, None)] = (None, 1) assert list(d.items()) == [('a', 1), ('z', []), ('y', 6), ('x', 'x test'), ((1, None), (None, 1))]
def frontpage_featured_orgs(self, path=None, data=None, errors=None, error_summary=None): msg = '' if p.toolkit.request.method == 'POST' and not data: data = MultiDict(p.toolkit.request.POST) data = data.getall('featured_orgs') if len(data) < 1: msg = 'At least one featured org must be selected' h.flash_error(msg, allow_html=False) else: forgs = '' for i in range(len(data)): data[i] = data[i].encode('utf-8') forgs += data[i] if i < len(data) - 1: forgs += ' ' try: junk = p.toolkit.get_action('config_option_update')( { 'user': c.user }, { 'ckan.featured_orgs': forgs }) except p.toolkit.ValidationError, e: errors = e.error_dict error_summary = e.error_summary return self.frontpage_featured_orgs( '', data, errors, error_summary) p.toolkit.redirect_to('/frontpage')
class MimeHeaders(object): """Dictionary-like object that preserves the order and supports multiple values for the same key, knows whether it has been changed after the creation """ def __init__(self, items=()): self._v = MultiDict([(normalize(key), remove_newlines(val)) for (key, val) in items]) self.changed = False def __getitem__(self, key): return self._v.get(normalize(key), None) def __len__(self): return len(self._v) def __iter__(self): return iter(self._v) def __contains__(self, key): return normalize(key) in self._v def __setitem__(self, key, value): self._v[normalize(key)] = remove_newlines(value) self.changed = True def __delitem__(self, key): del self._v[normalize(key)] self.changed = True def __nonzero__(self): return len(self._v) > 0 def prepend(self, key, value): self._v._items.insert(0, (normalize(key), remove_newlines(value))) self.changed = True def add(self, key, value): """Adds header without changing the existing headers with same name""" self._v.add(normalize(key), remove_newlines(value)) self.changed = True def keys(self): """ Returns the keys. (message header names) It remembers the order in which they were added, what is really important """ return self._v.keys() def transform(self, fn): """Accepts a function, getting a key, val and returning a new pair of key, val and applies the function to all header, value pairs in the message. """ changed = [False] def tracking_fn(key, val): new_key, new_val = fn(key, val) if new_val != val or new_key != key: changed[0] = True return new_key, new_val v = MultiDict(tracking_fn(key, val) for key, val in self._v.iteritems()) if changed[0]: self._v = v self.changed = True def items(self): """ Returns header,val pairs in the preserved order. """ return list(self.iteritems()) def iteritems(self): """ Returns iterator header,val pairs in the preserved order. """ return self._v.iteritems() def get(self, key, default=None): """ Returns header value (case-insensitive). """ return self._v.get(normalize(key), default) def getall(self, key): """ Returns all header values by the given header name (case-insensitive) """ return self._v.getall(normalize(key)) def have_changed(self): """Tells whether someone has altered the headers after creation""" return self.changed def __str__(self): return str(self._v) @classmethod def from_stream(cls, stream): """Takes a stream and reads the headers, decodes headers to unicode dict like object""" return cls(parse_stream(stream)) def to_stream(self, stream): """Takes a stream and serializes headers in a mime format""" for h, v in self._v.iteritems(): try: h = h.encode('ascii') except UnicodeDecodeError: raise EncodingError("Non-ascii header name") stream.write("{0}: {1}\r\n".format(h, to_mime(h, v)))
xmlfile.write("<?xml version=\"1.0\"?>\n") xmlfile.write("<entry xmlns=\"http://www.w3.org/2005/Atom\"\n") xmlfile.write(" xmlns:dcterms=\"http://purl.org/dc/terms/\">\n") xmlfile.write(" <dcterms:source>%s</dcterms:source>\n" % inturl) for thiskey in d: dckey = '' if thiskey in lexicon: dckey = lexicon[thiskey] if not dckey: dckey = 'dcterms:subject' if thiskey not in shown: mapfile.write("%s\t\n" % thiskey) try: if d.getall(thiskey)[1]: for ix in range(0,len(d.getall(thiskey))): value = d.getall(thiskey)[ix] if dckey: value = cleaner(value) if value: xmlfile.write(" <%s>%s</%s>\n" % (dckey, value, dckey)) except: if dckey: if d.getall(thiskey)[0]: value = cleaner(str(d.getall(thiskey)[0])) if value: xmlfile.write(" <%s>%s</%s>\n" % (dckey, value, dckey)) shown[thiskey] = 'yes' xmlfile.write("</entry>")
class MimeHeaders(object): """Dictionary-like object that preserves the order and supports multiple values for the same key, knows whether it has been changed after the creation """ def __init__(self, items=()): self.v = MultiDict([(normalize(key), val) for (key, val) in items]) self.changed = False def __getitem__(self, key): return self.v.get(normalize(key), None) def __len__(self): return len(self.v) def __iter__(self): return iter(self.v) def __contains__(self, key): return normalize(key) in self.v def __setitem__(self, key, value): self.v[normalize(key)] = _remove_newlines(value) self.changed = True def __delitem__(self, key): del self.v[normalize(key)] self.changed = True def __nonzero__(self): return len(self.v) > 0 def prepend(self, key, val): self.v._items.insert(0, (key, _remove_newlines(val))) self.changed = True def add(self, key, value): """Adds header without changing the existing headers with same name""" self.v.add(normalize(key), _remove_newlines(value)) self.changed = True def keys(self): """ Returns the keys. (message header names) It remembers the order in which they were added, what is really important """ return self.v.keys() def transform(self, fn): """Accepts a function, getting a key, val and returning a new pair of key, val and applies the function to all header, value pairs in the message. """ changed = [False] def tracking_fn(key, val): new_key, new_val = fn(key, val) if new_val != val or new_key != key: changed[0] = True return new_key, new_val v = MultiDict(tracking_fn(key, val) for key, val in self.v.iteritems()) if changed[0]: self.v = v self.changed = True def items(self): """ Returns header,val pairs in the preserved order. """ return list(self.iteritems()) def iteritems(self): """ Returns iterator header,val pairs in the preserved order. """ return self.v.iteritems() def get(self, key, default=None): """ Returns header value (case-insensitive). """ return self.v.get(normalize(key), default) def getall(self, key): """ Returns all header values by the given header name (case-insensitive) """ return self.v.getall(normalize(key)) def have_changed(self): """Tells whether someone has altered the headers after creation""" return self.changed def __str__(self): return str(self.v) @classmethod def from_stream(cls, stream): """Takes a stream and reads the headers, decodes headers to unicode dict like object""" return cls(parse_stream(stream)) def to_stream(self, stream): """Takes a stream and serializes headers in a mime format""" for h, v in self.v.iteritems(): try: h = h.encode('ascii') except UnicodeDecodeError: raise EncodingError("Non-ascii header name") stream.write("{0}: {1}\r\n".format(h, to_mime(h, v)))