From 29fad3da2e11ae98729d595d60cffa661c157d20 Mon Sep 17 00:00:00 2001 From: Cameron Jackson Date: Mon, 21 Oct 2024 10:39:33 -0700 Subject: [PATCH] Issue #538 - Run linting and formatting --- ait/core/__init__.py | 5 +- ait/core/api.py | 9 +- ait/core/bin/ait_bsc_create_handler.py | 8 +- ait/core/bin/ait_bsc_stop_handler.py | 4 +- ait/core/bin/ait_ccsds_send_example.py | 2 +- ait/core/bin/ait_cmd_hist.py | 4 +- ait/core/bin/ait_cmd_send.py | 8 +- ait/core/bin/ait_create_dirs.py | 12 +- ait/core/bin/ait_dict_writer.py | 8 +- ait/core/bin/ait_limits_find_dn.py | 2 - ait/core/bin/ait_mps_seq_convert.py | 1 - ait/core/bin/ait_pcap.py | 8 +- ait/core/bin/ait_pcap_segment.py | 8 +- ait/core/bin/ait_seq_decode.py | 8 +- ait/core/bin/ait_seq_encode.py | 8 +- ait/core/bin/ait_seq_print.py | 8 +- ait/core/bin/ait_seq_send.py | 9 +- ait/core/bin/ait_server.py | 2 - ait/core/bin/ait_table_decode.py | 5 +- ait/core/bin/ait_tlm_csv.py | 16 +- ait/core/bin/ait_tlm_db_insert.py | 10 +- ait/core/bin/ait_tlm_send.py | 10 +- ait/core/bin/ait_tlm_simulate.py | 9 +- ait/core/bin/ait_yaml_validate.py | 11 +- ait/core/bsc.py | 9 +- ait/core/ccsds.py | 8 +- ait/core/coord.py | 6 +- ait/core/db.py | 25 +- ait/core/dmc.py | 10 +- ait/core/dtype.py | 12 +- ait/core/gds.py | 5 +- ait/core/geom.py | 1 - ait/core/json.py | 2 - ait/core/log.py | 14 +- ait/core/notify.py | 3 +- ait/core/pcap.py | 35 +- ait/core/seq.py | 9 +- ait/core/server/__init__.py | 8 +- ait/core/server/broker.py | 23 +- ait/core/server/client.py | 13 +- ait/core/server/config.py | 2 +- ait/core/server/handler.py | 3 +- .../server/handlers/ccsds_packet_handler.py | 6 +- ait/core/server/handlers/packet_handler.py | 2 +- ait/core/server/plugins/PacketAccumulator.py | 13 +- ait/core/server/plugins/PacketPadder.py | 12 +- ait/core/server/plugins/apid_routing.py | 2 +- ait/core/server/plugins/data_archive.py | 6 +- ait/core/server/plugins/limit_monitor.py | 4 +- ait/core/server/plugins/openmct.py | 113 +++--- ait/core/server/process.py | 40 ++- ait/core/server/stream.py | 6 +- ait/core/server/utils.py | 2 - ait/core/util.py | 24 +- poetry.lock | 327 +++++++++--------- setup.cfg | 1 + tests/ait/core/__init__.py | 1 - tests/ait/core/server/test_apid_routing.py | 72 ++-- tests/ait/core/server/test_handler.py | 1 - tests/ait/core/test_cmd.py | 19 +- tests/ait/core/test_db.py | 6 +- tests/ait/core/test_pcap.py | 9 +- tests/ait/core/test_table.py | 2 +- tests/ait/core/test_tlm.py | 4 +- tests/ait/core/test_val.py | 2 + 65 files changed, 532 insertions(+), 505 deletions(-) diff --git a/ait/core/__init__.py b/ait/core/__init__.py index 54698e5e..647afcd7 100644 --- a/ait/core/__init__.py +++ b/ait/core/__init__.py @@ -11,11 +11,12 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - import sys +from ait.core import cfg # noqa +from ait.core import log + # cfg isn't used but we want the AIT-level config attribute created -from ait.core import cfg, log # noqa def deprecated(message): diff --git a/ait/core/api.py b/ait/core/api.py index 953f2683..3f636e72 100644 --- a/ait/core/api.py +++ b/ait/core/api.py @@ -92,8 +92,10 @@ def __str__(self): @property def msg(self): - s = 'FalseWaitError: "False" boolean passed as argument to wait. Ensure wait ' \ + s = ( + 'FalseWaitError: "False" boolean passed as argument to wait. Ensure wait ' 'condition args are surrounded by lambda or " "' + ) if self._msg: s += ": " + self._msg @@ -110,7 +112,6 @@ class CmdAPI: """ def __init__(self, udp_dest=None, cmddict=None, verbose=False, cmdtopic=None): - if cmddict is None: cmddict = cmd.getDefaultCmdDict() @@ -847,7 +848,9 @@ def _send_msg_box_request(self, data): log.error("User prompt request failed due to too many redirects") ret = None except requests.exceptions.Timeout: - raise APITimeoutError(timeout=conn_timeout, msg="User confirm prompt timed out") + raise APITimeoutError( + timeout=conn_timeout, msg="User confirm prompt timed out" + ) except KeyError: log.error("User prompt request received malformed response") ret = None diff --git a/ait/core/bin/ait_bsc_create_handler.py b/ait/core/bin/ait_bsc_create_handler.py index a1a401c0..31024613 100755 --- a/ait/core/bin/ait_bsc_create_handler.py +++ b/ait/core/bin/ait_bsc_create_handler.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,7 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ Usage: ait-bsc-create-handler [options] @@ -35,8 +33,8 @@ include handler metadata values as well as strftime format characters [default: %Y-%m-%d-%H-%M-%S-{name}.pcap] """ - import argparse + import requests @@ -63,9 +61,7 @@ def main(): default="day", ) parser.add_argument("--rotate-log-delta", type=int, default=1) - parser.add_argument( - "--file-name-pattern", default="%Y-%m-%d-%H-%M-%S-{name}.pcap" - ) + parser.add_argument("--file-name-pattern", default="%Y-%m-%d-%H-%M-%S-{name}.pcap") # Get command line arguments args = vars(parser.parse_args()) diff --git a/ait/core/bin/ait_bsc_stop_handler.py b/ait/core/bin/ait_bsc_stop_handler.py index 37f3b63c..10538762 100755 --- a/ait/core/bin/ait_bsc_stop_handler.py +++ b/ait/core/bin/ait_bsc_stop_handler.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,7 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ Usage: ait-bsc-stop-handler [options] @@ -23,9 +21,9 @@ --service-port= The port for the BSC REST service connection [default: 8080] """ +import argparse import requests -import argparse def main(): diff --git a/ait/core/bin/ait_ccsds_send_example.py b/ait/core/bin/ait_ccsds_send_example.py index 7defc4c0..1ed64f96 100755 --- a/ait/core/bin/ait_ccsds_send_example.py +++ b/ait/core/bin/ait_ccsds_send_example.py @@ -1,8 +1,8 @@ #!/usr/bin/env python - import socket import struct import time + from ait.core import log s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) diff --git a/ait/core/bin/ait_cmd_hist.py b/ait/core/bin/ait_cmd_hist.py index a83000cf..28a69528 100755 --- a/ait/core/bin/ait_cmd_hist.py +++ b/ait/core/bin/ait_cmd_hist.py @@ -1,8 +1,8 @@ #!/usr/bin/env python - import argparse -from ait.core import log, pcap +from ait.core import log +from ait.core import pcap """Query all commands from a Command History PCAP""" diff --git a/ait/core/bin/ait_cmd_send.py b/ait/core/bin/ait_cmd_send.py index f99a76bc..4e43a32b 100755 --- a/ait/core/bin/ait_cmd_send.py +++ b/ait/core/bin/ait_cmd_send.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,7 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - # # # Sends the given command and its arguments to the ISS simulator via @@ -23,7 +21,6 @@ # $ ait-cmd-send OCO3_CMD_START_SEQUENCE_NOW 1 # # - """ usage: ait-cmd-send [options] command [arguments] @@ -40,12 +37,13 @@ $ ait-cmd-send OCO3_CMD_START_SEQUENCE_NOW 1 """ - import argparse from collections import OrderedDict import ait -from ait.core import api, log, util +from ait.core import api +from ait.core import log +from ait.core import util def main(): diff --git a/ait/core/bin/ait_create_dirs.py b/ait/core/bin/ait_create_dirs.py index 1813c38d..e503b573 100755 --- a/ait/core/bin/ait_create_dirs.py +++ b/ait/core/bin/ait_create_dirs.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,7 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ Usage: ait-create-dirs [options] @@ -114,15 +112,15 @@ """ - -import os -import errno -import traceback import argparse +import errno +import os import time +import traceback import ait -from ait.core import dmc, log +from ait.core import dmc +from ait.core import log def create_dir_struct(paths, verbose=True): diff --git a/ait/core/bin/ait_dict_writer.py b/ait/core/bin/ait_dict_writer.py index f15750be..309e0140 100755 --- a/ait/core/bin/ait_dict_writer.py +++ b/ait/core/bin/ait_dict_writer.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,7 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ Usage: ait-dict-writer [options] (--tlm | --cmd) @@ -39,11 +37,11 @@ Copyright 2016 California Institute of Technology. ALL RIGHTS RESERVED. U.S. Government Sponsorship acknowledged. """ - -import sys import argparse +import sys -from ait.core import log, tlm +from ait.core import log +from ait.core import tlm def main(): diff --git a/ait/core/bin/ait_limits_find_dn.py b/ait/core/bin/ait_limits_find_dn.py index 0e09eead..13cdf012 100644 --- a/ait/core/bin/ait_limits_find_dn.py +++ b/ait/core/bin/ait_limits_find_dn.py @@ -12,7 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ ait-limits-find-dn @@ -39,7 +38,6 @@ - TABLE_FOO - TABLE_BAR """ - from ait.core import limits from ait.core import log from ait.core import tlm diff --git a/ait/core/bin/ait_mps_seq_convert.py b/ait/core/bin/ait_mps_seq_convert.py index c13e799c..a30de670 100644 --- a/ait/core/bin/ait_mps_seq_convert.py +++ b/ait/core/bin/ait_mps_seq_convert.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - import argparse import datetime as dt import os.path diff --git a/ait/core/bin/ait_pcap.py b/ait/core/bin/ait_pcap.py index 88ce788a..b67b0663 100755 --- a/ait/core/bin/ait_pcap.py +++ b/ait/core/bin/ait_pcap.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,16 +12,17 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ Provides a command line script for running pcap library functions. """ - import argparse import datetime import os -from ait.core import dmc, log, pcap, util +from ait.core import dmc +from ait.core import log +from ait.core import pcap +from ait.core import util def main(): diff --git a/ait/core/bin/ait_pcap_segment.py b/ait/core/bin/ait_pcap_segment.py index 3c45ed91..70f4df81 100644 --- a/ait/core/bin/ait_pcap_segment.py +++ b/ait/core/bin/ait_pcap_segment.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,8 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - - """ Segments one or more pcap files into multiple pcap files, according to a threshold number of bytes, packets, and/or seconds. New segment @@ -37,11 +34,10 @@ And a new file will be started when a packet is written with a timestamp that exceeds 2017-11-23 19:59:59. """ - - import argparse -from ait.core import log, pcap +from ait.core import log +from ait.core import pcap def main(): diff --git a/ait/core/bin/ait_seq_decode.py b/ait/core/bin/ait_seq_decode.py index 5aaf6e28..0e9456b4 100755 --- a/ait/core/bin/ait_seq_decode.py +++ b/ait/core/bin/ait_seq_decode.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,7 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ usage: ait-seq-decode ait_seq_SSS_desc_NNN.bin @@ -24,11 +22,11 @@ $ ait-seq-decode seq/ait_seq_gps_reset_001.bin """ - -import os import argparse +import os -from ait.core import log, seq +from ait.core import log +from ait.core import seq def main(): diff --git a/ait/core/bin/ait_seq_encode.py b/ait/core/bin/ait_seq_encode.py index 3ef839a3..0c53c8c8 100755 --- a/ait/core/bin/ait_seq_encode.py +++ b/ait/core/bin/ait_seq_encode.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,7 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ usage: ait-seq-encode mission_seq_SSS_desc_NNN.txt where: @@ -27,12 +25,12 @@ $ ait-seq-encode seq/ait_seq_gps_reset_001.txt """ - +import argparse import os import sys -import argparse -from ait.core import log, seq +from ait.core import log +from ait.core import seq def main(): diff --git a/ait/core/bin/ait_seq_print.py b/ait/core/bin/ait_seq_print.py index d52cf306..57c0a553 100755 --- a/ait/core/bin/ait_seq_print.py +++ b/ait/core/bin/ait_seq_print.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,7 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ usage: ait-seq-print ait_seq_SSS_NNN_desc.bin @@ -24,11 +22,11 @@ $ ait-seq-print seq/ait_seq_gps_001_reset.bin """ - -import os import argparse +import os -from ait.core import log, seq +from ait.core import log +from ait.core import seq def main(): diff --git a/ait/core/bin/ait_seq_send.py b/ait/core/bin/ait_seq_send.py index 235d0208..07badecd 100755 --- a/ait/core/bin/ait_seq_send.py +++ b/ait/core/bin/ait_seq_send.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,7 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ usage: ait-seq-send [options] filename.rts @@ -30,14 +28,15 @@ $ ait-seq-send test.rts """ - +import argparse import os import time -import argparse from collections import OrderedDict import ait.core -from ait.core import api, log, util +from ait.core import api +from ait.core import log +from ait.core import util def system(command): diff --git a/ait/core/bin/ait_server.py b/ait/core/bin/ait_server.py index e0a7cd96..df8e355a 100755 --- a/ait/core/bin/ait_server.py +++ b/ait/core/bin/ait_server.py @@ -1,12 +1,10 @@ #!/usr/bin/env python - """ Usage: ait-server Start the AIT telemetry server for managing telemety streams, command outputs, processing handlers, and plugins. """ - import argparse from ait.core.server import Server diff --git a/ait/core/bin/ait_table_decode.py b/ait/core/bin/ait_table_decode.py index cdc78403..8c52b7d5 100755 --- a/ait/core/bin/ait_table_decode.py +++ b/ait/core/bin/ait_table_decode.py @@ -13,14 +13,13 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """Decode AIT FSW table binaries""" - import argparse import os.path import sys -from ait.core import log, table +from ait.core import log +from ait.core import table def main(): diff --git a/ait/core/bin/ait_tlm_csv.py b/ait/core/bin/ait_tlm_csv.py index eb2a3080..bf7497db 100755 --- a/ait/core/bin/ait_tlm_csv.py +++ b/ait/core/bin/ait_tlm_csv.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,8 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - - """ Usage: ait-tlm-csv [options] @@ -40,15 +37,16 @@ $ ait-tlm-csv --packet 1553_HS_Packet --all --csv './ait-tlm-csv-output.csv' \ ./ait-tlm-csv-input.pcap """ - - import argparse import csv -import sys import os +import sys from datetime import datetime -from ait.core import log, tlm, pcap, dmc +from ait.core import dmc +from ait.core import log +from ait.core import pcap +from ait.core import tlm """Parses 1553 telemetry into CSV file.""" @@ -75,7 +73,9 @@ def main(): ) parser.add_argument( - "--packet", required=True, help="Packet name from telemetry dictionary specified in config file." + "--packet", + required=True, + help="Packet name from telemetry dictionary specified in config file.", ) parser.add_argument( diff --git a/ait/core/bin/ait_tlm_db_insert.py b/ait/core/bin/ait_tlm_db_insert.py index c5421254..b328b464 100755 --- a/ait/core/bin/ait_tlm_db_insert.py +++ b/ait/core/bin/ait_tlm_db_insert.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,18 +12,18 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ Inserts telemetry into a database from one or more PCAP files. """ - - import argparse import os import struct import ait -from ait.core import db, log, tlm, pcap +from ait.core import db +from ait.core import log +from ait.core import pcap +from ait.core import tlm def main(): @@ -98,7 +97,6 @@ def main(): log.info("Processing %s" % filename) with pcap.open(filename) as stream: for header, pkt_data in stream: - try: packet = tlm.Packet(defn, pkt_data) diff --git a/ait/core/bin/ait_tlm_send.py b/ait/core/bin/ait_tlm_send.py index fd557de7..5384bda2 100755 --- a/ait/core/bin/ait_tlm_send.py +++ b/ait/core/bin/ait_tlm_send.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,7 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ Usage: ait-tlm-send [options] @@ -27,18 +25,16 @@ $ ait-tlm-send test/data/pcap/oco3fsw-iss1553-2015-04-22.pcap """ - - +import argparse import socket import time -import argparse -from ait.core import log, pcap +from ait.core import log +from ait.core import pcap def main(): try: - log.begin() parser = argparse.ArgumentParser( diff --git a/ait/core/bin/ait_tlm_simulate.py b/ait/core/bin/ait_tlm_simulate.py index 625ee93b..bf539ceb 100644 --- a/ait/core/bin/ait_tlm_simulate.py +++ b/ait/core/bin/ait_tlm_simulate.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,7 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ Usage: ait-tlm-simulate [options] @@ -32,13 +30,12 @@ $ ait-tlm-simulate """ - - +import argparse import socket import time -import argparse -from ait.core import log, tlm +from ait.core import log +from ait.core import tlm def main(): diff --git a/ait/core/bin/ait_yaml_validate.py b/ait/core/bin/ait_yaml_validate.py index b7f98d66..e96b2016 100755 --- a/ait/core/bin/ait_yaml_validate.py +++ b/ait/core/bin/ait_yaml_validate.py @@ -1,5 +1,4 @@ #!/usr/bin/env python - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,7 +12,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ usage: ait-yaml-validate @@ -43,14 +41,17 @@ $ ait-yaml-validate --tlm --yaml /path/to/tlm.yaml $ ait-yaml-validate --yaml /path/to/yaml --schema /path/to/schema """ - - import argparse import os import sys import ait -from ait.core import cmd, evr, log, tlm, val, limits +from ait.core import cmd +from ait.core import evr +from ait.core import limits +from ait.core import log +from ait.core import tlm +from ait.core import val def validate(validator, yml, schema): diff --git a/ait/core/bsc.py b/ait/core/bsc.py index de24ee24..d1af1311 100644 --- a/ait/core/bsc.py +++ b/ait/core/bsc.py @@ -11,7 +11,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ AIT Binary Stream Capturer @@ -19,20 +18,20 @@ along with the server definition for RESTful manipulation of running loggers. """ - import calendar import json import os import socket import time -from bottle import request, Bottle -import gevent import gevent.monkey import gevent.pool import gevent.socket +from bottle import Bottle +from bottle import request -from ait.core import pcap, log +from ait.core import log +from ait.core import pcap gevent.monkey.patch_all() diff --git a/ait/core/ccsds.py b/ait/core/ccsds.py index dedf4ddf..85550a2f 100644 --- a/ait/core/ccsds.py +++ b/ait/core/ccsds.py @@ -12,17 +12,15 @@ # responsibility to obtain export licenses, or other export authority # as may be required before exporting such information to foreign # countries or providing access to foreign persons. - - """ Consultative Committee for Space Data Systems (CCSDS) The ait.core.ccsds module provides CCSDS header definitions and datatypes. """ - - -from ait.core import json, tlm, util +from ait.core import json +from ait.core import tlm +from ait.core import util class CcsdsDefinition(json.SlotSerializer, object): diff --git a/ait/core/coord.py b/ait/core/coord.py index 8776c113..7ded6d6a 100644 --- a/ait/core/coord.py +++ b/ait/core/coord.py @@ -11,14 +11,12 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ AIT Coordinate Functions The ait.core.coord module provides various coordinate manpulation and transformation functions. """ - import math from ait.core import dmc @@ -36,8 +34,8 @@ def __init__(self, a, b): """ self.a = a self.b = b - self.a2 = a ** 2 - self.b2 = b ** 2 + self.a2 = a**2 + self.b2 = b**2 self.f = (a - b) / a self.e2 = 1 - (self.b2 / self.a2) self.ep2 = (self.a2 - self.b2) / self.b2 diff --git a/ait/core/db.py b/ait/core/db.py index 0fcce1d7..d5a45590 100644 --- a/ait/core/db.py +++ b/ait/core/db.py @@ -11,24 +11,27 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """AIT Database The ait.db module provides a general database storage layer for commands and telemetry with several backends. """ - -from abc import ABCMeta, abstractmethod import datetime as dt import importlib import itertools import math import os.path - import sqlite3 +from abc import ABCMeta +from abc import abstractmethod import ait -from ait.core import cfg, cmd, dmc, evr, log, tlm +from ait.core import cfg +from ait.core import cmd +from ait.core import dmc +from ait.core import evr +from ait.core import log +from ait.core import tlm class AITDBResult: @@ -701,12 +704,16 @@ def insert(self, packet, time=None, **kwargs): if isinstance(time, dt.datetime): time = time.strftime(dmc.RFC3339_Format) - sql = f'INSERT INTO "{packet._defn.name}" (PKTDATA, time) VALUES (?, ?)' \ - if time \ + sql = ( + f'INSERT INTO "{packet._defn.name}" (PKTDATA, time) VALUES (?, ?)' + if time else f'INSERT INTO "{packet._defn.name}" (PKTDATA) VALUES (?)' - values = (sqlite3.Binary(packet._data), time) \ - if time \ + ) + values = ( + (sqlite3.Binary(packet._data), time) + if time else (sqlite3.Binary(packet._data)) + ) self._conn.execute(sql, values) self._conn.commit() diff --git a/ait/core/dmc.py b/ait/core/dmc.py index 9ebc06e1..b2d02c6c 100644 --- a/ait/core/dmc.py +++ b/ait/core/dmc.py @@ -11,7 +11,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """AIT DeLorean Motor Company (DMC) The ait.dmc module provides utilities to represent, translate, and @@ -22,7 +21,6 @@ midnight. """ - import calendar import datetime import math @@ -175,8 +173,8 @@ def to_gmst(dt=None) -> float: t_ut1 = (jd - 2451545.0) / 36525.0 gmst = 67310.54841 + (876600 * 3600 + 8640184.812866) * t_ut1 - gmst += 0.093104 * t_ut1 ** 2 - gmst -= 6.2e-6 * t_ut1 ** 3 + gmst += 0.093104 * t_ut1**2 + gmst -= 6.2e-6 * t_ut1**3 # Convert from seconds to degrees, i.e. # 86400 seconds / 360 degrees = 240 seconds / degree @@ -370,7 +368,9 @@ def _update_leap_second_data(self): raise ValueError(msg) text = r.text.split("\n") - lines = [line for line in text if line.startswith("#@") or not line.startswith("#")] + lines = [ + line for line in text if line.startswith("#@") or not line.startswith("#") + ] data = {"valid": None, "leapseconds": []} data["valid"] = datetime.datetime(1900, 1, 1) + datetime.timedelta( diff --git a/ait/core/dtype.py b/ait/core/dtype.py index 59de89e7..5561c072 100644 --- a/ait/core/dtype.py +++ b/ait/core/dtype.py @@ -11,8 +11,8 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - from typing import Optional + from ait.core import util """AIT Primitive Data Types (PDT) @@ -175,7 +175,7 @@ def __init__(self, name): self._max = 2 ** (self.nbits - 1) self._min = -1 * (self.max - 1) elif not self.string: - self._max = 2 ** self.nbits - 1 + self._max = 2**self.nbits - 1 self._min = 0 def __eq__(self, other): @@ -811,7 +811,7 @@ def decode(self, bytes, raw=False): class CustomTypes: - '''Pseudo-ABC for users to inject custom types into AIT + """Pseudo-ABC for users to inject custom types into AIT CustomTypes is the vector through which users can inject custom types that they create into the toolkit. `dtype.get` is used throughout AIT to fetch @@ -822,14 +822,14 @@ class CustomTypes: Custom classes must inherit from PrimitiveType. For examples of "custom" types look at the implementation of the `ComplexTypeMap` classes. All of these build on top of PrimitiveType in some way. - ''' + """ def get(self, typename: str) -> Optional[PrimitiveType]: - '''Retrieve an instance of a type's class given its name + """Retrieve an instance of a type's class given its name Maps a class name to an instance of its respective class. Should return None if no match is found. - ''' + """ return None diff --git a/ait/core/gds.py b/ait/core/gds.py index 88695242..799c113c 100644 --- a/ait/core/gds.py +++ b/ait/core/gds.py @@ -11,16 +11,15 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ AIT Ground Data System The ait.core.gds module provides utility functions specific to GDS command-line tools. """ - -from typing import Optional, ByteString import zlib +from typing import ByteString +from typing import Optional from ait.core import log diff --git a/ait/core/geom.py b/ait/core/geom.py index 5c55c560..b86744ca 100755 --- a/ait/core/geom.py +++ b/ait/core/geom.py @@ -11,7 +11,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """AIT 2D/3D Geometry This module contains basic 2D and 3D geometry classes (Point, Line, diff --git a/ait/core/json.py b/ait/core/json.py index 8571f7ac..9d785a00 100644 --- a/ait/core/json.py +++ b/ait/core/json.py @@ -11,14 +11,12 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ AIT Javascript Object Notation (JSON) The ait.core.json module provides JSON utilities and mixin classes for encoding and decoding between AIT data structures and JSON. """ - import collections.abc from typing import List diff --git a/ait/core/log.py b/ait/core/log.py index 7bea5a87..8d1b313d 100644 --- a/ait/core/log.py +++ b/ait/core/log.py @@ -11,24 +11,20 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ AIT Logging The ait.core.log module logs warnings, errors, and other information to standard output and via syslog. """ - -import sys -import socket import datetime -import time -from typing import Callable, Optional - -import logging import logging.handlers +import socket +import sys +import time +from typing import Callable +from typing import Optional -import ait import ait.core diff --git a/ait/core/notify.py b/ait/core/notify.py index 815bbb82..8d36d9ce 100644 --- a/ait/core/notify.py +++ b/ait/core/notify.py @@ -11,9 +11,8 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - -from email.mime.text import MIMEText import smtplib +from email.mime.text import MIMEText import ait from ait.core import log diff --git a/ait/core/pcap.py b/ait/core/pcap.py index 29d3ca67..be33ada3 100644 --- a/ait/core/pcap.py +++ b/ait/core/pcap.py @@ -11,17 +11,15 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ This module, pcap.py, is a library to read/write PCAP-formatted files with simple open, read, write, close functions. (PCAP - packet capture) """ - import builtins import calendar +import datetime import math import struct -import datetime from .dmc import get_timestamp_utc from ait.core import log @@ -53,6 +51,7 @@ class PCapGlobalHeader: https://wiki.wireshark.org/Development/LibpcapFileFormat """ + def __init__(self, stream=None): """Creates a new PCapGlobalHeader with default values. If a stream is given, the global header data is read from it. @@ -65,10 +64,10 @@ def __init__(self, stream=None): self.magic_number = 0xA1B2C3D4 # detects file format and byte ordering self.version_major = 2 self.version_minor = 4 - self.thiszone = 0 # GMT to local correction (0 == GMT) - self.sigfigs = 0 # accuracy of timestamps - self.snaplen = 65535 # max length of captured packets, in octets - self.network = 147 # data link type (147-162 are reserved for private use) + self.thiszone = 0 # GMT to local correction (0 == GMT) + self.sigfigs = 0 # accuracy of timestamps + self.snaplen = 65535 # max length of captured packets, in octets + self.network = 147 # data link type (147-162 are reserved for private use) self._data = self.pack() else: self.read(stream) @@ -79,10 +78,12 @@ def __len__(self): def __str__(self): """Returns this PCapGlobalHeader as a binary string.""" - return f'PCapGlobalHeader Class: \r\n format={self._format}, magic number={self.magic_number},'\ - f'major version={self.version_major}, minor version={self.version_minor}, \r\n' \ - f' time zone={self.thiszone}, timestamp accuracy={self.sigfigs}, max packet size={self.snaplen}, '\ - f'network={self.network}' + return ( + f"PCapGlobalHeader Class: \r\n format={self._format}, magic number={self.magic_number}," + f"major version={self.version_major}, minor version={self.version_minor}, \r\n" + f" time zone={self.thiszone}, timestamp accuracy={self.sigfigs}, max packet size={self.snaplen}, " + f"network={self.network}" + ) def pack(self): return struct.pack( @@ -161,9 +162,11 @@ def __len__(self): def __str__(self): """Returns this PCapPacketHeader as a binary string.""" - return f'PCapPacketHeader Class: \r\n format={self._format}, timestamp seconds={self.ts_sec},' \ - f'timestamp microseconds={self.ts_usec}.\r\n number of octets in file={self.incl_len}, ' \ - f'actual length of packet={self.orig_len}' + return ( + f"PCapPacketHeader Class: \r\n format={self._format}, timestamp seconds={self.ts_sec}," + f"timestamp microseconds={self.ts_usec}.\r\n number of octets in file={self.incl_len}, " + f"actual length of packet={self.orig_len}" + ) def pack(self): """Returns this PCapPacketHeader as a binary string.""" @@ -493,9 +496,7 @@ def query(starttime, endtime, output=None, *filenames): with open(filename, "r") as stream: for header, packet in stream: if packet is not None: - if ( - starttime <= header.timestamp <= endtime - ): + if starttime <= header.timestamp <= endtime: outfile.write(packet, header=header) diff --git a/ait/core/seq.py b/ait/core/seq.py index c3fe06db..0fc3593d 100644 --- a/ait/core/seq.py +++ b/ait/core/seq.py @@ -11,21 +11,20 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ AIT Sequences The ait.core.seq module provides sequences of commands. """ - from __future__ import absolute_import -import os import math +import os import struct import sys -from ait.core import cmd, util +from ait.core import cmd +from ait.core import util def set_bit(value, bit, bitval): @@ -202,7 +201,7 @@ def read_text(self, filename=None): in_body = False with open(filename, "rt") as stream: - for (lineno, line) in enumerate(stream.readlines()): + for lineno, line in enumerate(stream.readlines()): stripped = line.strip() if stripped == "": continue diff --git a/ait/core/server/__init__.py b/ait/core/server/__init__.py index 2e0bc635..6eee2fd4 100644 --- a/ait/core/server/__init__.py +++ b/ait/core/server/__init__.py @@ -1,6 +1,8 @@ from .broker import * # noqa -from .server import * # noqa -from .plugin import Plugin, PluginType, PluginConfig # noqa +from .config import ZmqConfig # noqa from .handler import Handler # noqa +from .plugin import Plugin # noqa +from .plugin import PluginConfig # noqa +from .plugin import PluginType # noqa from .process import * # noqa -from .config import ZmqConfig # noqa +from .server import * # noqa diff --git a/ait/core/server/broker.py b/ait/core/server/broker.py index 72c4e308..6908c7af 100644 --- a/ait/core/server/broker.py +++ b/ait/core/server/broker.py @@ -1,6 +1,5 @@ -import zmq.green as zmq -import gevent import gevent.monkey +import zmq.green as zmq gevent.monkey.patch_all() @@ -86,7 +85,8 @@ def _subscribe_all(self): log.warn( f"The outbound stream {output} does not " "exist so will not receive messages " - f"from {plugin}") + f"from {plugin}" + ) else: Broker.subscribe(subscriber, plugin.name) @@ -128,15 +128,18 @@ def _subscribe_cmdr(self): log.warn( f"Multiple output streams found with {cmd_sub_flag_field} " f"field enabled, {cmd_stream.name} was selected as the " - "default.") + "default." + ) # No stream yet, so just grab the first output stream if cmd_stream is None: cmd_stream = next((x for x in self.outbound_streams), None) if cmd_stream is not None: - log.warn("No output stream was designated as the command " - f"subscriber, {cmd_stream.name} was selected as " - "the default.") + log.warn( + "No output stream was designated as the command " + f"subscriber, {cmd_stream.name} was selected as " + "the default." + ) if cmd_stream is not None: Broker.subscribe(cmd_stream, self.command_topic) @@ -163,14 +166,14 @@ def subscribe_to_output(self, output_name, topic_name): # Search for output stream instance by name subscriber = next( - (x for x in self.outbound_streams if - x.name == output_name), None + (x for x in self.outbound_streams if x.name == output_name), None ) if subscriber is None: log.warn( f"The outbound stream {output_name} does not " "exist so will not receive messages " - f"from {topic_name}") + f"from {topic_name}" + ) return False else: # Finally, setup the output stream's subscription diff --git a/ait/core/server/client.py b/ait/core/server/client.py index 6c673caf..8cf8baef 100644 --- a/ait/core/server/client.py +++ b/ait/core/server/client.py @@ -1,7 +1,6 @@ -import gevent -import gevent.socket -import gevent.server as gs import gevent.monkey +import gevent.server as gs +import gevent.socket gevent.monkey.patch_all() @@ -27,13 +26,12 @@ def __init__( zmq_proxy_xpub_url=ait.SERVER_DEFAULT_XPUB_URL, **kwargs, ): - self.context = zmq_context # open PUB socket & connect to broker self.pub = self.context.socket(zmq.PUB) self.pub.connect(zmq_proxy_xsub_url.replace("*", "localhost")) - if 'listener' in kwargs and isinstance(kwargs['listener'], int) : - kwargs['listener'] = "127.0.0.1:"+str(kwargs['listener']) + if "listener" in kwargs and isinstance(kwargs["listener"], int): + kwargs["listener"] = "127.0.0.1:" + str(kwargs["listener"]) # calls gevent.Greenlet or gs.DatagramServer __init__ super(ZMQClient, self).__init__(**kwargs) @@ -89,7 +87,6 @@ def __init__( zmq_proxy_xpub_url=ait.SERVER_DEFAULT_XPUB_URL, **kwargs, ): - super(ZMQInputClient, self).__init__( zmq_context, zmq_proxy_xsub_url, zmq_proxy_xpub_url ) @@ -134,7 +131,6 @@ def __init__( zmq_proxy_xpub_url=ait.SERVER_DEFAULT_XPUB_URL, **kwargs, ): - super(PortOutputClient, self).__init__( zmq_context, zmq_proxy_xsub_url, zmq_proxy_xpub_url ) @@ -162,7 +158,6 @@ def __init__( zmq_proxy_xpub_url=ait.SERVER_DEFAULT_XPUB_URL, **kwargs, ): - if "input" in kwargs and type(kwargs["input"][0]) is int: super(PortInputClient, self).__init__( zmq_context, diff --git a/ait/core/server/config.py b/ait/core/server/config.py index 7835362c..4b564ec3 100644 --- a/ait/core/server/config.py +++ b/ait/core/server/config.py @@ -1,4 +1,3 @@ -import ait.core import ait.core.server @@ -6,6 +5,7 @@ class ZmqConfig: """ Configuration methods associated with ZeroMQ """ + @staticmethod def get_xsub_url(): return ait.config.get("server.xsub", ait.SERVER_DEFAULT_XSUB_URL) diff --git a/ait/core/server/handler.py b/ait/core/server/handler.py index 9182c7d2..24d33c22 100755 --- a/ait/core/server/handler.py +++ b/ait/core/server/handler.py @@ -1,4 +1,5 @@ -from abc import ABCMeta, abstractmethod +from abc import ABCMeta +from abc import abstractmethod class Handler(object): diff --git a/ait/core/server/handlers/ccsds_packet_handler.py b/ait/core/server/handlers/ccsds_packet_handler.py index f9335e89..92e80a75 100644 --- a/ait/core/server/handlers/ccsds_packet_handler.py +++ b/ait/core/server/handlers/ccsds_packet_handler.py @@ -1,9 +1,9 @@ -import pickle import binascii -import ait.core.log +import pickle -from ait.core.server.handler import Handler +import ait.core.log from ait.core import tlm +from ait.core.server.handler import Handler class CCSDSPacketHandler(Handler): diff --git a/ait/core/server/handlers/packet_handler.py b/ait/core/server/handlers/packet_handler.py index 1ec845dc..c78f1cea 100644 --- a/ait/core/server/handlers/packet_handler.py +++ b/ait/core/server/handlers/packet_handler.py @@ -1,7 +1,7 @@ import pickle -from ait.core.server.handler import Handler from ait.core import tlm +from ait.core.server.handler import Handler class PacketHandler(Handler): diff --git a/ait/core/server/plugins/PacketAccumulator.py b/ait/core/server/plugins/PacketAccumulator.py index 17479b6a..c744d4a5 100644 --- a/ait/core/server/plugins/PacketAccumulator.py +++ b/ait/core/server/plugins/PacketAccumulator.py @@ -1,9 +1,18 @@ +from gevent import Greenlet +from gevent import sleep + from ait.core.server.plugins import Plugin -from gevent import Greenlet, sleep class PacketAccumulator(Plugin): - def __init__(self, inputs=None, outputs=None, zmq_args=None, timer_seconds=1, max_size_octets=1024): + def __init__( + self, + inputs=None, + outputs=None, + zmq_args=None, + timer_seconds=1, + max_size_octets=1024, + ): super().__init__(inputs, outputs, zmq_args) self.packet_queue = [] diff --git a/ait/core/server/plugins/PacketPadder.py b/ait/core/server/plugins/PacketPadder.py index d5bbf35a..9b029fa3 100644 --- a/ait/core/server/plugins/PacketPadder.py +++ b/ait/core/server/plugins/PacketPadder.py @@ -1,15 +1,19 @@ -from ait.core.server.plugins import Plugin from ait.core import log +from ait.core.server.plugins import Plugin class PacketPadder(Plugin): - def __init__(self, inputs=None, outputs=None, zmq_args=None, pad_octets=0, **kwargs): + def __init__( + self, inputs=None, outputs=None, zmq_args=None, pad_octets=0, **kwargs + ): if pad_octets >= 0: self.size_pad_octets = pad_octets else: self.size_pad_octets = 0 - log.error(f"PacketPadder -> Pad value{pad_octets} octets must be a \ - positive integer! Bypassing padding!") + log.error( + f"PacketPadder -> Pad value{pad_octets} octets must be a \ + positive integer! Bypassing padding!" + ) super().__init__(inputs, outputs, zmq_args) def process(self, data, topic=None): diff --git a/ait/core/server/plugins/apid_routing.py b/ait/core/server/plugins/apid_routing.py index f2f4e317..ff486088 100644 --- a/ait/core/server/plugins/apid_routing.py +++ b/ait/core/server/plugins/apid_routing.py @@ -1,6 +1,6 @@ """ Implements a plugin which routes CCSDS packets by APID -""" +""" # fmt: skip import os import yaml diff --git a/ait/core/server/plugins/data_archive.py b/ait/core/server/plugins/data_archive.py index 6eb86448..7000a659 100644 --- a/ait/core/server/plugins/data_archive.py +++ b/ait/core/server/plugins/data_archive.py @@ -11,12 +11,10 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - -from collections import defaultdict -import pickle import importlib +import pickle +from collections import defaultdict -import gevent import gevent.monkey gevent.monkey.patch_all() diff --git a/ait/core/server/plugins/limit_monitor.py b/ait/core/server/plugins/limit_monitor.py index 873b64d2..5cfe47a5 100644 --- a/ait/core/server/plugins/limit_monitor.py +++ b/ait/core/server/plugins/limit_monitor.py @@ -11,11 +11,9 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - -from collections import defaultdict import pickle +from collections import defaultdict -import gevent import gevent.monkey gevent.monkey.patch_all() diff --git a/ait/core/server/plugins/openmct.py b/ait/core/server/plugins/openmct.py index 190e6b91..d757750a 100644 --- a/ait/core/server/plugins/openmct.py +++ b/ait/core/server/plugins/openmct.py @@ -11,7 +11,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ AIT Plugin for OpenMCT Telemetry service @@ -20,16 +19,14 @@ framework for realtime and, eventually, historical telemetry from AIT. """ - -import pickle import datetime import json +import pickle import random import struct import sys import webbrowser -import gevent import gevent.monkey gevent.monkey.patch_all() @@ -44,10 +41,11 @@ from ait.core.server.plugin import Plugin -class ManagedWebSocket(): +class ManagedWebSocket: """ A data structure to maintain state for OpenMCT websockets """ + id_counter = 0 # to assign unique ids PACKET_ID_WILDCARD = "*" @@ -141,12 +139,12 @@ def create_subscribed_packet(self, omc_packet): :param omc_packet: Full OpenMCT packet with all fields :return: New modified packet if any match in fields, else None """ - packet_id = omc_packet['packet'] + packet_id = omc_packet["packet"] if not self.accepts_packet(packet_id): return None # Grab the original field data dict - orig_fld_dict = omc_packet['data'] + orig_fld_dict = omc_packet["data"] if not orig_fld_dict: return None @@ -160,7 +158,7 @@ def create_subscribed_packet(self, omc_packet): filt_fld_dict = {k: v for k, v in orig_fld_dict.items() if k in field_set} # If filtered dict is non-empty, then build new packet for return if filt_fld_dict: - sub_pkt = {'packet': packet_id, 'data': filt_fld_dict} + sub_pkt = {"packet": packet_id, "data": filt_fld_dict} return sub_pkt @@ -229,7 +227,9 @@ def format_tlmdict_for_openmct(ait_tlm_dict): mct_field_dict = dict() # mct_field_dict['key'] = ait_pkt_id + "." + ait_field_id - mct_field_dict["key"] = DictUtils.create_mct_pkt_id(ait_pkt_id, ait_field_id) + mct_field_dict["key"] = DictUtils.create_mct_pkt_id( + ait_pkt_id, ait_field_id + ) mct_field_dict["name"] = ait_field_def.name mct_field_dict["name"] = ait_pkt_id + ":" + ait_field_def.name @@ -298,7 +298,7 @@ def create_mct_fieldmap(ait_pkt_fld_def): tmax = 2 ** (tnbits - 1) tmin = -1 * (tmax - 1) elif not tstring: - tmax = 2 ** tnbits - 1 + tmax = 2**tnbits - 1 tmin = 0 if tmin is not None: @@ -357,7 +357,7 @@ def __init__( outputs, zmq_args=None, datastore="ait.core.db.InfluxDBBackend", - **kwargs + **kwargs, ): """ Params: @@ -457,7 +457,6 @@ def load_database(self, **kwargs): dbconn = None if self._databaseEnabled: - # Perform sanity check that database config exists somewhere db_cfg = ait.config.get("database", kwargs.get("database", None)) if not db_cfg: @@ -506,12 +505,16 @@ def process(self, input_data, topic=None): self._process_telem_msg(tlm_packet) processed = True else: - log.error("OpenMCT Plugin received telemetry message with unknown " - f"packet id {pkt_id}. Skipping input...") + log.error( + "OpenMCT Plugin received telemetry message with unknown " + f"packet id {pkt_id}. Skipping input..." + ) except Exception as e: log.error(f"OpenMCT Plugin: {e}") - log.error("OpenMCT Plugin received input_data that it is unable to " - "process. Skipping input ...") + log.error( + "OpenMCT Plugin received input_data that it is unable to " + "process. Skipping input ..." + ) return processed @@ -633,12 +636,11 @@ def get_realtime_tlm_original_dumb(self): try: while not websocket.closed: - message = None with Timeout(3, False): message = websocket.receive() if message: - self.dbg_message("Received websocket message: "+message) + self.dbg_message("Received websocket message: " + message) else: self.dbg_message("Received NO websocket message") @@ -651,7 +653,9 @@ def get_realtime_tlm_original_dumb(self): ait_pkt = ait.core.tlm.Packet(pkt_defn, data=data) - packet_id, openmct_pkt = DictUtils.format_tlmpkt_for_openmct(ait_pkt) + packet_id, openmct_pkt = DictUtils.format_tlmpkt_for_openmct( + ait_pkt + ) openmct_pkt_jsonstr = json.dumps( openmct_pkt, default=self.datetime_jsonifier @@ -713,7 +717,9 @@ def manage_web_socket(self, mws): managed set and this method returns :param mws: Managed web-socket instance """ - self.dbg_message(f"Adding record for new web-socket ID:{mws.id} with IP: {mws.client_ip}") + self.dbg_message( + f"Adding record for new web-socket ID:{mws.id} with IP: {mws.client_ip}" + ) self._socket_set.add(mws) while mws.is_alive: @@ -724,7 +730,7 @@ def manage_web_socket(self, mws): gsleep(AITOpenMctPlugin.DEFAULT_WEBSOCKET_CHECK_SLEEP_SECS) # Web-socket is considered closed, so remove from set and return - rem_msg_state = 'err' if mws.is_error else 'closed' + rem_msg_state = "err" if mws.is_error else "closed" self.dbg_message(f"Removing {rem_msg_state} web-socket record ID {mws.id}") self._socket_set.remove(mws) @@ -740,8 +746,10 @@ def get_historical_tlm(self, mct_pkt_id): # Set the content type of response for OpenMct to know its JSON bottle.response.content_type = "application/json" - self.dbg_message("Received request for historical tlm: " - f"Ids={mct_pkt_id} Start={start_time_ms} End={end_time_ms}") + self.dbg_message( + "Received request for historical tlm: " + f"Ids={mct_pkt_id} Start={start_time_ms} End={end_time_ms}" + ) # The tutorial indicated that this could be a comma-separated list of ids... # If its a single, then this will create a list with one entry @@ -754,8 +762,10 @@ def get_historical_tlm(self, mct_pkt_id): # Dump results to JSON string json_result = json.dumps(results) - self.dbg_message(f"Result for historical tlm ( {start_time_ms} " - f"- {end_time_ms} ): {json_result}") + self.dbg_message( + f"Result for historical tlm ( {start_time_ms} " + f"- {end_time_ms} ): {json_result}" + ) return json_result @@ -851,8 +861,9 @@ def get_historical_tlm_for_packet_fields( end_timestamp_secs, tz=datetime.timezone.utc ) - query_args_str = f"Packets = {packet_ids}; Start = {start_date};" \ - f" End = {end_date}" + query_args_str = ( + f"Packets = {packet_ids}; Start = {start_date};" f" End = {end_date}" + ) self.dbg_message(f"Query args : {query_args_str}") # default response is empty @@ -880,15 +891,16 @@ def get_historical_tlm_for_packet_fields( res_pkts = list(ait_db_result.get_packets()) # Debug result size - self.dbg_message(f"Number of results for query " - f"{query_args_str} : {len(res_pkts)}") + self.dbg_message( + f"Number of results for query " + f"{query_args_str} : {len(res_pkts)}" + ) except Exception as e: log.error("[OpenMCT] Database query failed. Error: " + str(e)) return None for cur_pkt_time, cur_pkt in res_pkts: - # Convert datetime to Javascript timestamp (in milliseconds) cur_timestamp_sec = datetime.datetime.timestamp(cur_pkt_time) unix_timestamp_msec = int(cur_timestamp_sec) * 1000 @@ -941,7 +953,6 @@ def mimic_tlm(self, ait_tlm_pkt_name, ait_tlm_pkt_fill=None): info_msg = "" while True: - # Special handling for simply integer based packet, others will # have all 0 zero if ait_pkt_defn.name == "1553_HS_Packet": @@ -994,7 +1005,9 @@ def poll_telemetry(self): """ try: self.dbg_message("Polling Telemetry queue...") - ait_pkt = self._tlmQueue.popleft(timeout=self.DEFAULT_TELEM_QUEUE_TIMEOUT_SECS) + ait_pkt = self._tlmQueue.popleft( + timeout=self.DEFAULT_TELEM_QUEUE_TIMEOUT_SECS + ) openmct_pkt = DictUtils.format_tlmpkt_for_openmct(ait_pkt) self.dbg_message(f"Broadcasting {openmct_pkt} to managed web-sockets...") self.broadcast_packet(openmct_pkt) @@ -1023,8 +1036,9 @@ def broadcast_packet(self, openmct_pkt): openmct_pkt_id = openmct_pkt["packet"] for mws in self._socket_set: - pkt_emitted_by_cur = self.send_socket_pkt_mesg(mws, - openmct_pkt_id, openmct_pkt) + pkt_emitted_by_cur = self.send_socket_pkt_mesg( + mws, openmct_pkt_id, openmct_pkt + ) pkt_emitted_by_any = pkt_emitted_by_cur or pkt_emitted_by_any return pkt_emitted_by_any @@ -1051,10 +1065,11 @@ def send_socket_pkt_mesg(self, mws, pkt_id, mct_pkt): subscribed_pkt = mws.create_subscribed_packet(mct_pkt) # If that new packet still has fields, stringify and send if subscribed_pkt: - pkt_mesg = json.dumps(subscribed_pkt, - default=self.datetime_jsonifier) - self.dbg_message("Sending realtime telemetry web-socket msg " - f"to websocket {mws.id}: {pkt_mesg}") + pkt_mesg = json.dumps(subscribed_pkt, default=self.datetime_jsonifier) + self.dbg_message( + "Sending realtime telemetry web-socket msg " + f"to websocket {mws.id}: {pkt_mesg}" + ) self.managed_web_socket_send(mws, pkt_mesg) return True @@ -1064,11 +1079,11 @@ def send_socket_pkt_mesg(self, mws, pkt_id, mct_pkt): @staticmethod def managed_web_socket_recv(mws): - ''' + """ Attempts to read message from the websocket with timeout. :param mws: Managed web-socket instance :return: Message retrieved from underlying-websocket, or None - ''' + """ message = None try: with Timeout(AITOpenMctPlugin.DEFAULT_WS_RECV_TIMEOUT_SECS, False): @@ -1080,16 +1095,18 @@ def managed_web_socket_recv(mws): @staticmethod def managed_web_socket_send(mws, message): - ''' + """ Sends message to underlying web-socket :param mws: Managed web-socket instance :param message: Message to be sent - ''' + """ if mws.is_alive: try: mws.web_socket.send(message) except geventwebsocket.WebSocketError as wserr: - log.warn(f"Error while writing to web-socket {mws.id}; Message:'{message}'; Error: {wserr}") + log.warn( + f"Error while writing to web-socket {mws.id}; Message:'{message}'; Error: {wserr}" + ) mws.set_error() # --------------------------------------------------------------------- @@ -1148,13 +1165,15 @@ def process_websocket_mesg(self, mws, message): """ msg_parts = message.split(" ", 1) directive = msg_parts[0] - if directive == 'close': - self.dbg_message(f"Received 'close' message. Marking web-socket ID {mws.id} as closed") + if directive == "close": + self.dbg_message( + f"Received 'close' message. Marking web-socket ID {mws.id} as closed" + ) mws.is_closed = True - elif directive == 'subscribe' and len(msg_parts) > 1: + elif directive == "subscribe" and len(msg_parts) > 1: self.dbg_message(f"Subscribing websocket {mws.id} to: {msg_parts[1]}") mws.subscribe_field(msg_parts[1]) - elif directive == 'unsubscribe': + elif directive == "unsubscribe": self.dbg_message(f"Unsubscribing websocket {mws.id} from: {msg_parts[1]}") mws.unsubscribe_field(msg_parts[1]) else: diff --git a/ait/core/server/process.py b/ait/core/server/process.py index a02c1e01..0bdd26f2 100644 --- a/ait/core/server/process.py +++ b/ait/core/server/process.py @@ -1,14 +1,14 @@ -import zmq.green as zmq - import copy import sys + import gevent import gipc # type: ignore import setproctitle # type: ignore +import zmq.green as zmq -from ait.core import log -from .plugin import Plugin from .broker import Broker +from .plugin import Plugin +from ait.core import log class PluginsProcess(object): @@ -55,8 +55,9 @@ def get_plugin_names(self, use_short_names=True): Returns a list of plugin names (short versions) managed by instance Returns: List of plugin names """ - return [pi.short_name if use_short_names else pi.name - for pi in self._plugin_infos] + return [ + pi.short_name if use_short_names else pi.name for pi in self._plugin_infos + ] def get_plugin_outputs(self, use_short_names=True): """ @@ -93,8 +94,9 @@ def add_plugin_info(self, plugin_info): RuntimeError if the process is already running """ if self._spawned: - raise RuntimeError("Cannot add plugin info after process has " - "been spawned") + raise RuntimeError( + "Cannot add plugin info after process has " "been spawned" + ) if plugin_info is not None: self._plugin_infos.append(plugin_info) @@ -147,7 +149,6 @@ def start_plugins_process(namespace, plugin_info_list): @staticmethod def load_plugins(namespace, plugin_info_list): - # List of plugins to be returned plugin_list = [] @@ -161,17 +162,23 @@ def load_plugins(namespace, plugin_info_list): try: plugin = PluginsProcess.create_plugin(p_info, proc_context) if plugin is None: - log.info(f"Unable to create {plugin_name}, will not be " - f"added to {namespace} plugins list") + log.info( + f"Unable to create {plugin_name}, will not be " + f"added to {namespace} plugins list" + ) else: - log.debug(f"Adding process-greenlet '{plugin_name}' to " - f"'{namespace}' plugins list") + log.debug( + f"Adding process-greenlet '{plugin_name}' to " + f"'{namespace}' plugins list" + ) plugin_list.append(plugin) except Exception: exc_type, exc_value, tb = sys.exc_info() - log.error(f"{exc_type} creating plugin '{plugin_name}'' for " - f"process '{namespace}'': {exc_value}") + log.error( + f"{exc_type} creating plugin '{plugin_name}'' for " + f"process '{namespace}'': {exc_value}" + ) return plugin_list @@ -229,8 +236,7 @@ def start_and_join_all(namespace, plugin_list): # Start all of the plugin-gevents for greenlet in plugin_list: - log.info(f"Starting {greenlet} greenlet in process " - f"'{namespace}'...") + log.info(f"Starting {greenlet} greenlet in process " f"'{namespace}'...") greenlet.start() # Wait for Plugins to finish diff --git a/ait/core/server/stream.py b/ait/core/server/stream.py index dd789953..86b1a2ae 100644 --- a/ait/core/server/stream.py +++ b/ait/core/server/stream.py @@ -1,8 +1,10 @@ import ait.core.log -from .client import ZMQInputClient, PortInputClient, PortOutputClient +from .client import PortInputClient +from .client import PortOutputClient +from .client import ZMQInputClient -class Stream(): +class Stream: """ This is the base Stream class that all streams will inherit from. It calls its handlers to execute on all input messages sequentially, diff --git a/ait/core/server/utils.py b/ait/core/server/utils.py index dc651d1c..02eb49ee 100644 --- a/ait/core/server/utils.py +++ b/ait/core/server/utils.py @@ -11,8 +11,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - - import pickle diff --git a/ait/core/util.py b/ait/core/util.py index d0e6d3b0..74f7ce13 100755 --- a/ait/core/util.py +++ b/ait/core/util.py @@ -1,5 +1,4 @@ #!/usr/bin/env python2.7 - # Advanced Multi-Mission Operations System (AMMOS) Instrument Toolkit (AIT) # Bespoke Link to Instruments and Small Satellites (BLISS) # @@ -13,23 +12,20 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """ AIT Utilities The ait.core.util module provides general utility functions. """ - import os +import pickle import pydoc import stat import sys -import time -import zlib import tempfile +import time import warnings - -import pickle +import zlib import ait from ait.core import log @@ -82,7 +78,7 @@ def load(self): if self.dirty: self._dict = self._loader(self.filename) update_cache(self.filename, self.cachename, self._dict) - log.info(f'Loaded new pickle file: {self.cachename}') + log.info(f"Loaded new pickle file: {self.cachename}") else: with open(self.cachename, "rb") as stream: self._dict = pickle.load(stream) @@ -122,11 +118,11 @@ def check_yaml_timestamps(yaml_file_name, cache_name): """ # If no pickle cache exists return True to make a new one. if not os.path.exists(cache_name): - log.debug('No pickle cache exists, make a new one') + log.debug("No pickle cache exists, make a new one") return True # Has the yaml config file has been modified since the creation of the pickle cache if os.path.getmtime(yaml_file_name) > os.path.getmtime(cache_name): - log.info(f'{yaml_file_name} modified - make a new binary pickle cache file.') + log.info(f"{yaml_file_name} modified - make a new binary pickle cache file.") return True # Get the directory of the yaml config file to be parsed dir_name = os.path.dirname(yaml_file_name) @@ -136,12 +132,13 @@ def check_yaml_timestamps(yaml_file_name, cache_name): for line in file: if not line.strip().startswith("#") and "!include" in line: check = check_yaml_timestamps( - os.path.join(dir_name, line.strip().split(" ")[2]), cache_name) + os.path.join(dir_name, line.strip().split(" ")[2]), cache_name + ) if check: return True except RecursionError as e: log.info( - f'ERROR: {e}: Infinite loop: check that yaml config files are not looping ' + f"ERROR: {e}: Infinite loop: check that yaml config files are not looping " f'back and forth on one another through the "!include" statements.' ) return False @@ -162,7 +159,7 @@ def update_cache(yaml_file_name, cache_file_name, object_to_serialize): """ - msg = f'Saving updates from more recent {yaml_file_name} to {cache_file_name}.' + msg = f"Saving updates from more recent {yaml_file_name} to {cache_file_name}." log.info(msg) with open(cache_file_name, "wb") as output: pickle.dump(object_to_serialize, output, -1) @@ -520,6 +517,7 @@ class TestFile: Whether the above assert passes or throws AssertionError, filename will be deleted. """ + __test__ = False def __init__(self, data, options): diff --git a/poetry.lock b/poetry.lock index e9a27d67..c8c58381 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "alabaster" @@ -13,25 +13,25 @@ files = [ [[package]] name = "attrs" -version = "23.2.0" +version = "24.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, ] [package.dependencies] importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "babel" @@ -131,13 +131,13 @@ files = [ [[package]] name = "certifi" -version = "2024.6.2" +version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, - {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] @@ -229,101 +229,116 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] [[package]] @@ -429,43 +444,38 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "42.0.8" +version = "43.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e"}, - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7"}, - {file = "cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2"}, - {file = "cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba"}, - {file = "cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14"}, - {file = "cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c"}, - {file = "cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad"}, - {file = "cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2"}, + {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73"}, + {file = "cryptography-43.0.3-cp37-abi3-win32.whl", hash = "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2"}, + {file = "cryptography-43.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd"}, + {file = "cryptography-43.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73"}, + {file = "cryptography-43.0.3-cp39-abi3-win32.whl", hash = "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995"}, + {file = "cryptography-43.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, + {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, ] [package.dependencies] @@ -478,18 +488,18 @@ nox = ["nox"] pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] [[package]] name = "distlib" -version = "0.3.8" +version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, - {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, ] [[package]] @@ -515,13 +525,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.1" +version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] [package.extras] @@ -761,15 +771,18 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.7" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + [[package]] name = "imagesize" version = "1.4.1" @@ -1375,24 +1388,24 @@ testing = ["filelock"] [[package]] name = "pytz" -version = "2024.1" +version = "2024.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, - {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, + {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, + {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, ] [[package]] name = "pywin32-ctypes" -version = "0.2.2" +version = "0.2.3" description = "A (partial) reimplementation of pywin32 using ctypes/cffi" optional = false python-versions = ">=3.6" files = [ - {file = "pywin32-ctypes-0.2.2.tar.gz", hash = "sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60"}, - {file = "pywin32_ctypes-0.2.2-py3-none-any.whl", hash = "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"}, + {file = "pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755"}, + {file = "pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8"}, ] [[package]] @@ -1974,13 +1987,13 @@ testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pathlib2 (>=2.3.3)", "psu [[package]] name = "tqdm" -version = "4.66.4" +version = "4.66.5" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, - {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, + {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, + {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, ] [package.dependencies] diff --git a/setup.cfg b/setup.cfg index 733a9057..8e2cb597 100644 --- a/setup.cfg +++ b/setup.cfg @@ -15,6 +15,7 @@ omit = */_version.py,*/__init__.py,*/bin/*,*/test/* [flake8] extend-exclude = versioneer.py,_version.py,docs,doc,tests,test,setup.py +max-line-length = 120 # Line breaks before/after a binary operator, allow them since it # is not clear how to resolve while making code readable diff --git a/tests/ait/core/__init__.py b/tests/ait/core/__init__.py index d7d02924..44688757 100644 --- a/tests/ait/core/__init__.py +++ b/tests/ait/core/__init__.py @@ -11,7 +11,6 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - """AIT Unit and Functional Tests""" import logging diff --git a/tests/ait/core/server/test_apid_routing.py b/tests/ait/core/server/test_apid_routing.py index 5dd12263..d1f00424 100644 --- a/tests/ait/core/server/test_apid_routing.py +++ b/tests/ait/core/server/test_apid_routing.py @@ -1,6 +1,6 @@ import unittest - from unittest.mock import patch + from ait.core import log from ait.core.server.plugins.apid_routing import APIDRouter from ait.core.util import TestFile @@ -11,11 +11,11 @@ def __init__(self, apid=0): self.apid = apid -def create_test_dict(number_of_packets = 150): +def create_test_dict(number_of_packets=150): test_dict = {} - for i in range(1, number_of_packets+1): + for i in range(1, number_of_packets + 1): packet_name = f"Packet_{i}" - test_dict[packet_name] = TestPacket(apid = i) + test_dict[packet_name] = TestPacket(apid=i) return test_dict @@ -40,45 +40,61 @@ def routing_table_yaml(): pass with TestFile(routing_table_yaml.__doc__, "wt") as filename: + def new_init(self, routing_table=None, default_topic=None): self.default_topic = default_topic - if 'path' in routing_table: - self.routing_table_object = self.load_table_yaml(routing_table['path'], create_test_dict(10)) + if "path" in routing_table: + self.routing_table_object = self.load_table_yaml( + routing_table["path"], create_test_dict(10) + ) else: self.routing_table_object = None log.error("no path specified for routing table") if self.routing_table_object is None: log.error("Unable to load routing table .yaml file") - with patch.object(APIDRouter, '__init__', new_init): - router_plugin_instance = APIDRouter(routing_table={'path': filename}, default_topic= "test_default_topic") + with patch.object(APIDRouter, "__init__", new_init): + router_plugin_instance = APIDRouter( + routing_table={"path": filename}, default_topic="test_default_topic" + ) def test_routing_table(self): test_routing_table_dict = { - 1: ['test_default_topic', 'telem_topic_1'], - 2: ['test_default_topic', 'telem_topic_2'], - 3: ['test_default_topic'], - 4: ['test_default_topic', 'telem_topic_2'], - 5: ['test_default_topic', 'telem_topic_2'], - 6: ['test_default_topic'], - 7: ['test_default_topic', 'telem_topic_1', 'telem_topic_2'], - 8: ['test_default_topic', 'telem_topic_2'], - 9: ['test_default_topic', 'telem_topic_2'], - 10: ['test_default_topic'] - } - self.assertEqual(self.router_plugin_instance.routing_table_object, test_routing_table_dict) + 1: ["test_default_topic", "telem_topic_1"], + 2: ["test_default_topic", "telem_topic_2"], + 3: ["test_default_topic"], + 4: ["test_default_topic", "telem_topic_2"], + 5: ["test_default_topic", "telem_topic_2"], + 6: ["test_default_topic"], + 7: ["test_default_topic", "telem_topic_1", "telem_topic_2"], + 8: ["test_default_topic", "telem_topic_2"], + 9: ["test_default_topic", "telem_topic_2"], + 10: ["test_default_topic"], + } + self.assertEqual( + self.router_plugin_instance.routing_table_object, test_routing_table_dict + ) def test_apid_extraction1(self): - test_bytearray = bytearray(b'\x00\x1f\x75\x94\xfa\xdc\x43\x90\x9a\x8c\xff\xe0') - self.assertEqual(self.router_plugin_instance.get_packet_apid(test_bytearray), 31) + test_bytearray = bytearray(b"\x00\x1f\x75\x94\xfa\xdc\x43\x90\x9a\x8c\xff\xe0") + self.assertEqual( + self.router_plugin_instance.get_packet_apid(test_bytearray), 31 + ) def test_apid_extraction2(self): - test_bytearray = bytearray(b'\x01\x03\x75\x94\xfa\xdc\x43\x90\x9a\x8c\xff\xe0') - self.assertEqual(self.router_plugin_instance.get_packet_apid(test_bytearray), 259) + test_bytearray = bytearray(b"\x01\x03\x75\x94\xfa\xdc\x43\x90\x9a\x8c\xff\xe0") + self.assertEqual( + self.router_plugin_instance.get_packet_apid(test_bytearray), 259 + ) def test_get_topics(self): - test_bytearray = bytearray(b'\x00\x07\x75\x94\xfa\xdc\x43\x90\x9a\x8c\xff\xe0') - test_bytearray_apid = self.router_plugin_instance.get_packet_apid(test_bytearray) - expected_topics = ['test_default_topic', 'telem_topic_1', 'telem_topic_2'] - self.assertEqual(self.router_plugin_instance.routing_table_object[test_bytearray_apid], expected_topics) + test_bytearray = bytearray(b"\x00\x07\x75\x94\xfa\xdc\x43\x90\x9a\x8c\xff\xe0") + test_bytearray_apid = self.router_plugin_instance.get_packet_apid( + test_bytearray + ) + expected_topics = ["test_default_topic", "telem_topic_1", "telem_topic_2"] + self.assertEqual( + self.router_plugin_instance.routing_table_object[test_bytearray_apid], + expected_topics, + ) diff --git a/tests/ait/core/server/test_handler.py b/tests/ait/core/server/test_handler.py index f4d32252..5025294a 100644 --- a/tests/ait/core/server/test_handler.py +++ b/tests/ait/core/server/test_handler.py @@ -8,7 +8,6 @@ class TestCCSDSPacketCheck(unittest.TestCase): - # Check if packet length is at least 7 bytes def test_ccsds_packet_length(self): handler = CCSDSPacketHandler(packet_types={"01011100111": "CCSDS_HEADER"}) diff --git a/tests/ait/core/test_cmd.py b/tests/ait/core/test_cmd.py index 1a7d3a61..dab458be 100644 --- a/tests/ait/core/test_cmd.py +++ b/tests/ait/core/test_cmd.py @@ -12,6 +12,7 @@ # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. import gevent.monkey + gevent.monkey.patch_all() import struct @@ -142,30 +143,32 @@ def testGetDefaultDict(): assert cmddict is not None assert isinstance(cmddict, cmd.CmdDict) + def testGetDefaultDictWithExtension(testGetDefaultDictWithExtension_setup_teardown): cd = cmd.getDefaultDict() assert type(cd) == TestCmdDict + @pytest.fixture def testGetDefaultDictWithExtension_setup_teardown(): - cfg_yml = ''' + cfg_yml = """ default: extensions: ait.core.cmd.CmdDict: tests.ait.core.test_cmd.TestCmdDict - ''' + """ saved_config = ait.config ait.config = cfg.AitConfig(data=cfg_yml) - setattr(cmd, 'DefaultDict', None) # Reset DefaultDict being cached - importlib.reload(cmd) # Recreate createCmdDict method + setattr(cmd, "DefaultDict", None) # Reset DefaultDict being cached + importlib.reload(cmd) # Recreate createCmdDict method yield ait.config = saved_config - setattr(cmd, 'DefaultDict', None) # Reset DefaultDict being cached - importlib.reload(cmd) # Recreate createCmdDict method - importlib.reload(tlm) # Also reload tlm default schema + setattr(cmd, "DefaultDict", None) # Reset DefaultDict being cached + importlib.reload(cmd) # Recreate createCmdDict method + importlib.reload(tlm) # Also reload tlm default schema class TestCmdDict(cmd.CmdDict): - __test__ = False # prevents pytest PytestCollectionWarning + __test__ = False # prevents pytest PytestCollectionWarning def __init__(self, *args, **kwargs): super(TestCmdDict, self).__init__(*args, **kwargs) diff --git a/tests/ait/core/test_db.py b/tests/ait/core/test_db.py index 9eb8d0f1..3ee59773 100644 --- a/tests/ait/core/test_db.py +++ b/tests/ait/core/test_db.py @@ -446,7 +446,6 @@ def test_query_packet_time_inclusion(self, importlib_mock): assert isinstance(res_pkts[0], tuple) for i, test_data in enumerate(ret_data[0][1]): - assert dmc.rfc3339_str_to_datetime(test_data["time"]) == res_pkts[i][0] assert res_pkts[i][1].Voltage_A == i @@ -663,7 +662,10 @@ def test_sqlite_insert(self, importlib_mock): 'INSERT INTO "Packet1" (PKTDATA, time) VALUES (?, ?)' in sqlbackend._conn.execute.call_args[0] ) - assert (now.strftime(dmc.RFC3339_Format) == sqlbackend._conn.execute.call_args[0][1][1]) + assert ( + now.strftime(dmc.RFC3339_Format) + == sqlbackend._conn.execute.call_args[0][1][1] + ) os.remove(self.test_yaml_file) diff --git a/tests/ait/core/test_pcap.py b/tests/ait/core/test_pcap.py index 11ad7722..8a76bf96 100644 --- a/tests/ait/core/test_pcap.py +++ b/tests/ait/core/test_pcap.py @@ -11,18 +11,17 @@ # laws and regulations. User has the responsibility to obtain export licenses, # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. - import datetime import os import struct -import warnings import time - +import warnings from unittest import mock from gevent import monkey -from ait.core import dmc, pcap +from ait.core import dmc +from ait.core import pcap from ait.core.util import TestFile monkey.patch_all() @@ -32,7 +31,7 @@ with warnings.catch_warnings(): warnings.simplefilter("ignore") - with TestFile('', "wb") as filename: + with TestFile("", "wb") as filename: TmpFilename = filename diff --git a/tests/ait/core/test_table.py b/tests/ait/core/test_table.py index a02f3047..f5eae461 100644 --- a/tests/ait/core/test_table.py +++ b/tests/ait/core/test_table.py @@ -279,7 +279,7 @@ def test_enum_decode(self): out_file.write(encoded) with open(temp_bin_file, "rb") as out_file: - decoded = defn.decode(file_in=out_file) + decoded = defn.decode(file_in=out_file) # Check header assert decoded[0][0] == 13 diff --git a/tests/ait/core/test_tlm.py b/tests/ait/core/test_tlm.py index 8bff2ec0..b1724698 100644 --- a/tests/ait/core/test_tlm.py +++ b/tests/ait/core/test_tlm.py @@ -12,13 +12,13 @@ # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. # gevent.monkey.patch_all() - import csv import os -import pytest import struct +import pytest from gevent import monkey + monkey.patch_all() from ait.core import tlm diff --git a/tests/ait/core/test_val.py b/tests/ait/core/test_val.py index 8d497d9a..c1731fb2 100644 --- a/tests/ait/core/test_val.py +++ b/tests/ait/core/test_val.py @@ -12,6 +12,7 @@ # or other export authority as may be required before exporting such # information to foreign countries or providing access to foreign persons. import gevent.monkey + gevent.monkey.patch_all() import os @@ -204,6 +205,7 @@ def test_procces_with_single_doc(self, pretty_mock): assert pretty_mock.called pretty_mock.assert_called_with(1, 3, error, messages) + def validate_schema(args): msgs = []