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

25 statements  

« prev     ^ index     » next       coverage.py v7.4.1, created at 2024-12-16 19:01 +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, init=False) 

20class _P4OOSet(OrderedSet, _P4OOBase): 

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

22 objects. 

23 

24 """ 

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

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

27 

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

29# _P4OOBase.__init__(self) 

30# OrderedSet.__init__(self, iterable) 

31 

32 def __post_init__(self, iterable): 

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

34 repr and operators 

35 """ 

36# _P4OOBase.__init__(self) 

37 OrderedSet.__init__(self, iterable) 

38 

39# TODO - document this 

40 def addObjects(self, objectsToAdd): 

41 

42 oldCount = len(self) 

43 

44 self |= objectsToAdd 

45 

46 newCount = len(self) 

47 return newCount - oldCount 

48 

49# TODO - document this 

50 def delObjects(self, objectList): 

51 oldCount = len(self) 

52 

53 for item in objectList: 

54 self.discard(item) 

55 

56 newCount = len(self) 

57 return newCount - oldCount 

58 

59# TODO - document this 

60 def listObjectIDs(self): 

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

62 names of the objects. 

63 """ 

64 

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

66 

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

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

69 unrelated object. 

70 

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

72 called as follows: 

73 

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

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

76 

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

78 but is not free. So sorry. 

79 """ 

80 

81 p4ConnObj = self._getP4Connection() 

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