summaryrefslogtreecommitdiffstats
path: root/pym/portage/util/_ShelveUnicodeWrapper.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2013-01-09 06:38:16 -0800
committerZac Medico <zmedico@gentoo.org>2013-01-09 09:09:44 -0800
commit12c795d81251b03f3d33d02696dc8db1299dee78 (patch)
tree9e3a3983bb2fb65064f5b1a056ac4c36280a9e5d /pym/portage/util/_ShelveUnicodeWrapper.py
parent97e8df7eaa171d68da6b3e111c419e2a16dfaf4c (diff)
downloadportage-12c795d81251b03f3d33d02696dc8db1299dee78.tar.gz
portage-12c795d81251b03f3d33d02696dc8db1299dee78.tar.bz2
portage-12c795d81251b03f3d33d02696dc8db1299dee78.zip
Add emirrordist, a tool for mirroring distfiles.
Special thanks to Brian Harring, author of the mirror-dist program from which emirrordist is derived.
Diffstat (limited to 'pym/portage/util/_ShelveUnicodeWrapper.py')
-rw-r--r--pym/portage/util/_ShelveUnicodeWrapper.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/pym/portage/util/_ShelveUnicodeWrapper.py b/pym/portage/util/_ShelveUnicodeWrapper.py
new file mode 100644
index 000000000..adbd5199f
--- /dev/null
+++ b/pym/portage/util/_ShelveUnicodeWrapper.py
@@ -0,0 +1,45 @@
+# Copyright 2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+class ShelveUnicodeWrapper(object):
+ """
+ Convert unicode to str and back again, since python-2.x shelve
+ module doesn't support unicode.
+ """
+ def __init__(self, shelve_instance):
+ self._shelve = shelve_instance
+
+ def _encode(self, s):
+ if isinstance(s, unicode):
+ s = s.encode('utf_8')
+ return s
+
+ def __len__(self):
+ return len(self._shelve)
+
+ def __contains__(self, k):
+ return self._encode(k) in self._shelve
+
+ def __iter__(self):
+ return self._shelve.__iter__()
+
+ def items(self):
+ return self._shelve.iteritems()
+
+ def __setitem__(self, k, v):
+ self._shelve[self._encode(k)] = self._encode(v)
+
+ def __getitem__(self, k):
+ return self._shelve[self._encode(k)]
+
+ def __delitem__(self, k):
+ del self._shelve[self._encode(k)]
+
+ def get(self, k, *args):
+ return self._shelve.get(self._encode(k), *args)
+
+ def close(self):
+ self._shelve.close()
+
+ def clear(self):
+ self._shelve.clear()