[yum-commits] Branch 'multi-downloader' - urlgrabber/grabber.py

zpavlas at osuosl.org zpavlas at osuosl.org
Wed Feb 29 16:54:50 UTC 2012


 urlgrabber/grabber.py |   14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

New commits:
commit e19511392fc8c23b6f9678cc388b66d0267f4ffb
Author: Zdeněk Pavlas <zpavlas at redhat.com>
Date:   Wed Feb 29 17:54:03 2012 +0100

    Add 'dict' support to serializer.

diff --git a/urlgrabber/grabber.py b/urlgrabber/grabber.py
index d5ce06b..aec0ad0 100644
--- a/urlgrabber/grabber.py
+++ b/urlgrabber/grabber.py
@@ -1879,7 +1879,7 @@ def retrygrab(url, filename=None, copy_local=0, close_connection=0,
 #####################################################################
 
 _quoter_map = {}
-for c in '%[(,)] \n':
+for c in '%{[(,:)]} \n':
     _quoter_map[c] = '%%%02x' % ord(c)
 del c
 
@@ -1898,6 +1898,10 @@ def _dumps(v):
         return "(%s)" % ','.join(map(_dumps, v))
     if type(v) == list:
         return "[%s]" % ','.join(map(_dumps, v))
+    if type(v) == dict:
+        def keyval(k):
+            return '%s:%s' % (_dumps(k), _dumps(v[k]))
+        return "{%s}" % ','.join(map(keyval, sorted(v)))
     raise TypeError, 'Can\'t serialize %s' % v
 
 def _loads(s):
@@ -1923,17 +1927,19 @@ def _loads(s):
     l = []
     i = j = 0
     while True:
-        if j == len(s) or s[j] in ',)]':
+        if j == len(s) or s[j] in ',:)]}':
             if j > i:
                 l.append(decode(s[i:j]))
             if j == len(s): break
-            if s[j] in ')]':
+            if s[j] in ')]}':
                 if s[j] == ')':
                     l = tuple(l)
+                elif s[j] == '}':
+                    l = dict(zip(l[::2], l[1::2]))
                 stk[0].append(l)
                 l, stk = stk
             i = j = j + 1
-        elif s[j] in '[(':
+        elif s[j] in '{[(':
             stk = l, stk
             l = []
             i = j = j + 1


More information about the Yum-commits mailing list