def test_min_max(self): i = database.get_raw_item("ALT") val = str(i.min - 100) self.sock.sendall("@wALT;{}\n".format(val).encode()) res = self.sock.recv(1024).decode() self.assertEqual(res, "@wALT;{};00000\n".format(i.min)) i = database.get_raw_item("ALT") val = str(i.max + 100) self.sock.sendall("@wALT;{}\n".format(val).encode()) res = self.sock.recv(1024).decode() self.assertEqual(res, "@wALT;{};00000\n".format(i.max))
def getInputFunction(self, dbKey): dbItem = database.get_raw_item(dbKey) if dbItem == None: return None # The output exclusion keeps us from constantly sending updates on the # CAN Bus when the change that we recieved was from the CAN Bus. # Basically when the input function is called we'll first exclude # the output then make the change. The output callback will be # called but will do nothing but reset the exclusion flag. if dbKey in self.output_mapping: output_exclude = True else: output_exclude = False def InputFunc(cfpar): if output_exclude: self.output_mapping[dbItem.key]['exclude'] = True self.output_mapping[dbItem.key]["lastValue"] = cfpar.value if cfpar.meta: try: # Check to see if we have a replacemtn string in the dictionary if cfpar.meta in self.meta_replacements_in: m = self.meta_replacements_in[cfpar.meta] else: # Just use the one we were sent m = cfpar.meta dbItem.set_aux_value(m, cfpar.value) except: self.log.warning( "Problem setting Aux Value for {0}".format(dbItem.key)) else: dbItem.value = (cfpar.value, cfpar.annunciate, cfpar.quality, cfpar.failure) return InputFunc
def getInputFunction(self, dbKey): dbItem = database.get_raw_item(dbKey) if dbItem == None: return None # The output exclusion keeps us from constantly sending updates on the # CAN Bus when the change that we recieved was from the CAN Bus. # Basically when the input function is called we'll first exclude # the output then make the change. The output callback will be # called but will do nothing but reset the exclusion flag. if dbKey in self.output_mapping: output_exclude = True else: output_exclude = False def InputFunc(cfpar): if output_exclude: self.output_mapping[dbItem.key]['exclude'] = True self.output_mapping[dbItem.key]["lastValue"] = cfpar.value if cfpar.meta: try: # Check to see if we have a replacemtn string in the dictionary if cfpar.meta in self.meta_replacements_in: m = self.meta_replacements_in[cfpar.meta] else: # Just use the one we were sent m = cfpar.meta dbItem.set_aux_value(m, cfpar.value) except: self.log.warning("Problem setting Aux Value for {0}".format(dbItem.key)) else: dbItem.value = (cfpar.value, cfpar.annunciate, cfpar.quality, cfpar.failure) return InputFunc
def test_database_callbacks(self): """Test database callback routines""" sf = io.StringIO(general_config) database.init(sf) rval = None def test_cb(key, val, udata): # Use a closure for our callback nonlocal rval rval = (key, val) database.callback_add("test", "PITCH", test_cb, None) database.write("PITCH", -11.4) self.assertEqual(rval, ("PITCH", (-11.4, False, False, False, False, False))) database.write("PITCH", 10.2) self.assertEqual(rval, ("PITCH", (10.2, False, False, False, False, False))) i = database.get_raw_item("PITCH") i.fail = True self.assertEqual(rval, ("PITCH", (10.2, False, False, False, True, False))) i.annunciate = True self.assertEqual(rval, ("PITCH", (10.2, True, False, False, True, False))) i.bad = True self.assertEqual(rval, ("PITCH", (10.2, True, False, True, True, False))) time.sleep(0.250) database.update() # force the update self.assertEqual(rval, ("PITCH", (10.2, True, True, True, True, False)))
def test_subscribe_flags(self): """Test that writing just the flags will trigger a subscription response""" self.sock.sendall("@sALT\n".encode()) res = self.sock.recv(1024).decode() self.assertEqual(res, "@sALT\n") i = database.get_raw_item("ALT") i.annunciate = True res = self.sock.recv(1024).decode() self.assertEqual(res, "ALT;0.0;10000\n") i.annunciate = False res = self.sock.recv(1024).decode() self.assertEqual(res, "ALT;0.0;00000\n") i.bad = True res = self.sock.recv(1024).decode() self.assertEqual(res, "ALT;0.0;00100\n") i.bad = False res = self.sock.recv(1024).decode() self.assertEqual(res, "ALT;0.0;00000\n") i.fail = True res = self.sock.recv(1024).decode() self.assertEqual(res, "ALT;0.0;00010\n") i.fail = False res = self.sock.recv(1024).decode() self.assertEqual(res, "ALT;0.0;00000\n") i.secfail = True res = self.sock.recv(1024).decode() self.assertEqual(res, "ALT;0.0;00001\n") i.secfail = False res = self.sock.recv(1024).decode() self.assertEqual(res, "ALT;0.0;00000\n")
def test_quality_bits(self): """Test quality bits""" sf = io.StringIO(general_config) database.init(sf) i = database.get_raw_item("OILP1") database.write("OILP1", 15.4) x = database.read("OILP1") self.assertEqual(x, (15.4, False, False, False, False, False)) i.annunciate = True x = database.read("OILP1") self.assertEqual(x, (15.4, True, False, False, False, False)) i.annunciate = False x = database.read("OILP1") self.assertEqual(x, (15.4, False, False, False, False, False)) i.fail = True x = database.read("OILP1") self.assertEqual(x, (15.4, False, False, False, True, False)) i.fail = False x = database.read("OILP1") self.assertEqual(x, (15.4, False, False, False, False, False)) i.bad = True x = database.read("OILP1") self.assertEqual(x, (15.4, False, False, True, False, False)) i.bad = False x = database.read("OILP1") self.assertEqual(x, (15.4, False, False, False, False, False))
def test_description_units(self): """Test description and units""" sf = io.StringIO(general_config) database.init(sf) i = database.get_raw_item("ROLL") self.assertEqual(i.description, "Roll Angle") self.assertEqual(i.units, "deg")
def test_missing_description_units(self): """Test missing description and units""" sf = io.StringIO(general_config) database.init(sf) i = database.get_raw_item("DUMMY") self.assertEqual(i.description, '') self.assertEqual(i.units, '')
def test_get_report(self): self.sock.sendall("@qAOA\n".encode()) res = self.sock.recv(1024).decode() i = database.get_raw_item("AOA") s = "@qAOA;{};{};{};{};{};{};{}\n".format(i.description, i.typestring, i.min, i.max, i.units, i.tol, ','.join(i.aux.keys())) self.assertEqual(res, s)
def test_aux_data_creation(self): """Test database auxillary data creation""" sf = io.StringIO(general_config) database.init(sf) tests = ["Min", "Max", "0g", "Warn", "Stall"] tests.sort() i = database.get_raw_item("AOA") l = i.get_aux_list() l.sort() self.assertEqual(l, tests)
def getEncoderFunction(self, dbKeys): # the dbKeys parameter should be three fix ids separated by commas # the first two are the encoder ids for each of the encoders that # are contained in the fix message and the third is the button. try: ids = dbKeys.split(",") encoder1 = database.get_raw_item(ids[0].strip()) encoder2 = database.get_raw_item(ids[1].strip()) button = database.get_raw_item(ids[2].strip()) except KeyError: return None def InputFunc(cfpar): x = encoder1.value[0] encoder1.value = x + cfpar.value[0] x = encoder2.value[0] encoder2.value = x + cfpar.value[1] button.value = cfpar.value[2][0] return InputFunc
def test_Variable_Expansion(self): """Test database variable expansion""" sf = io.StringIO(variable_config) database.init(sf) l = database.listkeys() l.sort() self.assertEqual(l, variable_list) for e in range(4): for c in range(6): key = "EGT{}{}".format(e+1,c+1) item = database.get_raw_item(key) s = "Exhaust Gas Temp Engine {}, Cylinder {}".format(e+1,c+1) self.assertEqual(item.description, s)
def getSwitchFunction(self, dbKeys): try: switches = [] ids = dbKeys.split(",") for each in ids: switches.append(database.get_raw_item(each.strip())) except KeyError: return None def InputFunc(cfpar): x = cfpar.value bit = 0 byte = 0 for each in switches: each.value = x[byte][bit] bit += 1 if bit >= 8: bit = 0 byte += 1 return InputFunc
def test_read(self): database.write("IAS", 105.4) self.sock.sendall("@rIAS\n".encode()) res = self.sock.recv(1024).decode() self.assertEqual(res, "@rIAS;105.4;00000\n") i = database.get_raw_item("IAS") i.annunciate = True self.sock.sendall("@rIAS\n".encode()) res = self.sock.recv(1024).decode() self.assertEqual(res, "@rIAS;105.4;10000\n") i.bad = True self.sock.sendall("@rIAS\n".encode()) res = self.sock.recv(1024).decode() self.assertEqual(res, "@rIAS;105.4;10100\n") i.fail = True self.sock.sendall("@rIAS\n".encode()) res = self.sock.recv(1024).decode() self.assertEqual(res, "@rIAS;105.4;10110\n") i.secfail = True self.sock.sendall("@rIAS\n".encode()) res = self.sock.recv(1024).decode() self.assertEqual(res, "@rIAS;105.4;10111\n") i.annunciate = False self.sock.sendall("@rIAS\n".encode()) res = self.sock.recv(1024).decode() self.assertEqual(res, "@rIAS;105.4;00111\n") i.bad = False self.sock.sendall("@rIAS\n".encode()) res = self.sock.recv(1024).decode() self.assertEqual(res, "@rIAS;105.4;00011\n") i.fail = False self.sock.sendall("@rIAS\n".encode()) res = self.sock.recv(1024).decode() self.assertEqual(res, "@rIAS;105.4;00001\n") i.secfail = False self.sock.sendall("@rIAS\n".encode()) res = self.sock.recv(1024).decode() self.assertEqual(res, "@rIAS;105.4;00000\n")
def __init__(self, parent=None): super(DataTable, self).__init__(parent) cols = ["Description", "Value", "Set", "A", "O", "B", "F"] self.setColumnCount(len(cols)) self.setHorizontalHeaderLabels(cols) self.dblist = database.listkeys() self.dblist.sort() self.setRowCount(len(self.dblist)) self.setVerticalHeaderLabels(self.dblist) for i, key in enumerate(self.dblist): item = database.get_raw_item(key) cell = QTableWidgetItem(item.description) cell.setFlags(Qt.ItemIsEnabled) self.setItem(i, 0, cell) cell = QTableWidgetItem(str(item.value[0])) cell.setFlags(Qt.ItemIsEnabled) self.setItem(i, 1, cell) self.resizeColumnsToContents() self.timer = QTimer() self.timer.setInterval(1000) self.timer.timeout.connect(self.update)
def db_get_item(self, key): return database.get_raw_item(key)