diff --git a/fdsreader/devc/device_collection.py b/fdsreader/devc/device_collection.py index e54f195..61c0893 100644 --- a/fdsreader/devc/device_collection.py +++ b/fdsreader/devc/device_collection.py @@ -1,4 +1,3 @@ - from typing import Iterable, Union, List from fdsreader.devc import Device @@ -6,8 +5,7 @@ class DeviceCollection(FDSDataCollection): - """Collection of :class:`Device` objects. Offers additional functionality for working on devices using pandas. - """ + """Collection of :class:`Device` objects. Offers additional functionality for working on devices using pandas.""" def __init__(self, *devices: Iterable[Device]): super().__init__(*devices) @@ -16,16 +14,32 @@ def __getitem__(self, key) -> Union[Device, List[Device]]: if type(key) == int: return self._elements[key] else: - return next(devc for devc in self._elements if (devc.id == key if type(devc) == Device else devc[0].id == key)) + return next( + devc + for devc in self._elements + if (devc.id == key if type(devc) == Device else devc[0].id == key) + ) def __contains__(self, value: Union[Device, str]): - id_matching = any((devc.id == value if type(devc) == Device else devc[0].id == value) for devc in self._elements) + id_matching = any( + (devc.id == value if type(devc) == Device else devc[0].id == value) + for devc in self._elements + ) return value in self._elements or id_matching + def clear_cache(self): + """Remove all data from the internal cache that has been loaded so far to free memory.""" + for devc in self._elements: + if type(devc) == Device: + devc.clear_cache() + elif type(devc) == list: + for list_devc in devc: + list_devc.clear_cache() + def to_pandas_dataframe(self): - """Returns a pandas DataFrame with device-IDs as column names and device data as column values. - """ + """Returns a pandas DataFrame with device-IDs as column names and device data as column values.""" import pandas as pd + data = dict() for devc in self: if type(devc) == Device: @@ -35,4 +49,3 @@ def to_pandas_dataframe(self): for i, list_devc in enumerate(devc): data[list_devc.id + "_" + str(i)] = list_devc.data return pd.DataFrame(data) - diff --git a/tests/acceptance_tests/test_devc.py b/tests/acceptance_tests/test_devc.py index 9a86a63..80d3bd0 100644 --- a/tests/acceptance_tests/test_devc.py +++ b/tests/acceptance_tests/test_devc.py @@ -1,6 +1,19 @@ +import os from fdsreader import Simulation +TEST_DIR = os.path.dirname(os.path.abspath(__file__)) + def test_devc(): - sim = Simulation("./steckler_data") + sim = Simulation(os.path.join(TEST_DIR, "../cases/steckler_data")) assert abs(sim.devices["TC_Door"][0].data - 23.58) < 1e-6 + + +def test_clear_cache_with_line_devices(): + """Test that clear_cache works with line DEVC devices (issue #104).""" + sim = Simulation(os.path.join(TEST_DIR, "../cases/devc_data")) + assert any(isinstance(d, list) for d in sim.devices), ( + "Test data should contain line devices" + ) + + sim.clear_cache()