1 |
Author: zmedico |
2 |
Date: 2009-09-29 20:00:57 +0000 (Tue, 29 Sep 2009) |
3 |
New Revision: 14463 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/Package.py |
7 |
Log: |
8 |
Revert the rest of r14280 since it seems that dict bypasses __getitem__ |
9 |
and/or __setitem__ too often. |
10 |
|
11 |
|
12 |
Modified: main/trunk/pym/_emerge/Package.py |
13 |
=================================================================== |
14 |
--- main/trunk/pym/_emerge/Package.py 2009-09-29 19:35:05 UTC (rev 14462) |
15 |
+++ main/trunk/pym/_emerge/Package.py 2009-09-29 20:00:57 UTC (rev 14463) |
16 |
@@ -6,6 +6,7 @@ |
17 |
import sys |
18 |
from itertools import chain |
19 |
import portage |
20 |
+from portage.cache.mappings import slot_dict_class |
21 |
from portage.dep import paren_reduce, use_reduce, \ |
22 |
paren_normalize, paren_enclose |
23 |
from _emerge.Task import Task |
24 |
@@ -156,7 +157,9 @@ |
25 |
_all_metadata_keys.update(Package.metadata_keys) |
26 |
_all_metadata_keys = frozenset(_all_metadata_keys) |
27 |
|
28 |
-class _PackageMetadataWrapper(dict): |
29 |
+_PackageMetadataWrapperBase = slot_dict_class(_all_metadata_keys) |
30 |
+ |
31 |
+class _PackageMetadataWrapper(_PackageMetadataWrapperBase): |
32 |
""" |
33 |
Detect metadata updates and synchronize Package attributes. |
34 |
""" |
35 |
@@ -168,7 +171,7 @@ |
36 |
['LICENSE', 'PROPERTIES', 'PROVIDE', 'RESTRICT',]) |
37 |
|
38 |
def __init__(self, pkg, metadata): |
39 |
- dict.__init__(self) |
40 |
+ _PackageMetadataWrapperBase.__init__(self) |
41 |
self._pkg = pkg |
42 |
if not pkg.built: |
43 |
# USE is lazy, but we want it to show up in self.keys(). |
44 |
@@ -176,30 +179,8 @@ |
45 |
|
46 |
self.update(metadata) |
47 |
|
48 |
- def update(self, *args, **kwargs): |
49 |
- """dict.update() bypasses __setitem__, so override it.""" |
50 |
- if len(args) > 1: |
51 |
- raise TypeError( |
52 |
- "expected at most 1 positional argument, got " + \ |
53 |
- repr(len(args))) |
54 |
- |
55 |
- other = None |
56 |
- if args: |
57 |
- other = args[0] |
58 |
- |
59 |
- if other is not None: |
60 |
- try: |
61 |
- i = other.items() |
62 |
- except AttributeError: |
63 |
- i = other |
64 |
- for k, v in i: |
65 |
- self[k] = v |
66 |
- |
67 |
- if kwargs: |
68 |
- self.update(kwargs) |
69 |
- |
70 |
def __getitem__(self, k): |
71 |
- v = dict.__getitem__(self, k) |
72 |
+ v = _PackageMetadataWrapperBase.__getitem__(self, k) |
73 |
if k in self._use_conditional_keys: |
74 |
if self._pkg.root_config.settings.local_config and '?' in v: |
75 |
try: |
76 |
@@ -224,7 +205,7 @@ |
77 |
return v |
78 |
|
79 |
def __setitem__(self, k, v): |
80 |
- dict.__setitem__(self, k, v) |
81 |
+ _PackageMetadataWrapperBase.__setitem__(self, k, v) |
82 |
if k in self._wrapped_keys: |
83 |
getattr(self, "_set_" + k.lower())(k, v) |
84 |
elif k in self._use_conditional_keys: |