def _read_one_interface_xml(p_interface_element): l_interface_obj = NodeInterfaceData() XmlConfigTools.read_base_object_xml(l_interface_obj, p_interface_element) l_interface_obj.MacAddress = PutGetXML.get_text_from_xml(p_interface_element, 'MacAddress') l_interface_obj.V4Address = PutGetXML.get_text_from_xml(p_interface_element, 'IPv4Address') l_interface_obj.V6Address = PutGetXML.get_text_from_xml(p_interface_element, 'IPv6Address') return l_interface_obj
def read_one_room(p_room_element): l_room_obj = RoomData() XmlConfigTools.read_base_object_xml(l_room_obj, p_room_element) l_room_obj.Comment = PutGetXML.get_text_from_xml(p_room_element, 'Comment') l_room_obj.Corner = PutGetXML.get_text_from_xml(p_room_element, 'Corner') l_room_obj.Floor = PutGetXML.get_text_from_xml(p_room_element, 'Floor', '1') l_room_obj.Size = PutGetXML.get_text_from_xml(p_room_element, 'Size') return l_room_obj
def test_02_BaseObject(self): """Write Base Object XML w/ NO UUID """ l_base_obj = CoreLightingData() XmlConfigTools.read_base_object_xml(l_base_obj, self.m_xml.light) l_base_obj.Key = 44 l_xml = XmlConfigTools.write_base_object_xml('Light', l_base_obj, no_uuid = True) print(PrettyFormatAny.form(l_xml, 'XML')) self.assertEqual(l_xml.attrib['Name'], 'Insteon Light') self.assertEqual(l_xml.attrib['Key'], '44')
def test_02_BaseObject(self): """Write Base Object XML w/ NO UUID """ l_base_obj = CoreLightingData() XmlConfigTools.read_base_object_xml(l_base_obj, self.m_xml.light) l_base_obj.Key = 44 l_xml = XmlConfigTools.write_base_object_xml('Light', l_base_obj) print(PrettyFormatAny.form(l_xml, 'XML')) self.assertEqual(l_xml.attrib['Name'], TESTING_LIGHT_NAME_0) self.assertEqual(l_xml.attrib['Key'], '44')
def _read_one_login(p_xml): """ @param p_xml: is the element of one login """ l_obj = LoginData() XmlConfigTools.read_base_object_xml(l_obj, p_xml) l_obj.LoginFullName = PutGetXML.get_text_from_xml(p_xml, 'FullName') l_obj.LoginPasswordCurrent = PutGetXML.get_text_from_xml(p_xml, 'Password') l_obj.LoginRole = PutGetXML.get_text_from_xml(p_xml, 'Role') return l_obj
def _read_one_zone(p_xml): """ @param p_xml: XML information for one Zone. @return: an IrrigationZone object filled in with data from the XML passed in """ l_obj = IrrigationZoneData() XmlConfigTools.read_base_object_xml(l_obj, p_xml) l_obj.Comment = PutGetXML.get_text_from_xml(p_xml, 'Comment') l_obj.Duration = PutGetXML.get_int_from_xml(p_xml, 'Duration', 0) # Expand with much more control data return l_obj
def _read_one_login(p_xml): """ @param p_xml: is the element of one login """ l_obj = LoginData() XmlConfigTools.read_base_object_xml(l_obj, p_xml) l_obj.LoginFullName = PutGetXML.get_text_from_xml(p_xml, 'FullName') l_obj.LoginPasswordCurrent = PutGetXML.get_text_from_xml( p_xml, 'Password') l_obj.LoginRole = PutGetXML.get_text_from_xml(p_xml, 'Role') LOG.info('Loaded login "{}"'.format(l_obj.LoginFullName)) return l_obj
def test_01_BaseObject(self): """Write Base Object XML w/UUID """ l_base_obj = CoreLightingData() XmlConfigTools.read_base_object_xml(l_base_obj, self.m_xml.light) l_base_obj.Key = 43 l_uuid = '12345678-fedc-1111-ffff-aaBBccDDeeFF' l_base_obj.UUID = l_uuid l_xml = XmlConfigTools.write_base_object_xml('Light', l_base_obj) print(PrettyFormatAny.form(l_xml, 'XML')) self.assertEqual(l_xml.attrib['Name'], 'Insteon Light') self.assertEqual(l_xml.attrib['Key'], '43') self.assertEqual(l_xml.find('UUID').text, l_uuid)
def test_01_BaseObject(self): """Write Base Object XML w/UUID """ l_base_obj = CoreLightingData() XmlConfigTools.read_base_object_xml(l_base_obj, self.m_xml.light) l_base_obj.Key = 43 l_uuid = '12345678-fedc-1111-ffff-aaBBccDDeeFF' l_base_obj.UUID = l_uuid l_xml = XmlConfigTools.write_base_object_xml('Light', l_base_obj) print(PrettyFormatAny.form(l_xml, 'XML')) self.assertEqual(l_xml.attrib['Name'], TESTING_LIGHT_NAME_0) self.assertEqual(l_xml.attrib['Key'], '43') self.assertEqual(l_xml.find('UUID').text, l_uuid)
def _read_one_node_xml(p_node_xml): """ Read the existing XML file (if it exists) and get the node info. """ l_node_obj = NodeData() XmlConfigTools.read_base_object_xml(l_node_obj, p_node_xml) l_node_obj.ConnectionAddr_IPv4 = PutGetXML.get_text_from_xml(p_node_xml, 'ConnectionAddressV4') l_node_obj.ConnectionAddr_IPv6 = PutGetXML.get_text_from_xml(p_node_xml, 'ConnectionAddressV6') l_node_obj.NodeRole = PutGetXML.get_int_from_xml(p_node_xml, 'NodeRole') try: l_node_obj.NodeInterfaces = Xml._read_interfaces_xml(p_node_xml.find('InterfaceSection')) except AttributeError as e_err: LOG.error('ERROR OneNodeRead error {}'.format(e_err)) return l_node_obj
class E2_ReadEmpty(SetupMixin, unittest.TestCase): """ This tests the ConfigTools section """ def setUp(self): self.m_pyhouse_obj = SetupMixin.setUp(self, ET.fromstring(XML_EMPTY)) self.m_api = XmlConfigTools() def test_01_BaseObject(self): l_base_obj = CoreLightingData() self.m_api.read_base_object_xml(l_base_obj, self.m_xml.light) print(PrettyFormatAny.form(l_base_obj)) self.assertEqual(l_base_obj.Name, 'None') self.assertEqual(l_base_obj.Key, 0) self.assertEqual(l_base_obj.Active, False)
def _read_one_broker(p_xml): """ @param p_xml: XML information for one Broker. @return: an IrrigationZone object filled in with data from the XML passed in """ l_obj = MqttBrokerData() try: XmlConfigTools.read_base_object_xml(l_obj, p_xml) l_obj.BrokerAddress = PutGetXML.get_text_from_xml(p_xml, 'BrokerAddress') l_obj.BrokerPort = PutGetXML.get_int_from_xml(p_xml, 'BrokerPort') l_obj.UserName = PutGetXML.get_text_from_xml(p_xml, 'BrokerUser') l_obj.Password = PutGetXML.get_text_from_xml(p_xml, 'BrokerPassword') except Exception: pass return l_obj
class C4_ReadEmpty(SetupMixin, unittest.TestCase): """ This tests the ConfigTools section """ def setUp(self): self.m_pyhouse_obj = SetupMixin.setUp(self, ET.fromstring(xml_data.XML_EMPTY)) self.m_api = XmlConfigTools() def test_01_BaseObject(self): l_base_obj = CoreLightingData() self.m_api.read_base_object_xml(l_base_obj, self.m_xml.light) self.assertEqual(l_base_obj.Name, 'Missing Name') self.assertEqual(l_base_obj.Key, 0) self.assertEqual(l_base_obj.Active, False)
def write_computer_xml(p_pyhouse_obj): # p_pyhouse_obj.Computer.Name = platform.node() # p_pyhouse_obj.Computer.Key = 0 # p_pyhouse_obj.Computer.Active = True l_xml = XmlConfigTools.write_base_object_xml(COMPUTER_DIVISION, p_pyhouse_obj.Computer) return l_xml
def _write_one_node_xml(p_node_obj): l_entry = XmlConfigTools.write_base_object_xml('Node', p_node_obj) PutGetXML.put_text_element(l_entry, 'ConnectionAddressV4', p_node_obj.ConnectionAddr_IPv4) PutGetXML.put_text_element(l_entry, 'ConnectionAddressV6', p_node_obj.ConnectionAddr_IPv6) PutGetXML.put_int_element(l_entry, 'NodeRole', p_node_obj.NodeRole) l_entry.append(Xml._write_interfaces_xml(p_node_obj.NodeInterfaces)) return l_entry
def write_one_room(p_room_object): l_entry = XmlConfigTools.write_base_object_xml('Room', p_room_object) PutGetXML.put_text_element(l_entry, 'Comment', p_room_object.Comment) PutGetXML.put_text_element(l_entry, 'Corner', p_room_object.Corner) PutGetXML.put_text_element(l_entry, 'Floor', p_room_object.Floor) PutGetXML.put_text_element(l_entry, 'Size', p_room_object.Size) return l_entry
def _read_one_irrigation_system(p_xml): """ May contain zero or more zones. In general each zone is controlled by a solenoid controlled valve. """ l_sys = IrrigationSystemData() l_count = 0 XmlConfigTools.read_base_object_xml(l_sys, p_xml) try: l_sys.Comment = PutGetXML.get_text_from_xml(p_xml, 'Comment') for l_zone in p_xml.iterfind(ZONE): l_obj = Xml._read_one_zone(l_zone) l_sys.Zones[l_count] = l_obj l_count += 1 except AttributeError as e_err: LOG.error('Zone: {}'.format(e_err)) return l_sys
def _write_one_login(p_obj): """ @param p_obj: is one login object """ l_xml = XmlConfigTools.write_base_object_xml('Login', p_obj, no_uuid = True) PutGetXML().put_text_element(l_xml, 'FullName', p_obj.LoginFullName) PutGetXML().put_text_element(l_xml, 'Password', p_obj.LoginPasswordCurrent) PutGetXML().put_text_element(l_xml, 'Role', p_obj.LoginRole) return l_xml
def _write_one_zone(p_obj): """ @param p_obj: is one zone object @return the XML for one Zone """ l_xml = XmlConfigTools.write_base_object_xml('Zone', p_obj) PutGetXML.put_text_element(l_xml, 'Comment', p_obj.Comment) PutGetXML.put_int_element(l_xml, 'Duration', p_obj.Duration) return l_xml
def _write_one_base_schedule(p_schedule_obj): """ """ l_entry = XmlConfigTools.write_base_object_xml('Schedule', p_schedule_obj) PutGetXML.put_text_element(l_entry, 'ScheduleType', p_schedule_obj.ScheduleType) PutGetXML.put_text_element(l_entry, 'Time', p_schedule_obj.Time) PutGetXML.put_int_element(l_entry, 'DayOfWeek', int(p_schedule_obj.DOW)) PutGetXML.put_int_element(l_entry, 'Mode', p_schedule_obj.Mode) return l_entry
def _read_one_base_schedule(p_schedule_element): """Extract schedule information from a schedule xml element. """ l_obj = ScheduleBaseData() XmlConfigTools.read_base_object_xml(l_obj, p_schedule_element) l_obj.Time = PutGetXML.get_text_from_xml(p_schedule_element, 'Time') l_obj.ScheduleType = PutGetXML.get_text_from_xml(p_schedule_element, 'ScheduleType') if l_obj.ScheduleType == 'LightingDevice': l_obj.ScheduleType = 'Lighting' try: l_obj.DOW = PutGetXML.get_int_from_xml(l_obj, 'DayOfWeek', 0x7F) except: l_obj.DOW = 0x7F try: l_obj.Mode = PutGetXML.get_int_from_xml(l_obj, 'Mode', 0) except: l_obj.Mode = 0 return l_obj
def read_one_room(p_room_element): l_room_obj = RoomData() try: XmlConfigTools.read_base_object_xml(l_room_obj, p_room_element) l_room_obj.Comment = PutGetXML.get_text_from_xml( p_room_element, 'Comment') l_room_obj.Corner = PutGetXML.get_coords_from_xml( p_room_element, 'Corner') l_room_obj.Floor = PutGetXML.get_text_from_xml( p_room_element, 'Floor', '1') l_room_obj.LastUpdate = PutGetXML.get_date_time_from_xml( p_room_element, 'LastUpdate') l_room_obj.Size = PutGetXML.get_coords_from_xml( p_room_element, 'Size') l_room_obj.RoomType = PutGetXML.get_text_from_xml( p_room_element, 'RoomType') except: LOG.warn('Incomplete data for room {}'.format(l_room_obj.Name)) return l_room_obj
def write_one_room(p_room_object): l_entry = XmlConfigTools.write_base_object_xml('Room', p_room_object) PutGetXML.put_text_element(l_entry, 'Comment', p_room_object.Comment) PutGetXML.put_coords_element(l_entry, 'Corner', p_room_object.Corner) PutGetXML.put_text_element(l_entry, 'Floor', p_room_object.Floor) PutGetXML.put_date_time_element(l_entry, 'LastUpdate', p_room_object.LastUpdate) PutGetXML.put_coords_element(l_entry, 'Size', p_room_object.Size) PutGetXML.put_text_element(l_entry, 'RoomType', p_room_object.RoomType) return l_entry
def _write_one_login(p_obj): """ @param p_obj: is one login object """ l_xml = XmlConfigTools.write_base_object_xml('Login', p_obj) PutGetXML().put_text_element(l_xml, 'FullName', p_obj.LoginFullName) PutGetXML().put_text_element(l_xml, 'Password', p_obj.LoginPasswordCurrent) PutGetXML().put_text_element(l_xml, 'Role', p_obj.LoginRole) return l_xml
def write_house_xml(p_pyhouse_obj): """Replace the data in the 'Houses' section with the current data. """ # print(PrettyFormatAny.form(p_pyhouse_obj, 'PyHouse')) # l_house_obj = p_pyhouse_obj.House # print(PrettyFormatAny.form(l_house_obj, 'PyHouse')) l_house_xml = XmlConfigTools.write_base_object_xml('HouseDivision', p_pyhouse_obj.House) l_house_xml.append(locationXML.write_location_xml(p_pyhouse_obj.House.Location)) l_house_xml.append(roomsXML.write_rooms_xml(p_pyhouse_obj.House.Rooms)) return l_house_xml
def _write_one_broker(p_mqtt): """ @param p_obj: is one broker object. @return: the XML for one Broker System """ l_entry = XmlConfigTools.write_base_object_xml('Broker', p_mqtt) PutGetXML().put_int_element(l_entry, 'BrokerAddress', p_mqtt.BrokerAddress) PutGetXML().put_int_element(l_entry, 'BrokerPort', p_mqtt.BrokerPort) PutGetXML().put_text_element(l_entry, 'BrokerUser', p_mqtt.UserName) PutGetXML().put_text_element(l_entry, 'BrokerPassword', p_mqtt.Password) return l_entry
def _write_one_system(p_obj): """ @param p_obj: is one irrigation system object. @return: the XML for one complete IrrigationSystem """ l_xml = XmlConfigTools.write_base_object_xml('IrrigationSystem', p_obj) PutGetXML.put_text_element(l_xml, 'Comment', p_obj.Comment) for l_obj in p_obj.Zones.itervalues(): l_zone = Xml._write_one_zone(l_obj) l_xml.append(l_zone) return l_xml
def _read_one_base_schedule(p_schedule_element): """Extract schedule information from a Base schedule xml element. ScheduleBaseData() """ l_obj = ScheduleBaseData() XmlConfigTools.read_base_object_xml(l_obj, p_schedule_element) try: l_obj.DOW = PutGetXML.get_int_from_xml(l_obj, 'DayOfWeek', 0x7F) except: l_obj.DOW = 0x7F try: l_obj.ScheduleMode = PutGetXML.get_text_from_xml( l_obj, 'ScheduleMode', 0) except: l_obj.ScheduleMode = 'Home' l_obj.ScheduleType = PutGetXML.get_text_from_xml( p_schedule_element, 'ScheduleType') if l_obj.ScheduleType == 'LightingDevice': l_obj.ScheduleType = 'Lighting' l_obj.Time = PutGetXML.get_text_from_xml(p_schedule_element, 'Time') return l_obj
class E1_Read(SetupMixin, unittest.TestCase): """ This tests the ConfigTools section """ def setUp(self): self.m_pyhouse_obj = SetupMixin.setUp(self, ET.fromstring(XML_LONG)) self.m_api = XmlConfigTools() def test_01_BaseObject(self): l_base_obj = CoreLightingData() self.m_api.read_base_object_xml(l_base_obj, self.m_xml.light) self.assertEqual(l_base_obj.Name, TESTING_LIGHT_NAME_0) self.assertEqual(l_base_obj.Key, 0) self.assertEqual(l_base_obj.Active, True) # self.assertEqual(l_base_obj.UUID, 'c15f7d76-092e-11e4-bffa-b827eb189eb4', 'Bad UUID') def test_02_readBaseObject(self): l_base_obj = CoreLightingData() self.m_api.read_base_object_xml(l_base_obj, self.m_xml.controller) self.assertEqual(l_base_obj.Name, 'Insteon Serial Controller') self.assertEqual(l_base_obj.Key, 0) self.assertEqual(l_base_obj.Active, True)
def _write_one_base_schedule(p_schedule_obj): """ """ l_entry = XmlConfigTools.write_base_object_xml(SCHEDULE_ATTR, p_schedule_obj) PutGetXML.put_int_element(l_entry, 'DayOfWeek', int(p_schedule_obj.DOW)) PutGetXML.put_text_element(l_entry, 'ScheduleMode', p_schedule_obj.ScheduleMode) PutGetXML.put_text_element(l_entry, 'ScheduleType', p_schedule_obj.ScheduleType) PutGetXML.put_text_element(l_entry, 'Time', p_schedule_obj.Time) return l_entry
class C3_Read(SetupMixin, unittest.TestCase): """ This tests the ConfigTools section """ def setUp(self): self.m_pyhouse_obj = SetupMixin.setUp(self, ET.fromstring(xml_data.XML_LONG)) self.m_api = XmlConfigTools() def test_01_BaseObject(self): l_base_obj = CoreLightingData() self.m_api.read_base_object_xml(l_base_obj, self.m_xml.light) self.assertEqual(l_base_obj.Name, 'Insteon Light') self.assertEqual(l_base_obj.Key, 0) self.assertEqual(l_base_obj.Active, True) # self.assertEqual(l_base_obj.UUID, 'c15f7d76-092e-11e4-bffa-b827eb189eb4', 'Bad UUID') def test_02_readBaseObject(self): l_base_obj = CoreLightingData() self.m_api.read_base_object_xml(l_base_obj, self.m_xml.controller) self.assertEqual(l_base_obj.Name, 'Insteon Serial Controller') self.assertEqual(l_base_obj.Key, 0) self.assertEqual(l_base_obj.Active, True)
def read_computer_xml(p_pyhouse_obj): """ The XML for all the sections within the division are read by the appropriate sub-module. Therefore, there is not much to do here. """ l_xml = p_pyhouse_obj.Xml.XmlRoot.find(COMPUTER_DIVISION) if l_xml is None: l_obj = Xml.create_computer(p_pyhouse_obj) p_pyhouse_obj.Computer = l_obj else: l_obj = XmlConfigTools.read_base_object_xml( p_pyhouse_obj.Computer, l_xml) l_msg = 'Resuming Computers UUID is {}'.format(l_obj.UUID) LOG.warn(l_msg) return l_obj
def _read_base(p_pool_element): l_pool_obj = PoolData() XmlConfigTools.read_base_object_xml(l_pool_obj, p_pool_element) return l_pool_obj
def _write_one_interface_xml(p_interface_obj): l_entry = XmlConfigTools.write_base_object_xml('Interface', p_interface_obj) PutGetXML.put_text_element(l_entry, 'MacAddress', p_interface_obj.MacAddress) PutGetXML.put_text_element(l_entry, 'IPv4Address', p_interface_obj.V4Address) PutGetXML.put_text_element(l_entry, 'IPv6Address', p_interface_obj.V6Address) return l_entry
def setUp(self): self.m_pyhouse_obj = SetupMixin.setUp(self, ET.fromstring(XML_EMPTY)) self.m_api = XmlConfigTools()
def _read_base(p_xml): l_obj = HouseInformation() XmlConfigTools.read_base_object_xml(l_obj, p_xml) return l_obj
def setUp(self): self.m_pyhouse_obj = SetupMixin.setUp(self, ET.fromstring(xml_data.XML_EMPTY)) self.m_api = XmlConfigTools()
def _write_base(p_obj): l_entry = XmlConfigTools.write_base_object_xml('Pool', p_obj) return l_entry
def write_computer_xml(p_pyhouse_obj): p_pyhouse_obj.Computer.Name = platform.node() p_pyhouse_obj.Computer.Key = 0 p_pyhouse_obj.Computer.Active = True l_xml = XmlConfigTools.write_base_object_xml(DIVISION, p_pyhouse_obj.Computer) return l_xml
def _write_one_pool(p_pool_obj): l_entry = XmlConfigTools.write_base_object_xml('Pool', p_pool_obj) PutGetXML().put_text_element(l_entry, 'Comment', p_pool_obj.Comment) PutGetXML().put_text_element(l_entry, 'PoolType', p_pool_obj.PoolType) return l_entry