Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r10776 - in main/trunk/pym: _emerge portage
Date: Wed, 25 Jun 2008 06:38:22
Message-Id: E1KBOe0-0003WO-Rs@stork.gentoo.org
1 Author: zmedico
2 Date: 2008-06-25 06:38:15 +0000 (Wed, 25 Jun 2008)
3 New Revision: 10776
4
5 Modified:
6 main/trunk/pym/_emerge/__init__.py
7 main/trunk/pym/portage/__init__.py
8 Log:
9 For the Package.metadata attribute, only implement the dict interface
10 instead of actually inheriting from dict. This slightly decreases the
11 memory footprint by defining __slots__ and storing items as object
12 attributes.
13
14
15 Modified: main/trunk/pym/_emerge/__init__.py
16 ===================================================================
17 --- main/trunk/pym/_emerge/__init__.py 2008-06-25 04:24:31 UTC (rev 10775)
18 +++ main/trunk/pym/_emerge/__init__.py 2008-06-25 06:38:15 UTC (rev 10776)
19 @@ -1285,7 +1285,7 @@
20 def __init__(self, **kwargs):
21 Task.__init__(self, **kwargs)
22 self.root = self.root_config.root
23 - self.metadata = self._metadata_wrapper(self, self.metadata)
24 + self.metadata = _PackageMetadataWrapper(self, self.metadata)
25 self.cp = portage.cpv_getkey(self.cpv)
26 self.slot_atom = portage.dep.Atom("%s:%s" % (self.cp, self.slot))
27 self.category, self.pf = portage.catsplit(self.cpv)
28 @@ -1332,60 +1332,6 @@
29 chain((re.escape(x) for x in all), iuse_implicit)))
30 return object.__getattribute__(self, name)
31
32 - class _metadata_wrapper(dict):
33 - """
34 - Detect metadata updates and synchronize Package attributes.
35 - """
36 - _wrapped_keys = frozenset(
37 - ["COUNTER", "INHERITED", "IUSE", "SLOT", "USE", "_mtime_"])
38 -
39 - def __init__(self, pkg, metadata):
40 - dict.__init__(self)
41 - self._pkg = pkg
42 - i = getattr(metadata, "iteritems", None)
43 - if i is None:
44 - i = metadata
45 - else:
46 - i = i()
47 - for k, v in i:
48 - self[k] = v
49 -
50 - def __setitem__(self, k, v):
51 - dict.__setitem__(self, k, v)
52 - if k in self._wrapped_keys:
53 - getattr(self, "_set_" + k.lower())(k, v)
54 -
55 - def _set_inherited(self, k, v):
56 - if isinstance(v, basestring):
57 - v = frozenset(v.split())
58 - self._pkg.inherited = v
59 -
60 - def _set_iuse(self, k, v):
61 - self._pkg.iuse = self._pkg._iuse(
62 - v.split(), self._pkg.root_config.iuse_implicit)
63 -
64 - def _set_slot(self, k, v):
65 - self._pkg.slot = v
66 -
67 - def _set_use(self, k, v):
68 - self._pkg.use = self._pkg._use(v.split())
69 -
70 - def _set_counter(self, k, v):
71 - if isinstance(v, basestring):
72 - try:
73 - v = int(v.strip())
74 - except ValueError:
75 - v = 0
76 - self._pkg.counter = v
77 -
78 - def _set__mtime_(self, k, v):
79 - if isinstance(v, basestring):
80 - try:
81 - v = float(v.strip())
82 - except ValueError:
83 - v = 0
84 - self._pkg.mtime = v
85 -
86 def _get_hash_key(self):
87 hash_key = getattr(self, "_hash_key", None)
88 if hash_key is None:
89 @@ -1425,6 +1371,112 @@
90 return True
91 return False
92
93 +class _PackageMetadataWrapper(object):
94 + """
95 + Detect metadata updates and synchronize Package attributes.
96 + """
97 + _keys = Package.metadata_keys
98 + __slots__ = ("__weakref__", "_pkg") + tuple("_val_" + k for k in _keys)
99 + _wrapped_keys = frozenset(
100 + ["COUNTER", "INHERITED", "IUSE", "SLOT", "USE", "_mtime_"])
101 +
102 + def __init__(self, pkg, metadata):
103 + self._pkg = pkg
104 + self.update(metadata)
105 +
106 + def __iter__(self):
107 + for k, v in self.iteritems():
108 + yield k
109 +
110 + def __len__(self):
111 + l = 0
112 + for i in self.iteritems():
113 + l += 1
114 + return l
115 +
116 + def keys(self):
117 + return list(self)
118 +
119 + def iteritems(self):
120 + for k in self._keys:
121 + try:
122 + yield (k, getattr(self, "_val_" + k))
123 + except AttributeError:
124 + pass
125 +
126 + def items(self):
127 + return list(self.iteritems())
128 +
129 + def itervalues(self):
130 + for k, v in self.itervalues():
131 + yield v
132 +
133 + def values(self):
134 + return list(self.itervalues())
135 +
136 + def __delitem__(self, k):
137 + try:
138 + delattr(self, "_val_" + k)
139 + except AttributeError:
140 + raise KeyError(k)
141 +
142 + def __setitem__(self, k, v):
143 + setattr(self, "_val_" + k, v)
144 + if k in self._wrapped_keys:
145 + getattr(self, "_set_" + k.lower())(k, v)
146 +
147 + def update(self, d):
148 + i = getattr(d, "iteritems", None)
149 + if i is None:
150 + i = d
151 + else:
152 + i = i()
153 + for k, v in i:
154 + self[k] = v
155 +
156 + def __getitem__(self, k):
157 + try:
158 + return getattr(self, "_val_" + k)
159 + except AttributeError:
160 + raise KeyError(k)
161 +
162 + def get(self, key, default=None):
163 + try:
164 + return self[key]
165 + except KeyError:
166 + return default
167 +
168 + def _set_inherited(self, k, v):
169 + if isinstance(v, basestring):
170 + v = frozenset(v.split())
171 + self._pkg.inherited = v
172 +
173 + def _set_iuse(self, k, v):
174 + self._pkg.iuse = self._pkg._iuse(
175 + v.split(), self._pkg.root_config.iuse_implicit)
176 +
177 + def _set_slot(self, k, v):
178 + self._pkg.slot = v
179 +
180 + def _set_use(self, k, v):
181 + self._pkg.use = self._pkg._use(v.split())
182 +
183 + def _set_counter(self, k, v):
184 + if isinstance(v, basestring):
185 + try:
186 + v = int(v.strip())
187 + except ValueError:
188 + v = 0
189 + self._pkg.counter = v
190 +
191 + def _set__mtime_(self, k, v):
192 + if isinstance(v, basestring):
193 + try:
194 + v = float(v.strip())
195 + except ValueError:
196 + v = 0
197 + self._pkg.mtime = v
198 +
199 class DependencyArg(object):
200 def __init__(self, arg=None, root_config=None):
201 self.arg = arg
202
203 Modified: main/trunk/pym/portage/__init__.py
204 ===================================================================
205 --- main/trunk/pym/portage/__init__.py 2008-06-25 04:24:31 UTC (rev 10775)
206 +++ main/trunk/pym/portage/__init__.py 2008-06-25 06:38:15 UTC (rev 10776)
207 @@ -1940,7 +1940,7 @@
208 pkginternaluse = ""
209 iuse = ""
210 if mydb:
211 - if isinstance(mydb, dict):
212 + if not hasattr(mydb, "aux_get"):
213 slot = mydb["SLOT"]
214 iuse = mydb["IUSE"]
215 else:
216 @@ -2414,7 +2414,7 @@
217 if len(self.virtuals) == 0:
218 self.getvirtuals()
219 # Grab the virtuals this package provides and add them into the tree virtuals.
220 - if isinstance(mydbapi, dict):
221 + if not hasattr(mydbapi, "aux_get"):
222 provides = mydbapi["PROVIDE"]
223 else:
224 provides = mydbapi.aux_get(mycpv, ["PROVIDE"])[0]
225 @@ -2423,7 +2423,7 @@
226 if isinstance(mydbapi, portdbapi):
227 self.setcpv(mycpv, mydb=mydbapi)
228 myuse = self["PORTAGE_USE"]
229 - elif isinstance(mydbapi, dict):
230 + elif not hasattr(mydbapi, "aux_get"):
231 myuse = mydbapi["USE"]
232 else:
233 myuse = mydbapi.aux_get(mycpv, ["USE"])[0]
234
235 --
236 gentoo-commits@l.g.o mailing list