1 |
Author: zmedico |
2 |
Date: 2009-08-04 23:07:57 +0000 (Tue, 04 Aug 2009) |
3 |
New Revision: 13911 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/portage/dbapi/bintree.py |
7 |
Log: |
8 |
Fix bindbapi.aux_get and aux_update to work with py3k/unicode. |
9 |
|
10 |
|
11 |
Modified: main/trunk/pym/portage/dbapi/bintree.py |
12 |
=================================================================== |
13 |
--- main/trunk/pym/portage/dbapi/bintree.py 2009-08-04 22:45:47 UTC (rev 13910) |
14 |
+++ main/trunk/pym/portage/dbapi/bintree.py 2009-08-04 23:07:57 UTC (rev 13911) |
15 |
@@ -24,6 +24,7 @@ |
16 |
import codecs |
17 |
import os, errno, stat |
18 |
import re |
19 |
+import sys |
20 |
from itertools import chain, izip |
21 |
|
22 |
class bindbapi(fakedbapi): |
23 |
@@ -66,7 +67,12 @@ |
24 |
tbz2_path = self.bintree.getname(mycpv) |
25 |
if not os.path.exists(tbz2_path): |
26 |
raise KeyError(mycpv) |
27 |
- getitem = portage.xpak.tbz2(tbz2_path).getfile |
28 |
+ tbz2 = portage.xpak.tbz2(tbz2_path) |
29 |
+ def getitem(k): |
30 |
+ v = tbz2.getfile(k) |
31 |
+ if v is not None and not isinstance(v, unicode): |
32 |
+ v = unicode(v, encoding='utf_8', errors='replace') |
33 |
+ return v |
34 |
else: |
35 |
getitem = self.bintree._remotepkgs[mycpv].get |
36 |
mydata = {} |
37 |
@@ -79,15 +85,16 @@ |
38 |
# or the tbz2 is corrupt. |
39 |
if myval: |
40 |
mydata[x] = " ".join(myval.split()) |
41 |
- if "EAPI" in mykeys: |
42 |
- if not mydata.setdefault("EAPI", "0"): |
43 |
- mydata["EAPI"] = "0" |
44 |
+ |
45 |
+ if not mydata.setdefault('EAPI', u'0'): |
46 |
+ mydata['EAPI'] = u'0' |
47 |
+ |
48 |
if cache_me: |
49 |
aux_cache = self._aux_cache_slot_dict() |
50 |
for x in self._aux_cache_keys: |
51 |
- aux_cache[x] = mydata.get(x, "") |
52 |
+ aux_cache[x] = mydata.get(x, u'') |
53 |
self._aux_cache[mycpv] = aux_cache |
54 |
- return [mydata.get(x, "") for x in wants] |
55 |
+ return [mydata.get(x, u'') for x in wants] |
56 |
|
57 |
def aux_update(self, cpv, values): |
58 |
if not self.bintree.populated: |
59 |
@@ -97,7 +104,23 @@ |
60 |
raise KeyError(cpv) |
61 |
mytbz2 = portage.xpak.tbz2(tbz2path) |
62 |
mydata = mytbz2.get_data() |
63 |
- mydata.update(values) |
64 |
+ |
65 |
+ if sys.hexversion < 0x3000000: |
66 |
+ for k, v in values.iteritems(): |
67 |
+ if isinstance(k, unicode): |
68 |
+ k = k.encode('utf_8', 'replace') |
69 |
+ if isinstance(v, unicode): |
70 |
+ v = v.encode('utf_8', 'replace') |
71 |
+ mydata[k] = v |
72 |
+ |
73 |
+ else: |
74 |
+ for k, v in values.iteritems(): |
75 |
+ if isinstance(k, str): |
76 |
+ k = k.encode('utf_8', 'replace') |
77 |
+ if isinstance(v, str): |
78 |
+ v = v.encode('utf_8', 'replace') |
79 |
+ mydata[k] = v |
80 |
+ |
81 |
for k, v in mydata.items(): |
82 |
if not v: |
83 |
del mydata[k] |