From 9d4fc5c3f8e6f1986e4a12383ec103a03b5d99b9 Mon Sep 17 00:00:00 2001 From: Sebastian <seb.miksch@aon.at> Date: Mon, 19 Sep 2022 21:51:42 +0200 Subject: [PATCH] added functions in verification_tab.py and used said functions in verification_tab.py --- Tst/testing_library/testlib/tm.py | 336 ++++++++++++++++++++++++- Tst/testing_library/testlib/tm_test.py | 93 +++++++ Tst/tst/verification_tab.py | 155 ++++-------- 3 files changed, 470 insertions(+), 114 deletions(-) create mode 100644 Tst/testing_library/testlib/tm_test.py diff --git a/Tst/testing_library/testlib/tm.py b/Tst/testing_library/testlib/tm.py index 04d8829..e66c416 100644 --- a/Tst/testing_library/testlib/tm.py +++ b/Tst/testing_library/testlib/tm.py @@ -979,7 +979,7 @@ def extract_apid_from_packetid(packet_id): return apid -def get_tc_acknow(pool_name, t_tc_sent, tc_apid, tc_ssc, tm_st=1, tm_sst=None): +def get_tc_acknow(pool_name="LIVE", t_tc_sent=0, tc_apid=321, tc_ssc=1, tm_st=1, tm_sst=None): """ Check if for the TC acknowledgement packets can be found in the database. This function makes a single database query. @@ -1076,7 +1076,7 @@ def get_tc_acknow(pool_name, t_tc_sent, tc_apid, tc_ssc, tm_st=1, tm_sst=None): return result, ack_tms -def await_tc_acknow(pool_name, tc_identifier, duration=10, tm_st=1, tm_sst=None): +def await_tc_acknow(tc_identifier, pool_name="LIVE", duration=10, tm_st=1, tm_sst=None): """ Waiting to receive the acknowledgement packet of a sent telecommand (TC) for a given duration. As soon as acknowledgement packets were found the function returns. @@ -1156,6 +1156,279 @@ def await_tc_acknow(pool_name, tc_identifier, duration=10, tm_st=1, tm_sst=None) return result, ack_list +def get_5_1_tc_acknow(pool_name="LIVE", t_tc_sent=0, tc_apid=321, tc_ssc=1, tm_st=5, tm_sst=None): + """ + Check if for the TC acknowledgement packets can be found in the database. + This function makes a single database query. + :param pool_name: str + Name of the TM pool in the database + :param t_tc_sent: float + CUC timestamp from which search for telecommand should start + :param tc_apid: int or str + Application process ID of the sent TC. Can be provided as integer or hexadecimal string + :param tc_ssc: int + Source sequence counter of the sent TC + :return: (boolean, list) + boolean: + True if one or up to all acknowledgement packets TM(5,1), TM(5,3), TM(5,7) were found + False if one or all of TM(5,2), TM(5,4), TM(5,8) were found + list: + List of the acknowledgement TM packets for the TC, + [] if no acknowledgement TM packets could be found in the database + """ + print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") + result = None + assert isinstance(pool_name, str) + assert isinstance(tc_apid, (int, str)) + assert isinstance(t_tc_sent, (float, int)) + + # if the tc_apid is provided as hexadecimal number, convert it to and integer + tc_apid = tools.convert_apid_to_int(apid=tc_apid) + + # make database query + packets = fetch_packets(pool_name=pool_name, st=tm_st, sst=tm_sst, t_from=t_tc_sent) + # print(packets[1][0][0].CTIME + (packets[1][0][0].FTIME/1000000)) + # filter for TM packets with the correct APID and source sequence counter (SSC) in the data field + ack_tms = [] + for i in range(len(packets)): + if packets[i][1] is not None and packets[i][1][0] is not None: + # get the data entries for APID and SSC + # pac_apid = packets[i][0][3] # TODO: not compatible anymore + pac_apid = packets[i][0][0].APID + if pac_apid == 961: # for acknowledgements from SEM + name_apid = 'PAR_CMD_APID' + name_psc = 'PAR_CMD_SEQUENCE_COUNT' + else: + name_apid = 'TcPcktId' + name_psc = 'TcPcktSeqCtrl' + para = get_tm_data_entries(tm_packet=packets[i], data_entry_names=[name_apid, name_psc]) + if name_apid in para and name_psc in para: + # extract the SSC from the PSC + ssc = extract_ssc_from_psc(psc=para[name_psc]) + apid = extract_apid_from_packetid(packet_id=para[name_apid]) + if pac_apid == 961: # acknowledgement packets from SEM have the PID in the field 'PAR_CMD_APID' + tc_pid = tools.extract_pid_from_apid(tc_apid) + if apid == tc_pid and ssc == tc_ssc: + ack_tms.append(packets[i]) + else: + if apid == tc_apid and ssc == tc_ssc: + ack_tms.append(packets[i]) + else: + logger.debug('get_tc_acknow: could not read the data from the TM packet') + + # treat with the result from the database query + if len(ack_tms) > 0: + # get the ST and SST of the TC for logging purposes + tc_st, tc_sst = get_st_and_sst(pool_name=pool_name, + apid=tc_apid, + ssc=tc_ssc, + is_tm=False, + t_from=t_tc_sent) + logger.info('Received acknowledgement TM packets for TC({},{}) apid={} ssc={}:' + .format(tc_st, tc_sst, tc_apid, tc_ssc)) + + # check if there was a failure, the result becomes False if a failure occurred + for i in range(len(ack_tms)): + head = ack_tms[i][0][0] + data = ack_tms[i][1] + if result is not False: + if head.SERV_SUB_TYPE in [1, 3, 7]: + logger.info('TM({},{}) @ {}'.format(head.SERV_TYPE, head.SERV_SUB_TYPE, cfl.get_cuctime(head))) + result = True + elif head.SERV_SUB_TYPE in [2, 4, 8]: + if head.SERV_SUB_TYPE == 2: + logger.info('TM({},{}) @ {} FAILURE: Acknowledge failure of acceptance check for a command.' + .format(head.SERV_TYPE, head.SERV_SUB_TYPE, cfl.get_cuctime(head))) + logger.debug('Data of the TM packet: {}'.format(data)) + if head.SERV_SUB_TYPE == 4: + logger.info('TM({},{}) @ {} FAILURE: Acknowledge failure of start check for a command.' + .format(head.SERV_TYPE, head.SERV_SUB_TYPE, cfl.get_cuctime(head))) + logger.debug('Data of the TM packet: {}'.format(data)) + if head.SERV_SUB_TYPE == 8: + logger.info( + 'TM({},{}) @ {} FAILURE: Acknowledge failure of termination check for a command.' + .format(head.SERV_TYPE, head.SERV_SUB_TYPE, cfl.get_cuctime(head))) + logger.debug('Data of the TM packet: {}'.format(data)) + result = False + + return result, ack_tms + pass + +def get_8_1_tc_acknow(pool_name="LIVE", t_tc_sent=0, tc_apid=321, tc_ssc=1, tm_st=8, tm_sst=None): + """ + Check if for the TC acknowledgement packets can be found in the database. + This function makes a single database query. + :param pool_name: str + Name of the TM pool in the database + :param t_tc_sent: float + CUC timestamp from which search for telecommand should start + :param tc_apid: int or str + Application process ID of the sent TC. Can be provided as integer or hexadecimal string + :param tc_ssc: int + Source sequence counter of the sent TC + :return: (boolean, list) + boolean: + True if one or up to all acknowledgement packets TM(5,1), TM(5,3), TM(5,7) were found + False if one or all of TM(5,2), TM(5,4), TM(5,8) were found + list: + List of the acknowledgement TM packets for the TC, + [] if no acknowledgement TM packets could be found in the database + """ + result = None + assert isinstance(pool_name, str) + assert isinstance(tc_apid, (int, str)) + assert isinstance(t_tc_sent, (float, int)) + + # if the tc_apid is provided as hexadecimal number, convert it to and integer + tc_apid = tools.convert_apid_to_int(apid=tc_apid) + + # make database query + packets = fetch_packets(pool_name=pool_name, st=tm_st, sst=tm_sst, t_from=t_tc_sent) + # print(packets[1][0][0].CTIME + (packets[1][0][0].FTIME/1000000)) + # filter for TM packets with the correct APID and source sequence counter (SSC) in the data field + ack_tms = [] + for i in range(len(packets)): + if packets[i][1] is not None and packets[i][1][0] is not None: + # get the data entries for APID and SSC + # pac_apid = packets[i][0][3] # TODO: not compatible anymore + pac_apid = packets[i][0][0].APID + if pac_apid == 961: # for acknowledgements from SEM + name_apid = 'PAR_CMD_APID' + name_psc = 'PAR_CMD_SEQUENCE_COUNT' + else: + name_apid = 'TcPcktId' + name_psc = 'TcPcktSeqCtrl' + para = get_tm_data_entries(tm_packet=packets[i], data_entry_names=[name_apid, name_psc]) + if name_apid in para and name_psc in para: + # extract the SSC from the PSC + ssc = extract_ssc_from_psc(psc=para[name_psc]) + apid = extract_apid_from_packetid(packet_id=para[name_apid]) + if pac_apid == 961: # acknowledgement packets from SEM have the PID in the field 'PAR_CMD_APID' + tc_pid = tools.extract_pid_from_apid(tc_apid) + if apid == tc_pid and ssc == tc_ssc: + ack_tms.append(packets[i]) + else: + if apid == tc_apid and ssc == tc_ssc: + ack_tms.append(packets[i]) + else: + logger.debug('get_tc_acknow: could not read the data from the TM packet') + + # treat with the result from the database query + if len(ack_tms) > 0: + # get the ST and SST of the TC for logging purposes + tc_st, tc_sst = get_st_and_sst(pool_name=pool_name, + apid=tc_apid, + ssc=tc_ssc, + is_tm=False, + t_from=t_tc_sent) + logger.info('Received acknowledgement TM packets for TC({},{}) apid={} ssc={}:' + .format(tc_st, tc_sst, tc_apid, tc_ssc)) + + # check if there was a failure, the result becomes False if a failure occurred + for i in range(len(ack_tms)): + head = ack_tms[i][0][0] + data = ack_tms[i][1] + if result is not False: + if head.SERV_SUB_TYPE in [1, 3, 7]: + logger.info('TM({},{}) @ {}'.format(head.SERV_TYPE, head.SERV_SUB_TYPE, cfl.get_cuctime(head))) + result = True + elif head.SERV_SUB_TYPE in [2, 4, 8]: + if head.SERV_SUB_TYPE == 2: + logger.info('TM({},{}) @ {} FAILURE: Acknowledge failure of acceptance check for a command.' + .format(head.SERV_TYPE, head.SERV_SUB_TYPE, cfl.get_cuctime(head))) + logger.debug('Data of the TM packet: {}'.format(data)) + if head.SERV_SUB_TYPE == 4: + logger.info('TM({},{}) @ {} FAILURE: Acknowledge failure of start check for a command.' + .format(head.SERV_TYPE, head.SERV_SUB_TYPE, cfl.get_cuctime(head))) + logger.debug('Data of the TM packet: {}'.format(data)) + if head.SERV_SUB_TYPE == 8: + logger.info( + 'TM({},{}) @ {} FAILURE: Acknowledge failure of termination check for a command.' + .format(head.SERV_TYPE, head.SERV_SUB_TYPE, cfl.get_cuctime(head))) + logger.debug('Data of the TM packet: {}'.format(data)) + result = False + + return result, ack_tms + pass + +def get_sid_of_tm(packet): + """ + Gets SID from raw packet data. + :param packet: bytes + Packet whose SID should be extracted + :param decoded_packet: str + Decoded information of packet + :param header: str + extract header from raw data + + """ + + decoded_packet = packet.hex() + header = decoded_packet[36:124] + return int(header[3]) + + + + +def get_frequency_of_hk(duration=60., frequency=20, SID=1, pool_name="LIVE"): + """ + Check the time passing between TM packets during a given duration. + This function makes a multiple database queries. + :param pool_name: str + Name of the TM pool in the database + :param duration: float + timeslot in which the incoming packages are checked for their cuc-timestamp + """ + + + assert isinstance(duration, (float, int)) + assert isinstance(frequency, int) + assert isinstance(SID, int) + + + list_of_timestamps = [] + last_telemetry_packet = cfl.get_pool_rows(pool_name)[-1].raw + timestamp = cfl.get_cuctime(last_telemetry_packet) + # last_packet_sid = get_sid_of_tm(last_telemetry_packet) + current_timestamp = 0.0 + end_time = timestamp + duration + + while current_timestamp <= end_time: + + current_telemetry_packet = cfl.get_pool_rows(pool_name)[-1].raw + current_timestamp = cfl.get_cuctime(current_telemetry_packet) + current_packet_sid = get_sid_of_tm((current_telemetry_packet)) + if current_timestamp not in list_of_timestamps and current_packet_sid == SID: + list_of_timestamps.append(current_timestamp) + else: + continue + + list_of_differences = [j-i for i, j in zip(list_of_timestamps[:-1], list_of_timestamps[1:])] + + first_element = round(list_of_differences[0]) + chk = True + + for item in list_of_differences: + if first_element != round(item): + chk = False + break + + if chk == True: + # print(round(list_of_differences[0])) + print(first_element) + if first_element == frequency: + print(True) + return True + else: + print("Didn't work") + return False + + + + + +# get_frequency_of_hk() + def check_acknowledgement(pool_name, tc_identifier, duration=10): """ Check that for a sent TC the acknowledgement packets were received (assuming the acknowledgement was enabled) @@ -1538,6 +1811,63 @@ def get_acquisition(pool_name, tm_21_3): logger.info(meta_data[i]) return result +def get_dpu_mode(pool_name="LIVE"): + """ + Get the data from the last entry in the database and check its DPU Mode. + :param pool_name: str + Name of the pool for TM/TC packets in the database + :param dpu_mode: dict + DPU Mode of the packet + + """ + + data_packet = cfl.get_pool_rows(pool_name)[-1].raw + dpu_mode = get_tm_data_entries(data_packet,"DpuMode") + print(dpu_mode) + +def get_packet_length(pool_name="LIVE"): + """ + Get the data from the last entry in the database and check its length. + :param pool_name: str + Name of the pool for TM/TC packets in the database + :param data_packet: bit + data in the last entry in database + :param packet_length: int + Length of data_packet + + """ + + data_packet = cfl.get_pool_rows(pool_name)[-1].raw + packet_length = len(data_packet) + print(packet_length) + +def get_version_number(version_number="0x0112", pool_name="LIVE"): + """ + Get the version number of the newest TM packet. + :param version_number: str + version number which should be verified + :param pool_name: str + Name of the pool for TM/TC packets in the database + :param data_packet: bytes + Data in Packet + :param packet_version_number_dic: dic + dictionary containing the version number + :param packet_version_number: str + version number converted into hex + """ + + assert isinstance(version_number, str) + + data_packet = cfl.get_pool_rows(pool_name)[-1].raw + packet_version_number_dic = get_tm_data_entries(data_packet, "VersionNumber") + # print(packet_version_number) + packet_version_number = hex(packet_version_number_dic["VersionNumber"]) + if packet_version_number == version_number: + print(True) + return True + else: + print(False) + return False def await_tc_identifier(pool_name, tc_apid, tc_ssc): @@ -1570,7 +1900,7 @@ def await_tc_identifier(pool_name, tc_apid, tc_ssc): return tc_identifier -def get_tc_identifier(pool_name, tc_apid, tc_ssc, tc_time): +def get_tc_identifier(pool_name="LIVE", tc_apid=321, tc_ssc=1, tc_time=0.): """ Gather the data necessary to identify the newest telecommand and put it in tuple. :param pool_name: str diff --git a/Tst/testing_library/testlib/tm_test.py b/Tst/testing_library/testlib/tm_test.py new file mode 100644 index 0000000..43f10ce --- /dev/null +++ b/Tst/testing_library/testlib/tm_test.py @@ -0,0 +1,93 @@ +import tm +import ccs_function_lib as cfl +import confignator +import matplotlib +matplotlib.use('Gtk3Cairo') +from confignator import config +check_cfg = config.get_config(file_path=confignator.get_option('config-files', 'ccs')) + + +telemetry = cfl.get_pool_rows("PLM") +telemetry_packet_1 = cfl.get_pool_rows("PLM")[0].raw +telemetry_packet_2 = cfl.get_pool_rows("PLM")[1].raw + +list_of_tm_packets = [telemetry_packet_1, telemetry_packet_2] + +telemetry_raw = telemetry.all()[-1].raw + + +timestamp = cfl.get_cuctime(telemetry_packet_1) +# test = tm.get_tm_data_entries(telemetry_packet_1, "EvtId") +# print(test) +timestamp_test = tm.highest_cuc_timestamp(list_of_tm_packets) + + +# baba = telemetry[-1].timestamp +# print(baba) + +# print("Telemetry Packet: ", telemetry_packet_1) +# print("Telemetry Packet: ", telemetry_packet_2) + + +# print(tm.get_tm_data_entries(telemetry_packet_1, "DpuMode")) + + +# get_list_from_db = tm.fetch_packets(pool_name="PLM", is_tm=True, st=None, sst=None, apid=None, ssc=None, t_from=0., t_to=1401., +# dest_id=None, not_apid=None, decode=False, silent=False) + + + + +identified_tc = tm.get_tc_identifier(pool_name="PLM",tc_apid=321,tc_ssc=1, tc_time=100) + + + + + + + + + + + + + + + +acknowledgement = tm.await_tc_acknow(pool_name="PLM", tc_identifier=identified_tc, duration=10, tm_st=1, tm_sst=7) + + +print(acknowledgement[1][0][0][0].CTIME + (acknowledgement[1][0][0][0].FTIME/1000000)) + + + + +""" +# fetch funktion, demonstration von .CTIME und FTIME + +test = tm.fetch_packets(pool_name="PLM", is_tm=True, st=3, sst=25, apid=321, ssc=None, t_from=0.00, t_to=21.0, + dest_id=None, not_apid=None, decode=True, silent=False) + + +# print(test) +# print(test[0][0][1]) +# print("Test: ", test[0][0][1]) +header = test[0][0][0] +# print(header.CTIME) +# print(header.FTIME) + +print(header.CTIME + (header.FTIME/1000000)) + +test_liste = [] + +for i in test: + test_liste.append(i[0][0]) + +print(len(test_liste)) +print(test_liste) + +""" + + + + diff --git a/Tst/tst/verification_tab.py b/Tst/tst/verification_tab.py index 3d59691..dc189cc 100644 --- a/Tst/tst/verification_tab.py +++ b/Tst/tst/verification_tab.py @@ -1,6 +1,6 @@ # !/usr/bin/env python3 import gi - +import os gi.require_version("Gtk", "3.0") gi.require_version("GtkSource", "3.0") @@ -9,6 +9,7 @@ from gi.repository.GdkPixbuf import Pixbuf import confignator import sys sys.path.append(confignator.get_option('paths', 'ccs')) +sys.path.append(os.path.join(confignator.get_option("paths", "Tst"), "testing_library/testlib")) import ccs_function_lib as cfl import s2k_partypes as s2k @@ -23,14 +24,32 @@ import DBus_Basic from typing import NamedTuple import confignator import gi +# print(sys.path) +import inspect + + +import tm + +Verification_1 = "tm." + tm.get_tc_acknow.__name__ + str(inspect.signature((tm.get_tc_acknow))) +Verification_2 = "tm." + tm.await_tc_acknow.__name__ + str(inspect.signature((tm.await_tc_acknow))) +Verification_3 = "tm." + tm.get_5_1_tc_acknow.__name__ + str(inspect.signature((tm.get_5_1_tc_acknow))) +tc_identifier = "identified_tc = tm." + tm.get_tc_identifier.__name__ + str(inspect.signature((tm.get_tc_identifier))) +Verification_4 = "tm." + tm.get_frequency_of_hk.__name__ + str(inspect.signature((tm.get_frequency_of_hk))) +Verification_5 = "tm." + tm.get_dpu_mode.__name__ + str(inspect.signature((tm.get_dpu_mode))) +Verification_6 = "tm." + tm.get_packet_length.__name__ + str(inspect.signature((tm.get_packet_length))) +Verification_7 = "tm." + tm.get_version_number.__name__ + str(inspect.signature((tm.get_version_number))) -import verification as ver verification_list = [ - ("Get TC Verification", 1, 7), - ("Await TC Verification", 1, 7) + ("Get TC Verification", 1, 7, "descr", Verification_1), + ("Await TC Verification", 1, 7, "descr", tc_identifier + "\n" + Verification_2), + ("Get TC Verification", 5, 1, "descr", Verification_3), + ("Get HK frequency", None, None, "descr", Verification_4), + ("Get DPU Mode", None, None, "descr", Verification_5), + ("Get Packet Length", None, None, "descr", Verification_6), + ("Get Version Number", None, None, "descr", Verification_7) ] @@ -38,6 +57,14 @@ verification_list = [ +def translate_drag_data(data): + + + translated = "kla" + + return translated + + class VerificationTable(Gtk.Grid): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -51,7 +78,7 @@ class VerificationTable(Gtk.Grid): self.add(self.grid) # Creating ListStore model - self.verification_liststore = Gtk.ListStore(str, int, int) + self.verification_liststore = Gtk.ListStore(str, int, int, str, str) for verification_ref in verification_list: self. verification_liststore.append(list(verification_ref)) self.current_filter_verification = None @@ -64,7 +91,7 @@ class VerificationTable(Gtk.Grid): # Creating treeview self.treeview = Gtk.TreeView(model=self.verification_filter) for i, column_title in enumerate( - ["Verification", "ST", "SST"] + ["Verification", "ST", "SST", "Description"] ): renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(column_title, renderer, text=i) @@ -116,14 +143,21 @@ class VerificationTable(Gtk.Grid): global verification_name global ST global SST + global descr + global name_string verification_name = model[row][0] ST = model[row][1] SST = model[row][2] - global selected_data_for_drag_drop + descr = model[row][3] + name_string = model[row][4] + global selected_data_for_drag_drop + # print(verification_name) + # print(name_string) - selected_data_for_drag_drop = ver.verification_template("Verification_1") + selected_data_for_drag_drop = name_string + # selected_data_for_drag_drop = cfl.verification_template(name_string) # str(verification_name) + "\n ST = " + str(ST) + "\n SST = " + str(SST) + "\n Time = 2" # selected_data_for_drag_drop = "{} ({}, {})".format((name, ST, SST)) @@ -132,6 +166,7 @@ class VerificationTable(Gtk.Grid): + def on_drag_data_get(self, treeview, drag_context, selection_data, info, time, *args): treeselection = treeview.get_selection() model, my_iter = treeselection.get_selected() @@ -140,6 +175,7 @@ class VerificationTable(Gtk.Grid): + def on_drag_begin(self, *args): pass @@ -152,109 +188,6 @@ class VerificationTable(Gtk.Grid): -""" - -def make_verification_template(pool_name="LIVE", preamble="verification.Verification", options="", comment=False): - - - prcfg = "" - - return - - - def verification(self): - - # if st_variable == 1 and sst_variable == 7: - - pool_rows = cfl.get_pool_rows("PLM") - - system_time = time.clock_gettime(0) - - entry_1_data = pool_rows.all()[-1] - - time_1 = entry_1_data.timestamp - - if time_1 == "": - - first_raw_digits = "" # this string will contain the first bytes of raw data - - telecommand = entry_1_data - telecommand_time = telecommand.timestamp - telecommand_raw = telecommand.raw.hex() - - # Variable to generate new telecommand timestamp, other than telecommand_time - telecommand_verification_timestamp = time.clock_gettime(0) - verification_time = telecommand_verification_timestamp + 2 - - for i in telecommand_raw: - first_raw_digits += str(i) - if len(first_raw_digits) > 7: - break - - # print("After Loop telecommand_first_digits: ", first_raw_digits) - - while system_time < verification_time and system_time != verification_time: - system_time = time.clock_gettime(0) - - if system_time >= verification_time: - verification_running = self.type_comparison(first_raw_digits) - - - - - - def type_comparison(comparison_data): - pool_rows = cfl.get_pool_rows("PLM") - - st_list = [] - sst_list = [] - x = 0 - header_counter = 0 - while header_counter < 2: - x += 1 - entry = pool_rows.all()[-x] - - if entry.data.hex() == comparison_data: - st_list.append(entry.stc) - sst_list.append(entry.sst) - - # print("ST Entry_" + str(x) + ": ", entry.stc) - # print("SST Entry_" + str(x) + ": ", entry.sst) - # print("Timestamp entry_" + str(x) + ": ", entry.timestamp) - header_counter += 1 - - - st_list_reverse = [st_list[1], st_list[0]] - sst_list_reverse = [sst_list[1], sst_list[0]] - - if sst_list_reverse == [1, 7]: - print("Verification successful") - else: - print("Verification unsuccessful") - - return False - - - def get_drop_verification(self): - global verification_name - global ST - global SST - - return - - def verification_table(self, name, subtype, subsubtype): - -""" - - - - - - - - - - -- GitLab