Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r13696 - main/trunk/pym/_emerge
Date: Thu, 25 Jun 2009 22:00:00
Message-Id: E1MJwz8-0001jt-MA@stork.gentoo.org
1 Author: zmedico
2 Date: 2009-06-25 21:59:58 +0000 (Thu, 25 Jun 2009)
3 New Revision: 13696
4
5 Modified:
6 main/trunk/pym/_emerge/Package.py
7 Log:
8 Use @property instead of __getattribute__ to implement lazy Package.iuse.regex
9 initialization.
10
11
12 Modified: main/trunk/pym/_emerge/Package.py
13 ===================================================================
14 --- main/trunk/pym/_emerge/Package.py 2009-06-25 21:24:30 UTC (rev 13695)
15 +++ main/trunk/pym/_emerge/Package.py 2009-06-25 21:59:58 UTC (rev 13696)
16 @@ -72,7 +72,9 @@
17
18 class _iuse(object):
19
20 - __slots__ = ("__weakref__", "all", "enabled", "disabled", "iuse_implicit", "regex", "tokens")
21 + __slots__ = ("__weakref__", "all", "enabled", "disabled",
22 + "iuse_implicit", "tokens") + \
23 + ('_regex',)
24
25 def __init__(self, tokens, iuse_implicit):
26 self.tokens = tuple(tokens)
27 @@ -92,20 +94,23 @@
28 self.disabled = frozenset(disabled)
29 self.all = frozenset(chain(enabled, disabled, other))
30
31 - def __getattribute__(self, name):
32 - if name == "regex":
33 - try:
34 - return object.__getattribute__(self, "regex")
35 - except AttributeError:
36 - all = object.__getattribute__(self, "all")
37 - iuse_implicit = object.__getattribute__(self, "iuse_implicit")
38 - # Escape anything except ".*" which is supposed
39 - # to pass through from _get_implicit_iuse()
40 - regex = (re.escape(x) for x in chain(all, iuse_implicit))
41 - regex = "^(%s)$" % "|".join(regex)
42 - regex = regex.replace("\\.\\*", ".*")
43 - self.regex = re.compile(regex)
44 - return object.__getattribute__(self, name)
45 + @property
46 + def regex(self):
47 + """
48 + @returns: A regular expression that matches valid USE values which
49 + may be specified in USE dependencies.
50 + """
51 + try:
52 + return self._regex
53 + except AttributeError:
54 + # Escape anything except ".*" which is supposed
55 + # to pass through from _get_implicit_iuse()
56 + regex = (re.escape(x) for x in \
57 + chain(self.all, self.iuse_implicit))
58 + regex = "^(%s)$" % "|".join(regex)
59 + regex = re.compile(regex.replace("\\.\\*", ".*"))
60 + self._regex = regex
61 + return regex
62
63 def _get_hash_key(self):
64 hash_key = getattr(self, "_hash_key", None)