Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/openpyxl/descriptors/__init__.py: 100%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

43 statements  

1# Copyright (c) 2010-2024 openpyxl 

2 

3from .base import * 

4from .sequence import Sequence 

5 

6 

7class MetaStrict(type): 

8 

9 def __new__(cls, clsname, bases, methods): 

10 for k, v in methods.items(): 

11 if isinstance(v, Descriptor): 

12 v.name = k 

13 return type.__new__(cls, clsname, bases, methods) 

14 

15 

16class Strict(metaclass=MetaStrict): 

17 

18 pass 

19 

20 

21class MetaSerialisable(type): 

22 

23 def __new__(cls, clsname, bases, methods): 

24 attrs = [] 

25 nested = [] 

26 elements = [] 

27 namespaced = [] 

28 for k, v in methods.items(): 

29 if isinstance(v, Descriptor): 

30 ns= getattr(v, 'namespace', None) 

31 if ns: 

32 namespaced.append((k, "{%s}%s" % (ns, k))) 

33 if getattr(v, 'nested', False): 

34 nested.append(k) 

35 elements.append(k) 

36 elif isinstance(v, Sequence): 

37 elements.append(k) 

38 elif isinstance(v, Typed): 

39 if hasattr(v.expected_type, 'to_tree'): 

40 elements.append(k) 

41 elif isinstance(v.expected_type, tuple): 

42 if any((hasattr(el, "to_tree") for el in v.expected_type)): 

43 # don't bind elements as attrs 

44 continue 

45 else: 

46 attrs.append(k) 

47 else: 

48 if not isinstance(v, Alias): 

49 attrs.append(k) 

50 

51 if methods.get('__attrs__') is None: 

52 methods['__attrs__'] = tuple(attrs) 

53 methods['__namespaced__'] = tuple(namespaced) 

54 if methods.get('__nested__') is None: 

55 methods['__nested__'] = tuple(sorted(nested)) 

56 if methods.get('__elements__') is None: 

57 methods['__elements__'] = tuple(sorted(elements)) 

58 return MetaStrict.__new__(cls, clsname, bases, methods)