Coverage for src/P4OO/_Set.py: 100%

25 statements  

« prev     ^ index     » next       coverage.py v7.4.1, created at 2024-09-07 17:17 +0000

1###################################################################### 

2# Copyright (c)2011-2012,2024 David L. Armstrong. 

3# 

4# P4OO._Set.py 

5# 

6###################################################################### 

7 

8""" 

9 _P4OOSet objects are primarily used for querying. We want to 

10 encourage use cases that take advantage of set operations operating 

11 on multiple objects at once, rather than iterating through individual 

12 objects. 

13""" 

14 

15from dataclasses import dataclass, field, InitVar 

16from P4OO._Base import _P4OOBase 

17from P4OO._OrderedSet import OrderedSet 

18 

19#@dataclass(repr=False, eq=False, order=False) 

20@dataclass(repr=False, eq=False, order=False, init=False) 

21class _P4OOSet(OrderedSet, _P4OOBase): 

22 """ _P4OOSet provides common behaviors for grouping of all P4OO Spec-based 

23 objects. 

24 

25 """ 

26# iterable: list = field(default_factory=list, compare=False) 

27 iterable: InitVar[list] = field(default=None) 

28 

29# def __init__(self, iterable=None, **kwargs): 

30# _P4OOBase.__init__(self) 

31# OrderedSet.__init__(self, iterable) 

32 

33 def __post_init__(self, iterable): 

34 """ We want _P4OOBase-like attribute handling, but Orderedset 

35 repr and operators 

36 """ 

37# _P4OOBase.__init__(self) 

38 OrderedSet.__init__(self, iterable) 

39 

40# TODO - document this 

41 def addObjects(self, objectsToAdd): 

42 

43 oldCount = len(self) 

44 

45 self |= objectsToAdd 

46 

47 newCount = len(self) 

48 return newCount - oldCount 

49 

50# TODO - document this 

51 def delObjects(self, objectList): 

52 oldCount = len(self) 

53 

54 for item in objectList: 

55 self.discard(item) 

56 

57 newCount = len(self) 

58 return newCount - oldCount 

59 

60# TODO - document this 

61 def listObjectIDs(self): 

62 """ Method to help convert a set of objects into a list of the 

63 names of the objects. 

64 """ 

65 

66 return [item._uniqueID() for item in self] 

67 

68 def _query(self, setObjType=None, **kwargs): 

69 """ _query() is an instance method, but returns another, possibly 

70 unrelated object. 

71 

72 Where an instance is not already available, query can be 

73 called as follows: 

74 

75 p4Changes = P4OO.ChangeSet.ChangeSet().query( 

76 {"files": changeFileRevRange, "maxresults": 1}) 

77 

78 Instantiating a _Set object just for this purpose is cheap, 

79 but is not free. So sorry. 

80 """ 

81 

82 p4ConnObj = self._getP4Connection() 

83 return p4ConnObj.runCommand(setObjType, **kwargs)