_ScopeProxy   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 32
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 6
Bugs 0 Features 0
Metric Value
wmc 8
c 6
b 0
f 0
dl 0
loc 32
ccs 22
cts 22
cp 1
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __enter__() 0 2 1
A __init__() 0 3 1
A __setattr__() 0 2 1
A __delattr__() 0 2 1
A __exit__() 0 2 1
A __getattribute__() 0 7 2
A __dir__() 0 2 1
1
"""Base class for Namespace proxies in class creation."""
2
3 6
import weakref
4
5 6
from . import ops
6 6
from .proxy import _Proxy
7
8 6
_NAMESPACES = weakref.WeakKeyDictionary()
9 6
_OWNERS = weakref.WeakKeyDictionary()
10
11
12 6
def namespace(self):
13
    """Return the associated Namespace."""
14 6
    return _owner(self).proxies[self]
15
16
17 6
def _owner(self):
18
    """Return the associated scope."""
19 6
    return _OWNERS[self]
20
21
22 6
class _ScopeProxy(_Proxy):
23
24
    """Proxy object for manipulating namespaces during class creation."""
25
26 6
    __slots__ = ('__weakref__',)
27
28 6
    def __init__(self, dct, owner):
29 6
        _OWNERS[self] = owner
30 6
        owner.proxies[self] = dct
31
32 6
    def __dir__(self):
33 6
        return namespace(self)
34
35 6
    def __getattribute__(self, name):
36 6
        dct = namespace(self)
37 6
        try:
38 6
            value = dct[name]
39 6
        except KeyError:
40 6
            raise AttributeError(name)
41 6
        return _owner(self).wrap(value)
42
43 6
    def __setattr__(self, name, value):
44 6
        namespace(self)[name] = value
45
46 6
    def __delattr__(self, name):
47 6
        ops.delete(namespace(self), name)
48
49 6
    def __enter__(self):
50 6
        return namespace(self).__enter__()
51
52 6
    def __exit__(self, exc_type, exc_value, traceback):
53
        return namespace(self).__exit__(exc_type, exc_value, traceback)
54