aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/odict.py
diff options
context:
space:
mode:
Diffstat (limited to 'netlib/odict.py')
-rw-r--r--netlib/odict.py35
1 files changed, 27 insertions, 8 deletions
diff --git a/netlib/odict.py b/netlib/odict.py
index 7a2f611b..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):
@@ -84,7 +94,7 @@ class ODict(object):
return False
def add(self, key, value):
- self.lst.append([key, str(value)])
+ self.lst.append([key, value])
def get(self, k, d=None):
if k in self:
@@ -108,10 +118,19 @@ class ODict(object):
lst = copy.deepcopy(self.lst)
return self.__class__(lst)
+ def extend(self, other):
+ """
+ Add the contents of other, preserving any duplicates.
+ """
+ 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] + ": " + itm[1])
+ elements.append(itm[0] + ": " + str(itm[1]))
elements.append("")
return "\r\n".join(elements)