diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2015-04-15 10:28:17 +1200 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2015-04-15 10:28:17 +1200 |
commit | 0c85c72dc43d0d017e2bf5af9c2def46968d0499 (patch) | |
tree | ab361a7c2972e666f9e565c02bc83a9348bec7aa /netlib/odict.py | |
parent | aeebf31927eb3ff74824525005c7b146024de6d5 (diff) | |
download | mitmproxy-0c85c72dc43d0d017e2bf5af9c2def46968d0499.tar.gz mitmproxy-0c85c72dc43d0d017e2bf5af9c2def46968d0499.tar.bz2 mitmproxy-0c85c72dc43d0d017e2bf5af9c2def46968d0499.zip |
ODict improvements
- Setting values now tries to preserve the existing order, rather than
just appending to the end.
- __repr__ now returns a repr of the tuple list. The old repr becomes a
.format() method. This is clearer, makes troubleshooting easier, and
doesn't assume all data in ODicts are header-like
Diffstat (limited to 'netlib/odict.py')
-rw-r--r-- | netlib/odict.py | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/netlib/odict.py b/netlib/odict.py index a0ea9e53..dd738c55 100644 --- a/netlib/odict.py +++ b/netlib/odict.py @@ -13,7 +13,8 @@ def safe_subn(pattern, repl, target, *args, **kwargs): class ODict(object): """ - A dictionary-like object for managing ordered (key, value) data. + A dictionary-like object for managing ordered (key, value) data. Think + about it as a convenient interface to a list of (key, value) tuples. """ def __init__(self, lst=None): self.lst = lst or [] @@ -64,11 +65,20 @@ class ODict(object): key, they are cleared. """ if isinstance(valuelist, basestring): - raise ValueError("Expected list of values instead of string. Example: odict['Host'] = ['www.example.com']") - - new = self._filter_lst(k, self.lst) - for i in valuelist: - new.append([k, i]) + raise ValueError( + "Expected list of values instead of string. " + "Example: odict['Host'] = ['www.example.com']" + ) + kc = self._kconv(k) + new = [] + for i in self.lst: + if self._kconv(i[0]) == kc: + if valuelist: + new.append([k, valuelist.pop(0)]) + else: + new.append(i) + while valuelist: + new.append([k, valuelist.pop(0)]) self.lst = new def __delitem__(self, k): @@ -115,6 +125,9 @@ class ODict(object): self.lst.extend(other.lst) def __repr__(self): + return repr(self.lst) + + def format(self): elements = [] for itm in self.lst: elements.append(itm[0] + ": " + str(itm[1])) |