1 |
Author: zmedico |
2 |
Date: 2008-07-01 10:11:10 +0000 (Tue, 01 Jul 2008) |
3 |
New Revision: 10869 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/__init__.py |
7 |
main/trunk/pym/portage/cache/mappings.py |
8 |
Log: |
9 |
Add a "prefix" keyword parameter to slot_dict_class() which controls the |
10 |
prefix used when mapping attribute names from keys. Use this to change |
11 |
the syntax from files["foo"] to files.foo (it's fewer characters to look |
12 |
at). |
13 |
|
14 |
|
15 |
Modified: main/trunk/pym/_emerge/__init__.py |
16 |
=================================================================== |
17 |
--- main/trunk/pym/_emerge/__init__.py 2008-07-01 09:47:32 UTC (rev 10868) |
18 |
+++ main/trunk/pym/_emerge/__init__.py 2008-07-01 10:11:10 UTC (rev 10869) |
19 |
@@ -1459,7 +1459,7 @@ |
20 |
"pid", "returncode", "files") |
21 |
|
22 |
_file_names = ("fetcher", "out") |
23 |
- _files_dict = slot_dict_class(_file_names) |
24 |
+ _files_dict = slot_dict_class(_file_names, prefix="") |
25 |
_bufsize = 4096 |
26 |
|
27 |
def start(self): |
28 |
@@ -1477,7 +1477,7 @@ |
29 |
files = self.files |
30 |
|
31 |
if log_file is not None: |
32 |
- files["out"] = open(log_file, "a") |
33 |
+ files.out = open(log_file, "a") |
34 |
portage.util.apply_secpass_permissions(log_file, |
35 |
uid=portage.portage_uid, gid=portage.portage_gid, |
36 |
mode=0660) |
37 |
@@ -1488,7 +1488,7 @@ |
38 |
if fd == sys.stderr.fileno(): |
39 |
sys.stderr.flush() |
40 |
|
41 |
- files["out"] = os.fdopen(os.dup(fd_pipes[1]), 'w') |
42 |
+ files.out = os.fdopen(os.dup(fd_pipes[1]), 'w') |
43 |
|
44 |
master_fd, slave_fd = os.pipe() |
45 |
|
46 |
@@ -1526,22 +1526,22 @@ |
47 |
self.pid = retval[0] |
48 |
|
49 |
os.close(slave_fd) |
50 |
- files["fetcher"] = os.fdopen(master_fd, 'r') |
51 |
- self.register(files["fetcher"].fileno(), |
52 |
+ files.fetcher = os.fdopen(master_fd, 'r') |
53 |
+ self.register(files.fetcher.fileno(), |
54 |
select.POLLIN, self._output_handler) |
55 |
|
56 |
def _output_handler(self, fd, event): |
57 |
files = self.files |
58 |
buf = array.array('B') |
59 |
try: |
60 |
- buf.fromfile(files["fetcher"], self._bufsize) |
61 |
+ buf.fromfile(files.fetcher, self._bufsize) |
62 |
except EOFError: |
63 |
pass |
64 |
if buf: |
65 |
- buf.tofile(files["out"]) |
66 |
- files["out"].flush() |
67 |
+ buf.tofile(files.out) |
68 |
+ files.out.flush() |
69 |
else: |
70 |
- self.unregister(files["fetcher"].fileno()) |
71 |
+ self.unregister(files.fetcher.fileno()) |
72 |
for f in files.values(): |
73 |
f.close() |
74 |
|
75 |
@@ -1710,7 +1710,7 @@ |
76 |
"pid", "returncode", "files") |
77 |
|
78 |
_file_names = ("log", "stdout", "ebuild") |
79 |
- _files_dict = slot_dict_class(_file_names) |
80 |
+ _files_dict = slot_dict_class(_file_names, prefix="") |
81 |
_bufsize = 4096 |
82 |
|
83 |
def start(self): |
84 |
@@ -1785,26 +1785,26 @@ |
85 |
|
86 |
if logfile: |
87 |
os.close(slave_fd) |
88 |
- files["log"] = open(logfile, 'a') |
89 |
- files["stdout"] = os.fdopen(os.dup(fd_pipes_orig[1]), 'w') |
90 |
- files["ebuild"] = os.fdopen(master_fd, 'r') |
91 |
- self.register(files["ebuild"].fileno(), |
92 |
+ files.log = open(logfile, 'a') |
93 |
+ files.stdout = os.fdopen(os.dup(fd_pipes_orig[1]), 'w') |
94 |
+ files.ebuild = os.fdopen(master_fd, 'r') |
95 |
+ self.register(files.ebuild.fileno(), |
96 |
select.POLLIN, self._output_handler) |
97 |
|
98 |
def _output_handler(self, fd, event): |
99 |
files = self.files |
100 |
buf = array.array('B') |
101 |
try: |
102 |
- buf.fromfile(files["ebuild"], self._bufsize) |
103 |
+ buf.fromfile(files.ebuild, self._bufsize) |
104 |
except EOFError: |
105 |
pass |
106 |
if buf: |
107 |
- buf.tofile(files["stdout"]) |
108 |
- files["stdout"].flush() |
109 |
- buf.tofile(files["log"]) |
110 |
- files["log"].flush() |
111 |
+ buf.tofile(files.stdout) |
112 |
+ files.stdout.flush() |
113 |
+ buf.tofile(files.log) |
114 |
+ files.log.flush() |
115 |
else: |
116 |
- self.unregister(files["ebuild"].fileno()) |
117 |
+ self.unregister(files.ebuild.fileno()) |
118 |
for f in files.values(): |
119 |
f.close() |
120 |
|
121 |
@@ -2002,7 +2002,7 @@ |
122 |
"locked", "files", "pid", "pkg_path", "returncode", "_lock_obj") |
123 |
|
124 |
_file_names = ("fetcher", "out") |
125 |
- _files_dict = slot_dict_class(_file_names) |
126 |
+ _files_dict = slot_dict_class(_file_names, prefix="") |
127 |
_bufsize = 4096 |
128 |
|
129 |
def __init__(self, **kwargs): |
130 |
@@ -2029,7 +2029,7 @@ |
131 |
files = self.files |
132 |
|
133 |
if log_file is not None: |
134 |
- files["out"] = open(log_file, "a") |
135 |
+ files.out = open(log_file, "a") |
136 |
portage.util.apply_secpass_permissions(log_file, |
137 |
uid=portage.portage_uid, gid=portage.portage_gid, |
138 |
mode=0660) |
139 |
@@ -2041,7 +2041,7 @@ |
140 |
if fd == sys.stderr.fileno(): |
141 |
sys.stderr.flush() |
142 |
|
143 |
- files["out"] = os.fdopen(os.dup(fd_pipes[1]), 'w') |
144 |
+ files.out = os.fdopen(os.dup(fd_pipes[1]), 'w') |
145 |
|
146 |
master_fd, slave_fd = os.pipe() |
147 |
fcntl.fcntl(master_fd, fcntl.F_SETFL, |
148 |
@@ -2100,22 +2100,22 @@ |
149 |
self.pid = retval[0] |
150 |
|
151 |
os.close(slave_fd) |
152 |
- files["fetcher"] = os.fdopen(master_fd, 'r') |
153 |
- self.register(files["fetcher"].fileno(), |
154 |
+ files.fetcher = os.fdopen(master_fd, 'r') |
155 |
+ self.register(files.fetcher.fileno(), |
156 |
select.POLLIN, self._output_handler) |
157 |
|
158 |
def _output_handler(self, fd, event): |
159 |
files = self.files |
160 |
buf = array.array('B') |
161 |
try: |
162 |
- buf.fromfile(files["fetcher"], self._bufsize) |
163 |
+ buf.fromfile(files.fetcher, self._bufsize) |
164 |
except EOFError: |
165 |
pass |
166 |
if buf: |
167 |
- buf.tofile(files["out"]) |
168 |
- files["out"].flush() |
169 |
+ buf.tofile(files.out) |
170 |
+ files.out.flush() |
171 |
else: |
172 |
- self.unregister(files["fetcher"].fileno()) |
173 |
+ self.unregister(files.fetcher.fileno()) |
174 |
for f in files.values(): |
175 |
f.close() |
176 |
if self.locked: |
177 |
|
178 |
Modified: main/trunk/pym/portage/cache/mappings.py |
179 |
=================================================================== |
180 |
--- main/trunk/pym/portage/cache/mappings.py 2008-07-01 09:47:32 UTC (rev 10868) |
181 |
+++ main/trunk/pym/portage/cache/mappings.py 2008-07-01 10:11:10 UTC (rev 10869) |
182 |
@@ -104,14 +104,17 @@ |
183 |
|
184 |
_slot_dict_classes = weakref.WeakValueDictionary() |
185 |
|
186 |
-def slot_dict_class(keys): |
187 |
+def slot_dict_class(keys, prefix="_val_"): |
188 |
""" |
189 |
Generates mapping classes that behave similar to a dict but store values |
190 |
as object attributes that are allocated via __slots__. Instances of these |
191 |
objects have a smaller memory footprint than a normal dict object. |
192 |
|
193 |
@param keys: Fixed set of allowed keys |
194 |
- @type keys: iterable |
195 |
+ @type keys: Iterable |
196 |
+ @param prefix: a prefix to use when mapping |
197 |
+ attribute names from keys |
198 |
+ @type prefix: String |
199 |
@rtype: SlotDict |
200 |
@returns: A class that constructs SlotDict instances |
201 |
having the specified keys. |
202 |
@@ -120,14 +123,15 @@ |
203 |
keys_set = keys |
204 |
else: |
205 |
keys_set = frozenset(keys) |
206 |
- v = _slot_dict_classes.get(keys_set) |
207 |
+ v = _slot_dict_classes.get((keys_set, prefix)) |
208 |
if v is None: |
209 |
|
210 |
class SlotDict(object): |
211 |
|
212 |
allowed_keys = keys_set |
213 |
+ _prefix = prefix |
214 |
__slots__ = ("__weakref__",) + \ |
215 |
- tuple("_val_" + k for k in allowed_keys) |
216 |
+ tuple(prefix + k for k in allowed_keys) |
217 |
|
218 |
def __iter__(self): |
219 |
for k, v in self.iteritems(): |
220 |
@@ -145,7 +149,7 @@ |
221 |
def iteritems(self): |
222 |
for k in self.allowed_keys: |
223 |
try: |
224 |
- yield (k, getattr(self, "_val_" + k)) |
225 |
+ yield (k, getattr(self, self._prefix + k)) |
226 |
except AttributeError: |
227 |
pass |
228 |
|
229 |
@@ -161,12 +165,12 @@ |
230 |
|
231 |
def __delitem__(self, k): |
232 |
try: |
233 |
- delattr(self, "_val_" + k) |
234 |
+ delattr(self, self._prefix + k) |
235 |
except AttributeError: |
236 |
raise KeyError(k) |
237 |
|
238 |
def __setitem__(self, k, v): |
239 |
- setattr(self, "_val_" + k, v) |
240 |
+ setattr(self, self._prefix + k, v) |
241 |
|
242 |
def setdefault(self, key, default=None): |
243 |
try: |
244 |
@@ -186,7 +190,7 @@ |
245 |
|
246 |
def __getitem__(self, k): |
247 |
try: |
248 |
- return getattr(self, "_val_" + k) |
249 |
+ return getattr(self, self._prefix + k) |
250 |
except AttributeError: |
251 |
raise KeyError(k) |
252 |
|
253 |
@@ -197,7 +201,7 @@ |
254 |
return default |
255 |
|
256 |
def __contains__(self, k): |
257 |
- return hasattr(self, "_val_" + k) |
258 |
+ return hasattr(self, self._prefix + k) |
259 |
|
260 |
def has_key(self, k): |
261 |
return k in self |
262 |
@@ -232,7 +236,7 @@ |
263 |
def clear(self): |
264 |
for k in self.allowed_keys: |
265 |
try: |
266 |
- delattr(self, "_val_" + k) |
267 |
+ delattr(self, self._prefix + k) |
268 |
except AttributeError: |
269 |
pass |
270 |
|
271 |
|
272 |
-- |
273 |
gentoo-commits@l.g.o mailing list |