1 |
commit: 7f1c35149aa401e83828e27716d35c3ec2b13108 |
2 |
Author: dol-sen <brian.dolbec <AT> gmail <DOT> com> |
3 |
AuthorDate: Sat May 28 06:52:42 2011 +0000 |
4 |
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com> |
5 |
CommitDate: Sat May 28 06:52:42 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=7f1c3514 |
7 |
|
8 |
code cleanup, remove defunct fundtion(). Use set() to remove duplicate IUSE entries. |
9 |
|
10 |
Signed-off-by: dol-sen <brian.dolbec <AT> gmail.com> |
11 |
|
12 |
--- |
13 |
pym/portage/api/data_connect.py | 993 ++++++++++++++++++++------------------- |
14 |
pym/portage/api/flag.py | 60 ++- |
15 |
pym/portage/api/properties.py | 8 +- |
16 |
pym/portage/api/settings.py | 57 +-- |
17 |
4 files changed, 566 insertions(+), 552 deletions(-) |
18 |
|
19 |
diff --git a/pym/portage/api/data_connect.py b/pym/portage/api/data_connect.py |
20 |
index 5c73632..cb41ce0 100644 |
21 |
--- a/pym/portage/api/data_connect.py |
22 |
+++ b/pym/portage/api/data_connect.py |
23 |
@@ -6,586 +6,609 @@ |
24 |
"""Portage API data connection for consumer apps. """ |
25 |
|
26 |
import os.path |
27 |
+import logging |
28 |
|
29 |
import portage |
30 |
from portage import pkgsplit |
31 |
from portage.api.settings import default_settings |
32 |
from portage.dep import Atom |
33 |
-from portage import manifest |
34 |
+from portage import manifest #, catpkgsplit |
35 |
from portage.api.flag import get_flags |
36 |
from portage.api.properties import Properties |
37 |
-from portage.util import writemsg_level, grabfile |
38 |
+from portage.util import writemsg_level #, grabfile |
39 |
|
40 |
|
41 |
def ensure_settings(root, settings): |
42 |
- if settings is None: |
43 |
- settings = default_settings |
44 |
- if root is None: |
45 |
- root = settings.settings["ROOT"] |
46 |
- return root, settings |
47 |
+ """Internal function to check that root and settings |
48 |
+ are not None and if so, then return their default values""" |
49 |
+ if settings is None: |
50 |
+ settings = default_settings |
51 |
+ if root is None: |
52 |
+ root = settings.settings["ROOT"] |
53 |
+ return root, settings |
54 |
|
55 |
|
56 |
def get_path(cpv, file=None, vardb=True, root=None, settings=None): |
57 |
- """Returns a path to the specified category/package-version in |
58 |
- either the vardb or portdb |
59 |
- |
60 |
- @type cpv: string |
61 |
- @param cpv: 'cat/pkg-ver' |
62 |
- @type file: string |
63 |
- @param file: |
64 |
- @param vardb: bool, defaults to True |
65 |
- @type root: string |
66 |
- @param root: tree root to use |
67 |
- @param settings: optional portage config settings instance. |
68 |
- defaults to portage.api.settings.default_settings |
69 |
- @rtype string |
70 |
- @return '/path/to/file' |
71 |
- """ |
72 |
- root, settings = ensure_settings(root, settings) |
73 |
- if vardb: |
74 |
- return settings.vardb[root].getpath(cpv, file) |
75 |
- else: |
76 |
- if '/' not in cpv: |
77 |
- return '' |
78 |
- try: |
79 |
- dir,ovl = settings.portdb[root].findname2(cpv) |
80 |
- except: |
81 |
- dir = '' |
82 |
- return dir |
83 |
+ """Returns a path to the specified category/package-version in |
84 |
+ either the vardb or portdb |
85 |
+ |
86 |
+ @type cpv: string |
87 |
+ @param cpv: 'cat/pkg-ver' |
88 |
+ @type file: string |
89 |
+ @param file: |
90 |
+ @param vardb: bool, defaults to True |
91 |
+ @type root: string |
92 |
+ @param root: tree root to use |
93 |
+ @param settings: optional portage config settings instance. |
94 |
+ defaults to portage.api.settings.default_settings |
95 |
+ @rtype string |
96 |
+ @return '/path/to/file' |
97 |
+ """ |
98 |
+ root, settings = ensure_settings(root, settings) |
99 |
+ if vardb: |
100 |
+ return settings.vardb[root].getpath(cpv, file) |
101 |
+ else: |
102 |
+ if '/' not in cpv: |
103 |
+ return '' |
104 |
+ try: |
105 |
+ dir, ovl = settings.portdb[root].findname2(cpv) |
106 |
+ except: |
107 |
+ dir = '' |
108 |
+ return dir |
109 |
|
110 |
|
111 |
def xmatch(root, settings, *args, **kwargs): |
112 |
- """Pass arguments on to portage's caching match function. |
113 |
- xmatch('match-all',package-name) returns all ebuilds of <package-name> in a list, |
114 |
- xmatch('match-visible',package-name) returns non-masked ebuilds, |
115 |
- xmatch('match-list',package-name,mylist=list) checks for <package-name> in <list> |
116 |
- There are more possible arguments. |
117 |
- package-name may be, for example: |
118 |
- gnome-base/control-center ebuilds for gnome-base/control-center |
119 |
- control-center ebuilds for gnome-base/control-center |
120 |
- >=gnome-base/control-center-2.8.2 only ebuilds with version >= 2.8.2 |
121 |
- |
122 |
- @type root: string |
123 |
- @param root: tree root to use |
124 |
- @param settings: portage config settings instance. |
125 |
- @param args: The arument to pass to the dbapi.xmatch() |
126 |
- @param kwargs: the extra arguments to pass to dbapi.xmatch() |
127 |
- @rtype list |
128 |
- @return: list of matches |
129 |
- """ |
130 |
- results = settings.portdb[root].xmatch(*args, **kwargs) |
131 |
- return results |
132 |
+ """Pass arguments on to portage's caching match function. |
133 |
+ xmatch('match-all',package-name) returns all ebuilds of <package-name> in a list, |
134 |
+ xmatch('match-visible',package-name) returns non-masked ebuilds, |
135 |
+ xmatch('match-list',package-name,mylist=list) checks for <package-name> in <list> |
136 |
+ There are more possible arguments. |
137 |
+ package-name may be, for example: |
138 |
+ gnome-base/control-center ebuilds for gnome-base/control-center |
139 |
+ control-center ebuilds for gnome-base/control-center |
140 |
+ >=gnome-base/control-center-2.8.2 only ebuilds with version >= 2.8.2 |
141 |
+ |
142 |
+ @type root: string |
143 |
+ @param root: tree root to use |
144 |
+ @param settings: portage config settings instance. |
145 |
+ @param args: The arument to pass to the dbapi.xmatch() |
146 |
+ @param kwargs: the extra arguments to pass to dbapi.xmatch() |
147 |
+ @rtype list |
148 |
+ @return: list of matches |
149 |
+ """ |
150 |
+ results = settings.portdb[root].xmatch(*args, **kwargs) |
151 |
+ return results |
152 |
|
153 |
|
154 |
def get_versions(cp, include_masked=True, root=None, settings=None): |
155 |
- """Returns all available ebuilds for the package |
156 |
- |
157 |
- @type cp: string |
158 |
- @param cp: 'cat/pkg' |
159 |
- @type root: string |
160 |
- @param root: tree root to use |
161 |
- @param settings: optional portage config settings instance. |
162 |
- defaults to portage.api.settings.default_settings |
163 |
- @rtype |
164 |
- @return |
165 |
- """ |
166 |
- root, settings = ensure_settings(root, settings) |
167 |
- # Note: this is slow, especially when include_masked is false |
168 |
- criterion = include_masked and 'match-all' or 'match-visible' |
169 |
- results = xmatch(root, settings, criterion, str(cp)) |
170 |
- #writemsg_level( |
171 |
- # "DATA_CONNECT: get_versions(); criterion = %s, package = %s, results = %s" %(str(criterion),cp,str(results)), |
172 |
- # level=logging.DEBUG) |
173 |
- return results |
174 |
+ """Returns all available ebuilds for the package |
175 |
+ |
176 |
+ @type cp: string |
177 |
+ @param cp: 'cat/pkg' |
178 |
+ @type root: string |
179 |
+ @param root: tree root to use |
180 |
+ @param settings: optional portage config settings instance. |
181 |
+ defaults to portage.api.settings.default_settings |
182 |
+ @rtype |
183 |
+ @return |
184 |
+ """ |
185 |
+ root, settings = ensure_settings(root, settings) |
186 |
+ # Note: this is slow, especially when include_masked is false |
187 |
+ criterion = include_masked and 'match-all' or 'match-visible' |
188 |
+ results = xmatch(root, settings, criterion, str(cp)) |
189 |
+ #writemsg_level("DATA_CONNECT: get_versions(); criterion = %s, |
190 |
+ #package = %s, results = %s" %(str(criterion),cp,str(results)), |
191 |
+ #level=logging.DEBUG) |
192 |
+ return results |
193 |
|
194 |
|
195 |
def get_hard_masked(cp, root=None, settings=None): |
196 |
- """ |
197 |
- |
198 |
- @type cp: string |
199 |
- @param cp: 'cat/pkg' |
200 |
- @type root: string |
201 |
- @param root: tree root to use |
202 |
- @param settings: optional portage config settings instance. |
203 |
- defaults to portage.api.settings.default_settings |
204 |
- @rtype tuple |
205 |
- @return (hard_masked_nocheck, hardmasked) |
206 |
- """ |
207 |
- root, settings = ensure_settings(root, settings) |
208 |
- cp = str(cp) |
209 |
- hardmasked = [] |
210 |
- try: # newer portage |
211 |
- pmaskdict = settings.portdb[root].settings.pmaskdict[cp] |
212 |
- except KeyError: |
213 |
- pmaskdict = {} |
214 |
- for x in pmaskdict: |
215 |
- m = xmatch(root, settings, "match-all", x) |
216 |
- for n in m: |
217 |
- if n not in hardmasked: |
218 |
- hardmasked.append(n) |
219 |
- hard_masked_nocheck = hardmasked[:] |
220 |
- try: # newer portage |
221 |
- punmaskdict = settings.portdb[root].settings.punmaskdict[cp] |
222 |
- except KeyError: |
223 |
- punmaskdict = {} |
224 |
- for x in punmaskdict: |
225 |
- m = xmatch(root, settings, "match-all",x) |
226 |
- for n in m: |
227 |
- while n in hardmasked: hardmasked.remove(n) |
228 |
- return hard_masked_nocheck, hardmasked |
229 |
+ """ |
230 |
+ |
231 |
+ @type cp: string |
232 |
+ @param cp: 'cat/pkg' |
233 |
+ @type root: string |
234 |
+ @param root: tree root to use |
235 |
+ @param settings: optional portage config settings instance. |
236 |
+ defaults to portage.api.settings.default_settings |
237 |
+ @rtype tuple |
238 |
+ @return (hard_masked_nocheck, hardmasked) |
239 |
+ """ |
240 |
+ root, settings = ensure_settings(root, settings) |
241 |
+ cp = str(cp) |
242 |
+ hardmasked = [] |
243 |
+ try: # newer portage |
244 |
+ pmaskdict = settings.portdb[root].settings.pmaskdict[cp] |
245 |
+ except KeyError: |
246 |
+ pmaskdict = {} |
247 |
+ for x in pmaskdict: |
248 |
+ m = xmatch(root, settings, "match-all", x) |
249 |
+ for n in m: |
250 |
+ if n not in hardmasked: |
251 |
+ hardmasked.append(n) |
252 |
+ hard_masked_nocheck = hardmasked[:] |
253 |
+ try: # newer portage |
254 |
+ punmaskdict = settings.portdb[root].settings.punmaskdict[cp] |
255 |
+ except KeyError: |
256 |
+ punmaskdict = {} |
257 |
+ for x in punmaskdict: |
258 |
+ m = xmatch(root, settings, "match-all", x) |
259 |
+ for n in m: |
260 |
+ while n in hardmasked: hardmasked.remove(n) |
261 |
+ return hard_masked_nocheck, hardmasked |
262 |
|
263 |
|
264 |
def get_installed_files(cpv, root=None, settings=None): |
265 |
- """Get a list of installed files for an ebuild, assuming it has |
266 |
- been installed. |
267 |
- |
268 |
- @type cpv: string |
269 |
- @param cpv: 'cat/pkg-ver' |
270 |
- @type root: string |
271 |
- @param root: tree root to use |
272 |
- @param settings: optional portage config settings instance. |
273 |
- defaults to portage.api.settings.default_settings |
274 |
- @rtype list of strings |
275 |
- """ |
276 |
- root, settings = ensure_settings(root, settings) |
277 |
- cat, pv = portage.versions.catsplit(cpv) |
278 |
- db = portage.dblink(cat, pv, root, |
279 |
- settings.settings, treetype="vartree", |
280 |
- vartree=settings.vardb[root]) |
281 |
- contents = db.getcontents() |
282 |
- if not contents: |
283 |
- return ["None"] |
284 |
- return sorted(contents) |
285 |
+ """Get a list of installed files for an ebuild, assuming it has |
286 |
+ been installed. |
287 |
+ |
288 |
+ @type cpv: string |
289 |
+ @param cpv: 'cat/pkg-ver' |
290 |
+ @type root: string |
291 |
+ @param root: tree root to use |
292 |
+ @param settings: optional portage config settings instance. |
293 |
+ defaults to portage.api.settings.default_settings |
294 |
+ @rtype list of strings |
295 |
+ """ |
296 |
+ root, settings = ensure_settings(root, settings) |
297 |
+ cat, pv = portage.versions.catsplit(cpv) |
298 |
+ db = portage.dblink(cat, pv, root, |
299 |
+ settings.settings, treetype="vartree", |
300 |
+ vartree=settings.vardb[root]) |
301 |
+ contents = db.getcontents() |
302 |
+ if not contents: |
303 |
+ return ["None"] |
304 |
+ return sorted(contents) |
305 |
|
306 |
|
307 |
def best(versions): |
308 |
- """returns the best version in the list of supplied versions |
309 |
+ """returns the best version in the list of supplied versions |
310 |
|
311 |
- @type versions: list of strings |
312 |
- @param versions: a list of cpv's |
313 |
- @rtype str |
314 |
- """ |
315 |
- return portage.best(versions) |
316 |
+ @type versions: list of strings |
317 |
+ @param versions: a list of cpv's |
318 |
+ @rtype str |
319 |
+ """ |
320 |
+ return portage.best(versions) |
321 |
|
322 |
|
323 |
def get_best_ebuild(cp, root=None, settings=None): |
324 |
- """returns the best available cpv |
325 |
+ """returns the best available cpv |
326 |
|
327 |
- @type cp: string |
328 |
- @param cp: 'cat/pkg' |
329 |
- @type root: string |
330 |
- @param root: tree root to use |
331 |
- @param settings: optional portage config settings instance. |
332 |
- defaults to portage.api.settings.default_settings |
333 |
- @rtype str |
334 |
- """ |
335 |
- root, settings = ensure_settings(root, settings) |
336 |
- return xmatch(root, settings, "bestmatch-visible", cp) |
337 |
+ @type cp: string |
338 |
+ @param cp: 'cat/pkg' |
339 |
+ @type root: string |
340 |
+ @param root: tree root to use |
341 |
+ @param settings: optional portage config settings instance. |
342 |
+ defaults to portage.api.settings.default_settings |
343 |
+ @rtype str |
344 |
+ """ |
345 |
+ root, settings = ensure_settings(root, settings) |
346 |
+ return xmatch(root, settings, "bestmatch-visible", cp) |
347 |
|
348 |
|
349 |
def get_dep_ebuild(dep, root=None, settings=None): |
350 |
- """Progresively checks for available ebuilds that match the dependency. |
351 |
- returns what it finds as up to three options. |
352 |
- |
353 |
- @type dep: string |
354 |
- @param dep: a valid dependency |
355 |
- @type root: string |
356 |
- @param root: tree root to use |
357 |
- @param settings: optional portage config settings instance. |
358 |
- defaults to portage.api.settings.default_settings |
359 |
- @rtype set |
360 |
- @return best_ebuild, keyworded_ebuild, masked_ebuild |
361 |
- """ |
362 |
- root, settings = ensure_settings(root, settings) |
363 |
- #writemsg_level("DATA_CONNECT: get_dep_ebuild(); dep = " + dep, level=logging.DEBUG) |
364 |
- best_ebuild = keyworded_ebuild = masked_ebuild = '' |
365 |
- best_ebuild = xmatch(root, settings, "bestmatch-visible", dep) |
366 |
- if best_ebuild == '': |
367 |
- #writemsg_level("DATA_CONNECT: get_dep_ebuild(); checking masked packages", level=logging.DEBUG) |
368 |
- atomized_dep = Atom(dep) |
369 |
- hardmasked_nocheck, hardmasked = get_hard_masked(atomized_dep.cpv) |
370 |
- matches = xmatch(root, settings, "match-all", dep)[:] |
371 |
- masked_ebuild = best(matches) |
372 |
- keyworded = [] |
373 |
- for m in matches: |
374 |
- if m not in hardmasked: |
375 |
- keyworded.append(m) |
376 |
- keyworded_ebuild = best(keyworded) |
377 |
- #writemsg_level( |
378 |
- #"DATA_CONNECT: get_dep_ebuild(); ebuilds = " + str([best_ebuild, keyworded_ebuild, masked_ebuild]), |
379 |
- #level=logging.DEBUG) |
380 |
- return best_ebuild, keyworded_ebuild, masked_ebuild |
381 |
+ """Progresively checks for available ebuilds that match the dependency. |
382 |
+ returns what it finds as up to three options. |
383 |
+ |
384 |
+ @type dep: string |
385 |
+ @param dep: a valid dependency |
386 |
+ @type root: string |
387 |
+ @param root: tree root to use |
388 |
+ @param settings: optional portage config settings instance. |
389 |
+ defaults to portage.api.settings.default_settings |
390 |
+ @rtype set |
391 |
+ @return best_ebuild, keyworded_ebuild, masked_ebuild |
392 |
+ """ |
393 |
+ root, settings = ensure_settings(root, settings) |
394 |
+ #writemsg_level("DATA_CONNECT: get_dep_ebuild(); dep = " + \ |
395 |
+ #dep, level=logging.DEBUG) |
396 |
+ best_ebuild = keyworded_ebuild = masked_ebuild = '' |
397 |
+ best_ebuild = xmatch(root, settings, "bestmatch-visible", dep) |
398 |
+ if best_ebuild == '': |
399 |
+ #writemsg_level("DATA_CONNECT: get_dep_ebuild(); " |
400 |
+ #"checking masked packages", level=logging.DEBUG) |
401 |
+ atomized_dep = Atom(dep) |
402 |
+ hardmasked_nocheck, hardmasked = get_hard_masked(atomized_dep.cpv) |
403 |
+ matches = xmatch(root, settings, "match-all", dep)[:] |
404 |
+ masked_ebuild = best(matches) |
405 |
+ keyworded = [] |
406 |
+ for m in matches: |
407 |
+ if m not in hardmasked: |
408 |
+ keyworded.append(m) |
409 |
+ keyworded_ebuild = best(keyworded) |
410 |
+ #writemsg_level("DATA_CONNECT: get_dep_ebuild(); ebuilds = " + \ |
411 |
+ #str([best_ebuild, keyworded_ebuild, masked_ebuild]), |
412 |
+ #level=logging.DEBUG) |
413 |
+ return best_ebuild, keyworded_ebuild, masked_ebuild |
414 |
|
415 |
|
416 |
def get_virtual_dep(atom, settings=None): |
417 |
- """Returns the first (prefered) resolved virtual dependency |
418 |
- if there is more than 1 possible resolution |
419 |
+ """Returns the first (prefered) resolved virtual dependency |
420 |
+ if there is more than 1 possible resolution |
421 |
|
422 |
- @param atom: dependency string |
423 |
- @param settings: optional portage config settings instance. |
424 |
- defaults to portage.api.settings.default_settings |
425 |
- @rtpye: string |
426 |
- @return 'cat/pkg-ver' |
427 |
- """ |
428 |
- if settings is None: |
429 |
- settings = default_settings |
430 |
- return settings.settings.getvirtuals()[atom][0] |
431 |
+ @param atom: dependency string |
432 |
+ @param settings: optional portage config settings instance. |
433 |
+ defaults to portage.api.settings.default_settings |
434 |
+ @rtpye: string |
435 |
+ @return 'cat/pkg-ver' |
436 |
+ """ |
437 |
+ if settings is None: |
438 |
+ settings = default_settings |
439 |
+ return settings.settings.getvirtuals()[atom][0] |
440 |
|
441 |
|
442 |
def get_masking_status(cpv): |
443 |
- """Gets the current masking status |
444 |
+ """Gets the current masking status |
445 |
|
446 |
- @type cpv: string |
447 |
- @param cpv: 'cat/pkg-ver' |
448 |
- @rtype str |
449 |
- """ |
450 |
- try: |
451 |
- status = portage.getmaskingstatus(cpv) |
452 |
- except KeyError: |
453 |
- status = ['unavailable'] |
454 |
- return status |
455 |
+ @type cpv: string |
456 |
+ @param cpv: 'cat/pkg-ver' |
457 |
+ @rtype str |
458 |
+ """ |
459 |
+ try: |
460 |
+ status = portage.getmaskingstatus(cpv) |
461 |
+ except KeyError: |
462 |
+ status = ['unavailable'] |
463 |
+ return status |
464 |
|
465 |
|
466 |
def get_masking_reason(cpv, root=None, settings=None): |
467 |
- """Strips trailing \n from, and returns the masking reason given by portage |
468 |
- |
469 |
- @type cpv: string |
470 |
- @param cpv: 'cat/pkg-ver' |
471 |
- @type root: string |
472 |
- @param root: tree root to use |
473 |
- @param settings: optional portage config settings instance. |
474 |
- defaults to portage.api.settings.default_settings |
475 |
- @rtype str |
476 |
- """ |
477 |
- root, settings = ensure_settings(root, settings) |
478 |
- reason, location = portage.getmaskingreason( |
479 |
- cpv, settings=settings.settings, portdb=settings.portdb[root], |
480 |
- return_location=True) |
481 |
- if not reason: |
482 |
- reason = 'No masking reason given.' |
483 |
- status = get_masking_status(cpv) |
484 |
- if 'profile' in status: |
485 |
- reason = "Masked by the current profile." |
486 |
- status.remove('profile') |
487 |
- if status: |
488 |
- reason += " from " + ', '.join(status) |
489 |
- if location != None: |
490 |
- reason += "in file: " + location |
491 |
- if reason.endswith("\n"): |
492 |
- reason = reason[:-1] |
493 |
- return reason |
494 |
+ """Strips trailing \n from, and returns the masking reason given by portage |
495 |
+ |
496 |
+ @type cpv: string |
497 |
+ @param cpv: 'cat/pkg-ver' |
498 |
+ @type root: string |
499 |
+ @param root: tree root to use |
500 |
+ @param settings: optional portage config settings instance. |
501 |
+ defaults to portage.api.settings.default_settings |
502 |
+ @rtype str |
503 |
+ """ |
504 |
+ root, settings = ensure_settings(root, settings) |
505 |
+ reason, location = portage.getmaskingreason( |
506 |
+ cpv, settings=settings.settings, portdb=settings.portdb[root], |
507 |
+ return_location=True) |
508 |
+ if not reason: |
509 |
+ reason = 'No masking reason given.' |
510 |
+ status = get_masking_status(cpv) |
511 |
+ if 'profile' in status: |
512 |
+ reason = "Masked by the current profile." |
513 |
+ status.remove('profile') |
514 |
+ if status: |
515 |
+ reason += " from " + ', '.join(status) |
516 |
+ if location != None: |
517 |
+ reason += "in file: " + location |
518 |
+ if reason.endswith("\n"): |
519 |
+ reason = reason[:-1] |
520 |
+ return reason |
521 |
|
522 |
|
523 |
def get_size(cpv, formatted_string=True, root=None, settings=None): |
524 |
- """ Returns size of package to fetch. |
525 |
- |
526 |
- @type cpv: string |
527 |
- @param cpv: 'cat/pkg-ver' |
528 |
- @param formatted_string: defaults to True |
529 |
- @type root: string |
530 |
- @param root: tree root to use |
531 |
- @param settings: optional portage config settings instance. |
532 |
- defaults to portage.api.settings.default_settings |
533 |
- @rtype str, or int |
534 |
- """ |
535 |
- root, settings = ensure_settings(root, settings) |
536 |
- #This code to calculate size of downloaded files was taken from /usr/bin/emerge - BB |
537 |
- #writemsg_level( "DATA_CONNECT: get_size; cpv = " + cpv, level=logging.DEBUG) |
538 |
- total = [0,''] |
539 |
- ebuild = settings.portdb[root].findname(cpv) |
540 |
- pkgdir = os.path.dirname(ebuild) |
541 |
- mf = manifest.Manifest(pkgdir, settings.settings["DISTDIR"]) |
542 |
- iuse, final_use = get_flags(cpv, final_setting=True, root=root, settings=default_settings) |
543 |
- #writemsg_level( "DATA_CONNECT: get_size; Attempting to get fetchlist final use= " + str(final_use), |
544 |
- #level=logging.DEBUG) |
545 |
- try: |
546 |
- fetchlist = settings.portdb[root].getFetchMap(cpv, set(final_use)) |
547 |
- #writemsg_level( "DATA_CONNECT: get_size; fetchlist= " +str(fetchlist), level=logging.DEBUG) |
548 |
- #writemsg_level( "DATA_CONNECT: get_size; mf.getDistfilesSize()", level=logging.DEBUG) |
549 |
- total[0] = mf.getDistfilesSize(fetchlist) |
550 |
- if formatted_string: |
551 |
- total_str = str(total[0]/1024) |
552 |
- #writemsg_level( "DATA_CONNECT: get_size; total_str = " + total_str, level=logging.DEBUG) |
553 |
- count=len(total_str) |
554 |
- while (count > 3): |
555 |
- count-=3 |
556 |
- total_str=total_str[:count]+","+total_str[count:] |
557 |
- total[1]=total_str+" kB" |
558 |
- except KeyError, e: |
559 |
- total[1] = "Unknown (missing digest)" |
560 |
- total[0] = 0 |
561 |
- #writemsg_level( "DATA_CONNECT: get_size; Exception: " + str(e), level=logging.DEBUG) |
562 |
- #writemsg_level( "DATA_CONNECT: get_size; cpv: " + str(cpv), level=logging.DEBUG) |
563 |
- #writemsg_level( "DATA_CONNECT: get_size; fetchlist = " + str(fetchlist), level=logging.DEBUG) |
564 |
- #writemsg_level( "DATA_CONNECT: get_size; returning total[1] = " + total[1], level=logging.DEBUG) |
565 |
- if formatted_string: |
566 |
- return total[1] |
567 |
- return total[0] |
568 |
+ """ Returns size of package to fetch. |
569 |
+ |
570 |
+ @type cpv: string |
571 |
+ @param cpv: 'cat/pkg-ver' |
572 |
+ @param formatted_string: defaults to True |
573 |
+ @type root: string |
574 |
+ @param root: tree root to use |
575 |
+ @param settings: optional portage config settings instance. |
576 |
+ defaults to portage.api.settings.default_settings |
577 |
+ @rtype str, or int |
578 |
+ """ |
579 |
+ root, settings = ensure_settings(root, settings) |
580 |
+ #This code to calculate size of downloaded files |
581 |
+ # was taken from /usr/bin/emerge - BB |
582 |
+ #writemsg_level( "DATA_CONNECT: get_size; cpv = " + \ |
583 |
+ #cpv, level=logging.DEBUG) |
584 |
+ total = [0,''] |
585 |
+ ebuild = settings.portdb[root].findname(cpv) |
586 |
+ pkgdir = os.path.dirname(ebuild) |
587 |
+ mf = manifest.Manifest(pkgdir, settings.settings["DISTDIR"]) |
588 |
+ iuse, final_use = get_flags(cpv, final_setting=True, |
589 |
+ root=root, settings=default_settings) |
590 |
+ #writemsg_level( "DATA_CONNECT: get_size; Attempting to get " |
591 |
+ #"fetchlist final use= " + str(final_use), level=logging.DEBUG) |
592 |
+ try: |
593 |
+ fetchlist = settings.portdb[root].getFetchMap(cpv, set(final_use)) |
594 |
+ #writemsg_level( "DATA_CONNECT: get_size; fetchlist= " + \ |
595 |
+ #str(fetchlist), level=logging.DEBUG) |
596 |
+ #writemsg_level( "DATA_CONNECT: get_size; mf.getDistfilesSize()", |
597 |
+ #level=logging.DEBUG) |
598 |
+ total[0] = mf.getDistfilesSize(fetchlist) |
599 |
+ if formatted_string: |
600 |
+ total_str = str(total[0]/1024) |
601 |
+ #writemsg_level( "DATA_CONNECT: get_size; total_str = " + \ |
602 |
+ #total_str, level=logging.DEBUG) |
603 |
+ count = len(total_str) |
604 |
+ while (count > 3): |
605 |
+ count -= 3 |
606 |
+ total_str = total_str[:count]+","+total_str[count:] |
607 |
+ total[1] = total_str+" kB" |
608 |
+ except KeyError as e: |
609 |
+ total[1] = "Unknown (missing digest)" |
610 |
+ total[0] = 0 |
611 |
+ writemsg_level( "DATA_CONNECT: get_size; Exception: " + str(e), |
612 |
+ level=logging.DEBUG) |
613 |
+ writemsg_level( "DATA_CONNECT: get_size; cpv: " + str(cpv), |
614 |
+ level=logging.DEBUG) |
615 |
+ writemsg_level( "DATA_CONNECT: get_size; fetchlist = " + \ |
616 |
+ str(fetchlist), level=logging.DEBUG) |
617 |
+ #writemsg_level( "DATA_CONNECT: get_size; returning total[1] = " \ |
618 |
+ #+ total[1], level=logging.DEBUG) |
619 |
+ if formatted_string: |
620 |
+ return total[1] |
621 |
+ return total[0] |
622 |
|
623 |
|
624 |
def get_properties(cpv, want_dict=False, root=None, settings=None): |
625 |
- """Get all ebuild variables in one chunk. |
626 |
- |
627 |
- @type cpv: string |
628 |
- @param cpv: 'cat/pkg-ver' |
629 |
- @type root: string |
630 |
- @param root: tree root to use |
631 |
- @param settings: optional portage config settings instance. |
632 |
- defaults to portage.api.settings.default_settings |
633 |
- @rtype |
634 |
- @return all properties of cpv |
635 |
- """ |
636 |
- root, settings = ensure_settings(root, settings) |
637 |
- prop_dict = None |
638 |
- if settings.portdb[root].cpv_exists(cpv): # if in portage tree |
639 |
- try: |
640 |
- #writemsg_level(" * DATA_CONNECT: get_properties()", level=logging.DEBUG) |
641 |
- prop_dict = dict(zip(settings.keys, settings.portdb[root].aux_get(cpv, portage.auxdbkeys))) |
642 |
- except IOError, e: # Sync being performed may delete files |
643 |
- #writemsg_level(" * DATA_CONNECT: get_properties(): IOError: %s" % str(e), level=logging.DEBUG) |
644 |
- pass |
645 |
- except Exception, e: |
646 |
- #writemsg_level(" * DATA_CONNECT: get_properties(): Exception: %s" %str( e), level=logging.DEBUG) |
647 |
- pass |
648 |
- else: |
649 |
- if settings.vardb[root].cpv_exists(cpv): # elif in installed pkg tree |
650 |
- prop_dict = dict(zip(settings.keys, settings.vardb[root].aux_get(cpv, portage.auxdbkeys))) |
651 |
- if want_dict: |
652 |
- # return an empty dict instead of None |
653 |
- return prop_dict or {} |
654 |
- return Properties(prop_dict) |
655 |
+ """Get all ebuild variables in one chunk. |
656 |
+ |
657 |
+ @type cpv: string |
658 |
+ @param cpv: 'cat/pkg-ver' |
659 |
+ @type root: string |
660 |
+ @param root: tree root to use |
661 |
+ @param settings: optional portage config settings instance. |
662 |
+ defaults to portage.api.settings.default_settings |
663 |
+ @rtype |
664 |
+ @return all properties of cpv |
665 |
+ """ |
666 |
+ root, settings = ensure_settings(root, settings) |
667 |
+ prop_dict = None |
668 |
+ if settings.portdb[root].cpv_exists(cpv): # if in portage tree |
669 |
+ try: |
670 |
+ #writemsg_level(" * DATA_CONNECT: get_properties()", level=logging.DEBUG) |
671 |
+ prop_dict = dict(zip(settings.keys, |
672 |
+ settings.portdb[root].aux_get(cpv, portage.auxdbkeys))) |
673 |
+ except IOError as e: # Sync being performed may delete files |
674 |
+ writemsg_level(" * DATA_CONNECT: get_properties(): IOError: %s" |
675 |
+ % str(e), level=logging.DEBUG) |
676 |
+ #pass |
677 |
+ except Exception as e: |
678 |
+ writemsg_level(" * DATA_CONNECT: get_properties(): Exception: %s" |
679 |
+ %str( e), level=logging.DEBUG) |
680 |
+ #pass |
681 |
+ else: |
682 |
+ if settings.vardb[root].cpv_exists(cpv): # elif in installed pkg tree |
683 |
+ prop_dict = dict(zip(settings.keys, |
684 |
+ settings.vardb[root].aux_get(cpv, portage.auxdbkeys))) |
685 |
+ if want_dict: |
686 |
+ # return an empty dict instead of None |
687 |
+ return prop_dict or {} |
688 |
+ return Properties(prop_dict) |
689 |
|
690 |
|
691 |
def is_overlay(cpv, root=None, settings=None): # lifted from gentoolkit |
692 |
- """Returns true if the package is in an overlay. |
693 |
- |
694 |
- @type cpv: string |
695 |
- @param cpv: 'cat/pkg-ver' |
696 |
- @type root: string |
697 |
- @param root: tree root to use |
698 |
- @param settings: optional portage config settings instance. |
699 |
- defaults to portage.api.settings.default_settings |
700 |
- @rtype bool |
701 |
- """ |
702 |
- root, settings = ensure_settings(root, settings) |
703 |
- try: |
704 |
- dir,ovl = settings.portdb[root].findname2(cpv) |
705 |
- except: |
706 |
- return False |
707 |
- return ovl != settings.portdir |
708 |
+ """Returns true if the package is in an overlay. |
709 |
+ |
710 |
+ @type cpv: string |
711 |
+ @param cpv: 'cat/pkg-ver' |
712 |
+ @type root: string |
713 |
+ @param root: tree root to use |
714 |
+ @param settings: optional portage config settings instance. |
715 |
+ defaults to portage.api.settings.default_settings |
716 |
+ @rtype bool |
717 |
+ """ |
718 |
+ root, settings = ensure_settings(root, settings) |
719 |
+ try: |
720 |
+ dir, ovl = settings.portdb[root].findname2(cpv) |
721 |
+ except: |
722 |
+ return False |
723 |
+ return ovl != settings.portdir |
724 |
|
725 |
|
726 |
def get_overlay(cpv, root=None, settings=None): |
727 |
- """Returns a portage overlay id |
728 |
- |
729 |
- @type cpv: string |
730 |
- @param cpv: 'cat/pkg-ver' |
731 |
- @type root: string |
732 |
- @param root: tree root to use |
733 |
- @param settings: optional portage config settings instance. |
734 |
- defaults to portage.api.settings.default_settings |
735 |
- @rtype str |
736 |
- @return portage overlay id. or 'Deprecated? |
737 |
- '""" |
738 |
- root, settings = ensure_settings(root, settings) |
739 |
- if '/' not in cpv: |
740 |
- return '' |
741 |
- try: |
742 |
- dir,ovl = settings.portdb[root].findname2(cpv) |
743 |
- except: |
744 |
- ovl = 'Deprecated?' |
745 |
- return ovl |
746 |
+ """Returns a portage overlay id |
747 |
+ |
748 |
+ @type cpv: string |
749 |
+ @param cpv: 'cat/pkg-ver' |
750 |
+ @type root: string |
751 |
+ @param root: tree root to use |
752 |
+ @param settings: optional portage config settings instance. |
753 |
+ defaults to portage.api.settings.default_settings |
754 |
+ @rtype str |
755 |
+ @return portage overlay id. or 'Deprecated? |
756 |
+ '""" |
757 |
+ root, settings = ensure_settings(root, settings) |
758 |
+ if '/' not in cpv: |
759 |
+ return '' |
760 |
+ try: |
761 |
+ dir, ovl = settings.portdb[root].findname2(cpv) |
762 |
+ except: |
763 |
+ ovl = 'Deprecated?' |
764 |
+ return ovl |
765 |
|
766 |
|
767 |
def get_overlay_name(ovl_path=None, cpv=None, root=None, settings=None): |
768 |
- """Returns the overlay name for either the overlay path or the cpv of a pkg |
769 |
- |
770 |
- @param ovl_path: optional portage overlay path |
771 |
- @param cpv: optional cat/pkg-ver string |
772 |
- @type root: string |
773 |
- @param settings: optional portage config settings instance. |
774 |
- defaults to portage.api.settings.default_settings |
775 |
- @param root: tree root to use |
776 |
- @rtype str |
777 |
- """ |
778 |
- root, settings = ensure_settings(root, settings) |
779 |
- if not ovl_path and cpv: |
780 |
- ovl_path= get_overlay(cpv, root) |
781 |
- name = None |
782 |
- name = settings.portdb[root].getRepositoryName(ovl_path) |
783 |
- return name or "????" |
784 |
+ """Returns the overlay name for either the overlay path or the cpv of a pkg |
785 |
+ |
786 |
+ @param ovl_path: optional portage overlay path |
787 |
+ @param cpv: optional cat/pkg-ver string |
788 |
+ @type root: string |
789 |
+ @param settings: optional portage config settings instance. |
790 |
+ defaults to portage.api.settings.default_settings |
791 |
+ @param root: tree root to use |
792 |
+ @rtype str |
793 |
+ """ |
794 |
+ root, settings = ensure_settings(root, settings) |
795 |
+ if not ovl_path and cpv: |
796 |
+ ovl_path = get_overlay(cpv, root) |
797 |
+ name = None |
798 |
+ name = settings.portdb[root].getRepositoryName(ovl_path) |
799 |
+ return name or "????" |
800 |
|
801 |
|
802 |
def get_repositories(root=None, settings=None): |
803 |
- """Returns a list of all repositories for root |
804 |
- @param settings: optional portage config settings instance. |
805 |
- defaults to portage.api.settings.default_settings |
806 |
- """ |
807 |
- root, settings = ensure_settings(root, settings) |
808 |
- return self.portdb[root].getRepositories() |
809 |
+ """Returns a list of all repositories for root |
810 |
+ @param settings: optional portage config settings instance. |
811 |
+ defaults to portage.api.settings.default_settings |
812 |
+ """ |
813 |
+ root, settings = ensure_settings(root, settings) |
814 |
+ return settings.portdb[root].getRepositories() |
815 |
|
816 |
|
817 |
def get_system_pkgs(root=None, settings=None): # lifted from gentoolkit |
818 |
- """Returns a tuple of lists, first list is resolved system packages, |
819 |
- second is a list of unresolved packages. |
820 |
- |
821 |
- @type root: string |
822 |
- @param root: tree root to use |
823 |
- @param settings: optional portage config settings instance. |
824 |
- defaults to portage.api.settings.default_settings |
825 |
- @rtype: tuple |
826 |
- @return (resolved, unresolved) pkg lists |
827 |
- """ |
828 |
- root, settings = ensure_settings(root, settings) |
829 |
- pkglist = settings.settings.packages |
830 |
- resolved = [] |
831 |
- unresolved = [] |
832 |
- for x in pkglist: |
833 |
- cpv = x.strip() |
834 |
- pkg = get_best_ebuild(cpv, root) |
835 |
- if pkg: |
836 |
- try: |
837 |
- resolved.append(Atom(pkg).cp) |
838 |
- except: |
839 |
- resolved.append(pkgsplit(pkg)[0]) |
840 |
- else: |
841 |
- unresolved.append(pkgsplit(cpv)[0]) |
842 |
- return (resolved, unresolved) |
843 |
+ """Returns a tuple of lists, first list is resolved system packages, |
844 |
+ second is a list of unresolved packages. |
845 |
+ |
846 |
+ @type root: string |
847 |
+ @param root: tree root to use |
848 |
+ @param settings: optional portage config settings instance. |
849 |
+ defaults to portage.api.settings.default_settings |
850 |
+ @rtype: tuple |
851 |
+ @return (resolved, unresolved) pkg lists |
852 |
+ """ |
853 |
+ root, settings = ensure_settings(root, settings) |
854 |
+ pkglist = settings.settings.packages |
855 |
+ resolved = [] |
856 |
+ unresolved = [] |
857 |
+ for x in pkglist: |
858 |
+ cpv = x.strip() |
859 |
+ pkg = get_best_ebuild(cpv, root) |
860 |
+ if pkg: |
861 |
+ try: |
862 |
+ resolved.append(Atom(pkg).cp) |
863 |
+ except: |
864 |
+ resolved.append(pkgsplit(pkg)[0]) |
865 |
+ else: |
866 |
+ unresolved.append(pkgsplit(cpv)[0]) |
867 |
+ return (resolved, unresolved) |
868 |
|
869 |
|
870 |
def get_allnodes(root=None, settings=None): |
871 |
- """Returns a list of all availabe cat/pkg's available from the tree |
872 |
- and configured overlays. Subject to masking. |
873 |
+ """Returns a list of all availabe cat/pkg's available from the tree |
874 |
+ and configured overlays. Subject to masking. |
875 |
|
876 |
- @type root: string |
877 |
- @param root: tree root to use |
878 |
- @param settings: optional portage config settings instance. |
879 |
- defaults to portage.api.settings.default_settings |
880 |
- @rtpye: list |
881 |
- @return: ['cat/pkg1', 'cat/pkg2',...] |
882 |
- """ |
883 |
- root, settings = ensure_settings(root, settings) |
884 |
- return settings.portdb[root].cp_all() |
885 |
+ @type root: string |
886 |
+ @param root: tree root to use |
887 |
+ @param settings: optional portage config settings instance. |
888 |
+ defaults to portage.api.settings.default_settings |
889 |
+ @rtpye: list |
890 |
+ @return: ['cat/pkg1', 'cat/pkg2',...] |
891 |
+ """ |
892 |
+ root, settings = ensure_settings(root, settings) |
893 |
+ return settings.portdb[root].cp_all() |
894 |
|
895 |
|
896 |
def get_installed_list(root=None, settings=None): |
897 |
- """Returns a list of all installed cat/pkg-ver available from the tree |
898 |
- and configured overlays. Subject to masking. |
899 |
+ """Returns a list of all installed cat/pkg-ver available from the tree |
900 |
+ and configured overlays. Subject to masking. |
901 |
|
902 |
- @type root: string |
903 |
- @param root: tree root to use |
904 |
- @param settings: optional portage config settings instance. |
905 |
- defaults to portage.api.settings.default_settings |
906 |
- @rtpye: list |
907 |
- @return: ['cat/pkg1-ver', 'cat/pkg2-ver',...] |
908 |
- """ |
909 |
- root, settings = ensure_settings(root, settings) |
910 |
- return settings.vardb[root].cpv_all() |
911 |
+ @type root: string |
912 |
+ @param root: tree root to use |
913 |
+ @param settings: optional portage config settings instance. |
914 |
+ defaults to portage.api.settings.default_settings |
915 |
+ @rtpye: list |
916 |
+ @return: ['cat/pkg1-ver', 'cat/pkg2-ver',...] |
917 |
+ """ |
918 |
+ root, settings = ensure_settings(root, settings) |
919 |
+ return settings.vardb[root].cpv_all() |
920 |
|
921 |
|
922 |
def is_installed(cpv, root=None, settings=None): |
923 |
- root, settings = ensure_settings(root, settings) |
924 |
- if settings.vardb[root].cpv_exists(cpv): |
925 |
- return True |
926 |
- return False |
927 |
+ root, settings = ensure_settings(root, settings) |
928 |
+ if settings.vardb[root].cpv_exists(cpv): |
929 |
+ return True |
930 |
+ return False |
931 |
|
932 |
|
933 |
def get_cp_all(root=None, vardb=False, categories=None, |
934 |
- trees=None, settings=None): |
935 |
- """ |
936 |
- This returns a list of all keys in our tree or trees |
937 |
- @param categories: optional list of categories to search or |
938 |
- defaults to settings.portdb.settings.categories |
939 |
- @param trees: optional list of trees to search the categories in or |
940 |
- defaults to settings.portdb.porttrees |
941 |
- @param settings: optional portage config settings instance. |
942 |
- defaults to portage.api.settings.default_settings |
943 |
- @rtype list of [cat/pkg,...] |
944 |
- """ |
945 |
- root, settings = ensure_settings(root, settings) |
946 |
- if vardb: |
947 |
- cp_all = settings.vardb[root].cp_all() |
948 |
- if categories: |
949 |
- d= {} |
950 |
- for cp in cp_all: |
951 |
- cp_split = catpkgsplit(cp) |
952 |
- return sorted(d) |
953 |
- return cp_all |
954 |
- return settings.portdb[root].cp_all(categories, trees) |
955 |
+ trees=None, settings=None): |
956 |
+ """ |
957 |
+ This returns a list of all keys in our tree or trees |
958 |
+ @param categories: optional list of categories to search or |
959 |
+ defaults to settings.portdb.settings.categories |
960 |
+ @param trees: optional list of trees to search the categories in or |
961 |
+ defaults to settings.portdb.porttrees |
962 |
+ @param settings: optional portage config settings instance. |
963 |
+ defaults to portage.api.settings.default_settings |
964 |
+ @rtype list of [cat/pkg,...] |
965 |
+ """ |
966 |
+ root, settings = ensure_settings(root, settings) |
967 |
+ if vardb: |
968 |
+ raise NotImplementedError |
969 |
+ '''cp_all = settings.vardb[root].cp_all() |
970 |
+ if categories: |
971 |
+ d= {} |
972 |
+ for cp in cp_all: |
973 |
+ cp_split = catpkgsplit(cp) |
974 |
+ if cp_split[0] in categories and cp_split[0] not in d: |
975 |
+ d[cp_split[0]] = [] |
976 |
+ d[cp_split[0]].append(p) |
977 |
+ return sorted(d) |
978 |
+ return cp_all''' |
979 |
+ return settings.portdb[root].cp_all(categories, trees) |
980 |
|
981 |
|
982 |
def get_cp_list(root=None, cp=None, trees=None, settings=None): |
983 |
- """ |
984 |
- @param settings: optional portage config settings instance. |
985 |
- defaults to portage.api.settings.default_settings |
986 |
- """ |
987 |
- root, settings = ensure_settings(root, settings) |
988 |
- return settings.portdb[root].cp_list(cp, trees) |
989 |
+ """ |
990 |
+ @param settings: optional portage config settings instance. |
991 |
+ defaults to portage.api.settings.default_settings |
992 |
+ """ |
993 |
+ root, settings = ensure_settings(root, settings) |
994 |
+ return settings.portdb[root].cp_list(cp, trees) |
995 |
|
996 |
|
997 |
def findLicensePath(license_name, root=None, settings=None): |
998 |
- """@param settings: optional portage config settings instance. |
999 |
- defaults to portage.api.settings.default_settings |
1000 |
- """ |
1001 |
- root, settings = ensure_settings(root, settings) |
1002 |
- return settings.portdb[root].findLicensePath(license_name) |
1003 |
- |
1004 |
- |
1005 |
-def getFetchMap(pkg, useflags=None, tree=None, settings=None): |
1006 |
- """ |
1007 |
- Get the SRC_URI metadata as a dict which maps each file name to a |
1008 |
- set of alternative URIs. |
1009 |
- |
1010 |
- @param mypkg: cpv for an ebuild |
1011 |
- @type pkg: String |
1012 |
- @param useflags: a collection of enabled USE flags, for evaluation of |
1013 |
- conditionals |
1014 |
- @type useflags: set, or None to enable all conditionals |
1015 |
- @param tree: The canonical path of the tree in which the ebuild |
1016 |
- is located, or None for automatic lookup |
1017 |
- @type pkg: String |
1018 |
- @param settings: optional portage config settings instance. |
1019 |
- defaults to portage.api.settings.default_settings |
1020 |
- @returns: A dict which maps each file name to a set of alternative |
1021 |
- URIs. |
1022 |
- @rtype: dict |
1023 |
- """ |
1024 |
- root, settings = ensure_settings(root, settings) |
1025 |
- return settings.portdb[root].getfetchsizes(pkg, useflags, tree) |
1026 |
+ """@param settings: optional portage config settings instance. |
1027 |
+ defaults to portage.api.settings.default_settings |
1028 |
+ """ |
1029 |
+ root, settings = ensure_settings(root, settings) |
1030 |
+ return settings.portdb[root].findLicensePath(license_name) |
1031 |
+ |
1032 |
+ |
1033 |
+def getFetchMap(pkg, useflags=None, tree=None, root=None, settings=None): |
1034 |
+ """ |
1035 |
+ Get the SRC_URI metadata as a dict which maps each file name to a |
1036 |
+ set of alternative URIs. |
1037 |
+ |
1038 |
+ @param mypkg: cpv for an ebuild |
1039 |
+ @type pkg: String |
1040 |
+ @param useflags: a collection of enabled USE flags, for evaluation of |
1041 |
+ conditionals |
1042 |
+ @type useflags: set, or None to enable all conditionals |
1043 |
+ @param tree: The canonical path of the tree in which the ebuild |
1044 |
+ is located, or None for automatic lookup |
1045 |
+ @type pkg: String |
1046 |
+ @param settings: optional portage config settings instance. |
1047 |
+ defaults to portage.api.settings.default_settings |
1048 |
+ @returns: A dict which maps each file name to a set of alternative |
1049 |
+ URIs. |
1050 |
+ @rtype: dict |
1051 |
+ """ |
1052 |
+ root, settings = ensure_settings(root, settings) |
1053 |
+ return settings.portdb[root].getfetchsizes(pkg, useflags, tree) |
1054 |
|
1055 |
|
1056 |
def getfetchsizes(pkg, useflags=None, root=None, settings=None): |
1057 |
- """Returns a filename:size dictionnary of remaining downloads |
1058 |
- @param settings: optional portage config settings instance. |
1059 |
- defaults to portage.api.settings.default_settings |
1060 |
- """ |
1061 |
- root, settings = ensure_settings(root, settings) |
1062 |
- return settings.portdb[root].getfetchsizes(pkg, useflags) |
1063 |
+ """Returns a filename:size dictionnary of remaining downloads |
1064 |
+ @param settings: optional portage config settings instance. |
1065 |
+ defaults to portage.api.settings.default_settings |
1066 |
+ """ |
1067 |
+ root, settings = ensure_settings(root, settings) |
1068 |
+ return settings.portdb[root].getfetchsizes(pkg, useflags) |
1069 |
|
1070 |
|
1071 |
def cpv_exists(cpv, root=None, settings=None): |
1072 |
- """Tells us whether an actual ebuild exists on disk (no masking) |
1073 |
- @param settings: optional portage config settings instance. |
1074 |
- defaults to portage.api.settings.default_settings |
1075 |
- """ |
1076 |
- root, settings = ensure_settings(root, settings) |
1077 |
- return settings.portdb[root].cpv_exists(cpv) |
1078 |
+ """Tells us whether an actual ebuild exists on disk (no masking) |
1079 |
+ @param settings: optional portage config settings instance. |
1080 |
+ defaults to portage.api.settings.default_settings |
1081 |
+ """ |
1082 |
+ root, settings = ensure_settings(root, settings) |
1083 |
+ return settings.portdb[root].cpv_exists(cpv) |
1084 |
|
1085 |
def get_category_description(category, root=None, settings=None): |
1086 |
|
1087 |
- root, settings = ensure_settings(root, settings) |
1088 |
- from xml.dom import minidom |
1089 |
- data = {} |
1090 |
- portdir = self.settings.settings['PORTDIR'] |
1091 |
- myfile = os.path.join(portdir, category, "metadata.xml") |
1092 |
- if os.access(myfile, os.R_OK) and os.path.isfile(myfile): |
1093 |
- doc = minidom.parse(myfile) |
1094 |
- longdescs = doc.getElementsByTagName("longdescription") |
1095 |
- for longdesc in longdescs: |
1096 |
- data[longdesc.getAttribute("lang").strip()] = \ |
1097 |
- ' '.join([x.strip() for x in \ |
1098 |
- longdesc.firstChild.data.strip().split("\n")]) |
1099 |
- |
1100 |
- # Only return in plain English since Portage doesn't support i18n/l10n |
1101 |
- return data.get('en', "No description") |
1102 |
+ root, settings = ensure_settings(root, settings) |
1103 |
+ from xml.dom import minidom |
1104 |
+ data = {} |
1105 |
+ portdir = settings.settings['PORTDIR'] |
1106 |
+ myfile = os.path.join(portdir, category, "metadata.xml") |
1107 |
+ if os.access(myfile, os.R_OK) and os.path.isfile(myfile): |
1108 |
+ doc = minidom.parse(myfile) |
1109 |
+ longdescs = doc.getElementsByTagName("longdescription") |
1110 |
+ for longdesc in longdescs: |
1111 |
+ data[longdesc.getAttribute("lang").strip()] = \ |
1112 |
+ ' '.join([x.strip() for x in \ |
1113 |
+ longdesc.firstChild.data.strip().split("\n")]) |
1114 |
+ |
1115 |
+ # Only return in plain English since Portage doesn't support i18n/l10n |
1116 |
+ return data.get('en', "No description") |
1117 |
|
1118 |
|
1119 |
diff --git a/pym/portage/api/flag.py b/pym/portage/api/flag.py |
1120 |
index 52ea9be..a83ee1d 100644 |
1121 |
--- a/pym/portage/api/flag.py |
1122 |
+++ b/pym/portage/api/flag.py |
1123 |
@@ -19,7 +19,7 @@ __all__ = ( |
1124 |
) |
1125 |
|
1126 |
|
1127 |
-import sys |
1128 |
+#import sys |
1129 |
|
1130 |
from portage.api.settings import default_settings |
1131 |
|
1132 |
@@ -64,7 +64,7 @@ def get_installed_use(cpv, use="USE", root=None, settings=default_settings): |
1133 |
""" |
1134 |
if root is None: |
1135 |
root = settings.settings["ROOT"] |
1136 |
- return settings.vardb[root].aux_get(cpv,[use])[0].split() |
1137 |
+ return settings.vardb[root].aux_get(cpv, [use])[0].split() |
1138 |
|
1139 |
|
1140 |
def reduce_flag(flag): |
1141 |
@@ -89,13 +89,14 @@ def reduce_flags(the_list): |
1142 |
@rtype: list |
1143 |
@return absolute USE flags |
1144 |
""" |
1145 |
- r=[] |
1146 |
+ reduced = [] |
1147 |
for member in the_list: |
1148 |
- r.append(reduce_flag(member)) |
1149 |
- return r |
1150 |
+ reduced.append(reduce_flag(member)) |
1151 |
+ return reduced |
1152 |
|
1153 |
|
1154 |
-def filter_flags(use, use_expand_hidden, usemasked, useforced, settings=default_settings): |
1155 |
+def filter_flags(use, use_expand_hidden, usemasked, |
1156 |
+ useforced, settings=default_settings): |
1157 |
"""Filter function to remove hidden or otherwise not normally |
1158 |
visible USE flags from a list. |
1159 |
|
1160 |
@@ -114,21 +115,21 @@ def filter_flags(use, use_expand_hidden, usemasked, useforced, settings=default_ |
1161 |
""" |
1162 |
# clean out some environment flags, since they will most probably |
1163 |
# be confusing for the user |
1164 |
- for f in use_expand_hidden: |
1165 |
- f=f.lower() + "_" |
1166 |
- for x in use: |
1167 |
- if f in x: |
1168 |
- use.remove(x) |
1169 |
+ for flag in use_expand_hidden: |
1170 |
+ flag = flag.lower() + "_" |
1171 |
+ for expander in use: |
1172 |
+ if flag in expander: |
1173 |
+ use.remove(expander) |
1174 |
# clean out any arch's |
1175 |
archlist = settings.settings["PORTAGE_ARCHLIST"].split() |
1176 |
- for a in use[:]: |
1177 |
- if a in archlist: |
1178 |
- use.remove(a) |
1179 |
+ for key in use[:]: |
1180 |
+ if key in archlist: |
1181 |
+ use.remove(key) |
1182 |
# dbl check if any from usemasked or useforced are still there |
1183 |
masked = usemasked + useforced |
1184 |
- for a in use[:]: |
1185 |
- if a in masked: |
1186 |
- use.remove(a) |
1187 |
+ for flag in use[:]: |
1188 |
+ if flag in masked: |
1189 |
+ use.remove(flag) |
1190 |
return use |
1191 |
|
1192 |
|
1193 |
@@ -181,11 +182,15 @@ def get_flags(cpv, final_setting=False, root=None, settings=default_settings): |
1194 |
@rtype: list or list, list |
1195 |
@return IUSE or IUSE, final_flags |
1196 |
""" |
1197 |
- final_use, use_expand_hidden, usemasked, useforced = get_all_cpv_use(cpv, root, settings) |
1198 |
- iuse_flags = filter_flags(get_iuse(cpv), use_expand_hidden, usemasked, useforced, settings) |
1199 |
- #flags = filter_flags(use_flags, use_expand_hidden, usemasked, useforced, settings) |
1200 |
+ (final_use, use_expand_hidden, usemasked, useforced) = \ |
1201 |
+ get_all_cpv_use(cpv, root, settings) |
1202 |
+ iuse_flags = filter_flags(get_iuse(cpv), use_expand_hidden, |
1203 |
+ usemasked, useforced, settings) |
1204 |
+ #flags = filter_flags(use_flags, use_expand_hidden, |
1205 |
+ #usemasked, useforced, settings) |
1206 |
if final_setting: |
1207 |
- final_flags = filter_flags(final_use, use_expand_hidden, usemasked, useforced, settings) |
1208 |
+ final_flags = filter_flags(final_use, use_expand_hidden, |
1209 |
+ usemasked, useforced, settings) |
1210 |
return iuse_flags, final_flags |
1211 |
return iuse_flags |
1212 |
|
1213 |
@@ -204,22 +209,23 @@ def get_use_flag_dict(portdir): |
1214 |
|
1215 |
# process standard use flags |
1216 |
|
1217 |
- List = portage.grabfile(portdir + '/profiles/use.desc') |
1218 |
- for item in List: |
1219 |
+ _list = portage.grabfile(portdir + '/profiles/use.desc') |
1220 |
+ for item in _list: |
1221 |
index = item.find(' - ') |
1222 |
use_dict[item[:index].strip().lower()] = ['global', '', item[index+3:]] |
1223 |
|
1224 |
# process local (package specific) use flags |
1225 |
|
1226 |
- List = portage.grabfile(portdir + '/profiles/use.local.desc') |
1227 |
- for item in List: |
1228 |
+ _list = portage.grabfile(portdir + '/profiles/use.local.desc') |
1229 |
+ for item in _list: |
1230 |
index = item.find(' - ') |
1231 |
data = item[:index].lower().split(':') |
1232 |
- try: # got an error once starting porthole==> added code to catch it, but it works again??? |
1233 |
+ try: |
1234 |
use_dict[data[1].strip()] = ['local', data[0].strip(), item[index+3:]] |
1235 |
except: |
1236 |
pass |
1237 |
- #debug.dprint("FLAG: get_use_flag_dict(); error in index??? data[0].strip, item[index:]") |
1238 |
+ #debug.dprint("FLAG: get_use_flag_dict();" |
1239 |
+ #"error in index??? data[0].strip, item[index:]") |
1240 |
#debug.dprint(data[0].strip()) |
1241 |
#debug.dprint(item[index:]) |
1242 |
return use_dict |
1243 |
|
1244 |
diff --git a/pym/portage/api/properties.py b/pym/portage/api/properties.py |
1245 |
index b885505..f282e76 100644 |
1246 |
--- a/pym/portage/api/properties.py |
1247 |
+++ b/pym/portage/api/properties.py |
1248 |
@@ -20,8 +20,10 @@ class Properties(object): |
1249 |
self._dict = _dict |
1250 |
|
1251 |
def __getattr__(self, name): |
1252 |
- try: return self._dict[name] |
1253 |
- except: return '' |
1254 |
+ try: |
1255 |
+ return self._dict[name] |
1256 |
+ except: |
1257 |
+ return '' |
1258 |
|
1259 |
def __str__(self): |
1260 |
txt = [] |
1261 |
@@ -30,9 +32,11 @@ class Properties(object): |
1262 |
return '\n'.join(txt) |
1263 |
|
1264 |
def keys(self): |
1265 |
+ """Returns the availabel dictionary keys""" |
1266 |
return self.__slots__[:-3] |
1267 |
|
1268 |
def get(self, name): |
1269 |
+ """Returns the value for the dictionary key""" |
1270 |
return getattr(self, name) |
1271 |
|
1272 |
def get_slot(self): |
1273 |
|
1274 |
diff --git a/pym/portage/api/settings.py b/pym/portage/api/settings.py |
1275 |
index ca81908..250917e 100644 |
1276 |
--- a/pym/portage/api/settings.py |
1277 |
+++ b/pym/portage/api/settings.py |
1278 |
@@ -21,6 +21,14 @@ class PortageSettings: |
1279 |
# declare some globals |
1280 |
self.portdir = None |
1281 |
self.portdir_overlay = None |
1282 |
+ self.portdb = None |
1283 |
+ self.vardb = None |
1284 |
+ self.trees = None |
1285 |
+ self.root_config = None |
1286 |
+ self.bindb = None |
1287 |
+ self.configured_roots = None |
1288 |
+ self.arch = None |
1289 |
+ self.mtimedb = None |
1290 |
self.ACCEPT_KEYWORDS = None |
1291 |
self.user_config_dir = None |
1292 |
self._world = None |
1293 |
@@ -28,6 +36,7 @@ class PortageSettings: |
1294 |
self.virtuals = None |
1295 |
self.keys = None |
1296 |
self.UseFlagDict = None |
1297 |
+ self.settings = None |
1298 |
if config_root is None: |
1299 |
self.reset() |
1300 |
else: |
1301 |
@@ -67,38 +76,6 @@ class PortageSettings: |
1302 |
return |
1303 |
|
1304 |
|
1305 |
- def _load_config(trees=None, config_root=None): |
1306 |
- kwargs = {} |
1307 |
- if config_root: |
1308 |
- env_fetch = (("target_root", "ROOT")) |
1309 |
- kwargs['config_root'] = config_root |
1310 |
- else: |
1311 |
- env_fetch = (("config_root", "PORTAGE_CONFIGROOT"), ("target_root", "ROOT")) |
1312 |
- for k, envvar in env_fetch: |
1313 |
- v = os.environ.get(envvar, None) |
1314 |
- if v and v.strip(): |
1315 |
- kwargs[k] = v |
1316 |
- trees = portage.create_trees(trees=trees, **kwargs) |
1317 |
- |
1318 |
- for root, root_trees in trees.items(): |
1319 |
- settings = root_trees["vartree"].settings |
1320 |
- settings._init_dirs() |
1321 |
- setconfig = load_default_config(settings, root_trees) |
1322 |
- root_trees["root_config"] = RootConfig(settings, root_trees, setconfig) |
1323 |
- |
1324 |
- settings = trees["/"]["vartree"].settings |
1325 |
- |
1326 |
- for myroot in trees: |
1327 |
- if myroot != "/": |
1328 |
- settings = trees[myroot]["vartree"].settings |
1329 |
- break |
1330 |
- |
1331 |
- mtimedbfile = os.path.join(settings['EROOT'], portage.CACHE_PATH, "mtimedb") |
1332 |
- mtimedb = portage.MtimeDB(mtimedbfile) |
1333 |
- portage.output._init(config_root=settings['PORTAGE_CONFIGROOT']) |
1334 |
- return settings, trees, mtimedb |
1335 |
- |
1336 |
- |
1337 |
def _load_dbapis(self): |
1338 |
"""handles loading all the trees dbapi's""" |
1339 |
self.portdb, self.vardb, self.bindb = {}, {}, {} |
1340 |
@@ -121,11 +98,12 @@ class PortageSettings: |
1341 |
#print("SETTINGS: reset_world();") |
1342 |
world = [] |
1343 |
try: |
1344 |
- file = open(os.path.join(portage.root, portage.WORLD_FILE), "r") |
1345 |
- world = file.read().split() |
1346 |
- file.close() |
1347 |
+ _file = open(os.path.join(portage.root, portage.WORLD_FILE), "r") |
1348 |
+ world = _file.read().split() |
1349 |
+ _file.close() |
1350 |
except: |
1351 |
- print("SETTINGS: get_world(); Failure to locate file: '%s'" %portage.WORLD_FILE) |
1352 |
+ print("SETTINGS: get_world(); Failure to locate file: '%s'" |
1353 |
+ %portage.WORLD_FILE) |
1354 |
return False |
1355 |
self._world = world |
1356 |
return True |
1357 |
@@ -156,7 +134,7 @@ class PortageSettings: |
1358 |
default_settings = PortageSettings() |
1359 |
|
1360 |
|
1361 |
-def reload_portage(): |
1362 |
+def reload_portage(settings=None): |
1363 |
"""Convienence function to re-import portage after a portage update. |
1364 |
Caution, it may not always work correctly due to python caching if |
1365 |
program files are added/deleted between versions. In those cases the |
1366 |
@@ -168,5 +146,8 @@ def reload_portage(): |
1367 |
except ImportError: |
1368 |
return False |
1369 |
#print("SETTINGS: new portage version = " + portage.VERSION) |
1370 |
- settings.reset() |
1371 |
+ if settings is None: |
1372 |
+ default_settings.reset() |
1373 |
+ else: |
1374 |
+ settings.reset() |
1375 |
return True |