Index: .gitignore =================================================================== diff -u -rc6596d42d995bed3789849bd85c83da5a3837fac -rd66e924d16e5b5f62570f57a483acd3f10c50dcc --- .gitignore (.../.gitignore) (revision c6596d42d995bed3789849bd85c83da5a3837fac) +++ .gitignore (.../.gitignore) (revision d66e924d16e5b5f62570f57a483acd3f10c50dcc) @@ -20,5 +20,6 @@ docs/source/dialin.protocols.rst docs/source/dialin.rst docs/source/dialin.utils.rst +docs/source/dialin.squish.rst docs/source/modules.rst Index: dialin/dg/valves.py =================================================================== diff -u -re7bfc1b61892db0518f21a1bfde98e0400e83ab3 -rd66e924d16e5b5f62570f57a483acd3f10c50dcc --- dialin/dg/valves.py (.../valves.py) (revision e7bfc1b61892db0518f21a1bfde98e0400e83ab3) +++ dialin/dg/valves.py (.../valves.py) (revision d66e924d16e5b5f62570f57a483acd3f10c50dcc) @@ -123,6 +123,56 @@ self.valve_state_VPD.get("state", None) ] + def sort_by_id(self, observation): + """ + Converts a published dictionary of valve state information to an ordered list + of tuples. + + For example: + >>> dg = DG() + >>> observation = {'datetime': datetime.datetime(2020, 7, 13, 10, 43, 27, 433357), + 'valve_state_VBF': {'id': 5, 'state': True}, + 'valve_state_VDR': {'id': 7, 'state': True}, + 'valve_state_VPD': {'id': 12, 'state': True}, + 'valve_state_VPI': {'id': 8, 'state': True}, + 'valve_state_VPO': {'id': 4, 'state': True}, + 'valve_state_VR1': {'id': 10, 'state': True}, + 'valve_state_VR2': {'id': 11, 'state': True}, + 'valve_state_VRC': {'id': 6, 'state': True}, + 'valve_state_VRD': {'id': 2, 'state': True}, + 'valve_state_VRF': {'id': 0, 'state': True}, + 'valve_state_VRI': {'id': 1, 'state': True}, + 'valve_state_VRO': {'id': 3, 'state': True}, + 'valve_state_VSP': {'id': 9, 'state': True}, + 'valve_states_all': 8191} + >>> print(dg.valves.sort_by_id(observation)) + ('valve_state_VRF', 0, True) + ('valve_state_VRI', 1, True) + ('valve_state_VRD', 2, True) + ('valve_state_VRO', 3, True) + ('valve_state_VPO', 4, True) + ('valve_state_VBF', 5, True) + ('valve_state_VRC', 6, True) + ('valve_state_VDR', 7, True) + ('valve_state_VPI', 8, True) + ('valve_state_VSP', 9, True) + ('valve_state_VR1', 10, True) + ('valve_state_VR2', 11, True) + ('valve_state_VPD', 12, True) + + @param observation: dictionary of the observed valve states + @return: a list of tuples of the valve states + """ + + result = [] + for key, value in observation.items(): + if isinstance(value, dict): + result.append((key, value.get("id", None), value.get("state", None))) + + result = sorted(result, key=lambda each: each[1]) + return result + + def _binary_to_valve_state(self, binary): """ @param binary: binary value Index: tests/unit_tests.py =================================================================== diff -u --- tests/unit_tests.py (revision 0) +++ tests/unit_tests.py (revision d66e924d16e5b5f62570f57a483acd3f10c50dcc) @@ -0,0 +1,60 @@ +########################################################################### +# +# Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +# +# THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +# WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +# +# @file test_imports.py +# +# @date 29-Apr-2020 +# @author P. Lucia +# +# @brief Tests imports of all available modules +# +############################################################################ +import unittest +import sys +sys.path.append("..") +from datetime import datetime +from dialin.dg.dialysate_generator import DG + + +class Test(unittest.TestCase): + + # @unittest.skip("Skipping test_imports") + def test_dg_valves_conversion(self): + dg = DG() + observation = {'datetime': datetime(2020, 7, 13, 10, 43, 27, 433357), + 'valve_state_VBF': {'id': 5, 'state': True}, + 'valve_state_VDR': {'id': 7, 'state': True}, + 'valve_state_VPD': {'id': 12, 'state': True}, + 'valve_state_VPI': {'id': 8, 'state': True}, + 'valve_state_VPO': {'id': 4, 'state': True}, + 'valve_state_VR1': {'id': 10, 'state': True}, + 'valve_state_VR2': {'id': 11, 'state': True}, + 'valve_state_VRC': {'id': 6, 'state': True}, + 'valve_state_VRD': {'id': 2, 'state': True}, + 'valve_state_VRF': {'id': 0, 'state': True}, + 'valve_state_VRI': {'id': 1, 'state': True}, + 'valve_state_VRO': {'id': 3, 'state': True}, + 'valve_state_VSP': {'id': 9, 'state': True}, + 'valve_states_all': 8191} + + assert(dg.valves.sort_by_id(observation) == [('valve_state_VRF', 0, True), + ('valve_state_VRI', 1, True), + ('valve_state_VRD', 2, True), + ('valve_state_VRO', 3, True), + ('valve_state_VPO', 4, True), + ('valve_state_VBF', 5, True), + ('valve_state_VRC', 6, True), + ('valve_state_VDR', 7, True), + ('valve_state_VPI', 8, True), + ('valve_state_VSP', 9, True), + ('valve_state_VR1', 10, True), + ('valve_state_VR2', 11, True), + ('valve_state_VPD', 12, True)]) + + +if __name__ == '__main__': + unittest.main(verbosity=2)