Gentoo Archives: gentoo-commits

From: Brian Dolbec <brian.dolbec@×××××.com>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:public_api commit in: pym/portage/api/
Date: Sat, 28 May 2011 06:53:58
Message-Id: 7f1c35149aa401e83828e27716d35c3ec2b13108.dol-sen@gentoo
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