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
« 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######################################################################
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"""
15from dataclasses import dataclass, field, InitVar
16from P4OO._Base import _P4OOBase
17from P4OO._OrderedSet import OrderedSet
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.
25 """
26# iterable: list = field(default_factory=list, compare=False)
27 iterable: InitVar[list] = field(default=None)
29# def __init__(self, iterable=None, **kwargs):
30# _P4OOBase.__init__(self)
31# OrderedSet.__init__(self, iterable)
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)
40# TODO - document this
41 def addObjects(self, objectsToAdd):
43 oldCount = len(self)
45 self |= objectsToAdd
47 newCount = len(self)
48 return newCount - oldCount
50# TODO - document this
51 def delObjects(self, objectList):
52 oldCount = len(self)
54 for item in objectList:
55 self.discard(item)
57 newCount = len(self)
58 return newCount - oldCount
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 """
66 return [item._uniqueID() for item in self]
68 def _query(self, setObjType=None, **kwargs):
69 """ _query() is an instance method, but returns another, possibly
70 unrelated object.
72 Where an instance is not already available, query can be
73 called as follows:
75 p4Changes = P4OO.ChangeSet.ChangeSet().query(
76 {"files": changeFileRevRange, "maxresults": 1})
78 Instantiating a _Set object just for this purpose is cheap,
79 but is not free. So sorry.
80 """
82 p4ConnObj = self._getP4Connection()
83 return p4ConnObj.runCommand(setObjType, **kwargs)