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) |