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
« 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######################################################################
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, init=False)
20class _P4OOSet(OrderedSet, _P4OOBase):
21 """ _P4OOSet provides common behaviors for grouping of all P4OO Spec-based
22 objects.
24 """
25# iterable: list = field(default_factory=list, compare=False)
26 iterable: InitVar[list] = field(default=None)
28# def __init__(self, iterable=None, **kwargs):
29# _P4OOBase.__init__(self)
30# OrderedSet.__init__(self, iterable)
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)
39# TODO - document this
40 def addObjects(self, objectsToAdd):
42 oldCount = len(self)
44 self |= objectsToAdd
46 newCount = len(self)
47 return newCount - oldCount
49# TODO - document this
50 def delObjects(self, objectList):
51 oldCount = len(self)
53 for item in objectList:
54 self.discard(item)
56 newCount = len(self)
57 return newCount - oldCount
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 """
65 return [item._uniqueID() for item in self]
67 def _query(self, setObjType=None, **kwargs):
68 """ _query() is an instance method, but returns another, possibly
69 unrelated object.
71 Where an instance is not already available, query can be
72 called as follows:
74 p4Changes = P4OO.ChangeSet.ChangeSet().query(
75 {"files": changeFileRevRange, "maxresults": 1})
77 Instantiating a _Set object just for this purpose is cheap,
78 but is not free. So sorry.
79 """
81 p4ConnObj = self._getP4Connection()
82 return p4ConnObj.runCommand(setObjType, **kwargs)