start implementing property layering
This commit is contained in:
parent
b3a5a36d9c
commit
885d02ceca
@ -119,3 +119,25 @@ class PropertyManager(object):
|
|||||||
if p.getValue() is None:
|
if p.getValue() is None:
|
||||||
p.setValue(other_pm[key])
|
p.setValue(other_pm[key])
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|
||||||
|
class PropertyLayers(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.layers = []
|
||||||
|
|
||||||
|
def addLayer(self, priority: int, pm: PropertyManager):
|
||||||
|
"""
|
||||||
|
highest priority = 0
|
||||||
|
"""
|
||||||
|
self.layers.append({"priority": priority, "props": pm})
|
||||||
|
|
||||||
|
def removeLayer(self, pm: PropertyManager):
|
||||||
|
for layer in self.layers:
|
||||||
|
if layer["props"] == pm:
|
||||||
|
self.layers.remove(layer)
|
||||||
|
|
||||||
|
def __getitem__(self, item):
|
||||||
|
layers = [la["props"] for la in sorted(self.layers, key=lambda l: l["priority"])]
|
||||||
|
for m in layers:
|
||||||
|
if item in m:
|
||||||
|
return m[item]
|
43
test/property/test_property_overlay.py
Normal file
43
test/property/test_property_overlay.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
from unittest import TestCase
|
||||||
|
from unittest.mock import Mock
|
||||||
|
from owrx.property import PropertyManager, PropertyLayers
|
||||||
|
|
||||||
|
|
||||||
|
class TestPropertyMock(TestCase):
|
||||||
|
def testLayer(self):
|
||||||
|
om = PropertyLayers()
|
||||||
|
pm = PropertyManager()
|
||||||
|
pm["testkey"] = "testvalue"
|
||||||
|
om.addLayer(1, pm)
|
||||||
|
self.assertEqual(om["testkey"], "testvalue")
|
||||||
|
|
||||||
|
def testHighPriority(self):
|
||||||
|
om = PropertyLayers()
|
||||||
|
low_pm = PropertyManager()
|
||||||
|
high_pm = PropertyManager()
|
||||||
|
low_pm["testkey"] = "low value"
|
||||||
|
high_pm["testkey"] = "high value"
|
||||||
|
om.addLayer(1, low_pm)
|
||||||
|
om.addLayer(0, high_pm)
|
||||||
|
self.assertEqual(om["testkey"], "high value")
|
||||||
|
|
||||||
|
def testPriorityFallback(self):
|
||||||
|
om = PropertyLayers()
|
||||||
|
low_pm = PropertyManager()
|
||||||
|
high_pm = PropertyManager()
|
||||||
|
low_pm["testkey"] = "low value"
|
||||||
|
om.addLayer(1, low_pm)
|
||||||
|
om.addLayer(0, high_pm)
|
||||||
|
self.assertEqual(om["testkey"], "low value")
|
||||||
|
|
||||||
|
def testLayerRemoval(self):
|
||||||
|
om = PropertyLayers()
|
||||||
|
low_pm = PropertyManager()
|
||||||
|
high_pm = PropertyManager()
|
||||||
|
low_pm["testkey"] = "low value"
|
||||||
|
high_pm["testkey"] = "high value"
|
||||||
|
om.addLayer(1, low_pm)
|
||||||
|
om.addLayer(0, high_pm)
|
||||||
|
self.assertEqual(om["testkey"], "high value")
|
||||||
|
om.removeLayer(high_pm)
|
||||||
|
self.assertEqual(om["testkey"], "low value")
|
Loading…
Reference in New Issue
Block a user