csvpath 0.0.599__tar.gz → 0.0.605__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {csvpath-0.0.599 → csvpath-0.0.605}/PKG-INFO +2 -1
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/.DS_Store +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/azure.bat +8 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/gcs.bat +8 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/local.bat +8 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/s3.bat +8 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/sftp.bat +8 -0
- csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.25-py3-none-any.whl +0 -0
- csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.27-py3-none-any.whl +0 -0
- csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.28-py3-none-any.whl +0 -0
- csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.29-py3-none-any.whl +0 -0
- csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.30.tar.gz +0 -0
- csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.31.tar.gz +0 -0
- csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.33.tar.gz +0 -0
- csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.34.tar.gz +0 -0
- csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.35.tar.gz +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/config/config.ini +4 -4
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/csvpaths.py +40 -32
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/webhook/webhook_results_listener.py +8 -10
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/paths/paths_describer.py +28 -10
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/paths/paths_manager.py +1 -3
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/results_manager.py +55 -8
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/test_listener.py +2 -2
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/config.py +61 -16
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/log_utility.py +17 -5
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/path_util.py +5 -8
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/var_utility.py +21 -26
- {csvpath-0.0.599 → csvpath-0.0.605}/pyproject.toml +4 -3
- {csvpath-0.0.599 → csvpath-0.0.605}/LICENSE +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/README.md +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/config.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/extra-functions.imports +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/function.imports +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-local-azure.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-local-gcs.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-local-s3.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-local-sftp.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-windows-azure.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-windows-gcs.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-windows-local.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-windows-s3.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-windows-sftp.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/.DS_Store +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/Mac.goenvironment.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/Windows.goenvironment.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/azure.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/gcs.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/google-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/local.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/s3.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/sftp.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/.DS_Store +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sqlite/csvpath +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/config/env.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/asker.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/cli.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/const.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/debug_config.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/drill_down.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/function_describer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/function_lister.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/selecter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/csvpath.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/errors/error.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/errors/error_collector.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/errors/error_comms.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/errors/error_manager.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/file_activator.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/file_describer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/file_manager.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/file_metadata.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/file_registrar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/files_activation_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/files_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ckan/ckan.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ckan/datafile.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ckan/dataset.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/event.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/event_result.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/job.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/run.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/run_state.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/sender.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/metrics.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sftpplus/rpc.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/slack/event.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/slack/sender.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/engine.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/tables.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/updates.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/webhook/webhook_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/metadata.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/paths/paths_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/paths/paths_metadata.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/paths/paths_registrar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/registrar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/readers/readers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/result.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/result_file_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/result_metadata.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/result_registrar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/result_serializer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/results_metadata.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/results_registrar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/run/run_listener_stdout.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/run/run_metadata.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/run/run_registrar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/args.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/args_helper.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/all.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/andf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/any.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/between.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/empty.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/exists.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/inf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/no.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/notf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/orf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/yes.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/count.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/count_bytes.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/count_headers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/count_lines.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/count_scans.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/counter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/every.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/has_matches.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/increment.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/tally.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/total_lines.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/dates/now.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/dates/part.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/dates/roll.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/function.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/function_factory.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/function_finder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/function_focus.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/append.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/collect.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/empty_stack.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/end.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/header_name.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/headers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/headers_stack.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/insert.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/line_before.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/mismatch.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/remove.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/rename.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/replace.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/reset_headers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/json/jsonpath.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/advance.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/after_blank.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/dups.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/first.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/first_line.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/last.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/stop.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/above.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/add.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/divide.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/equals.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/intf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/mod.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/multiply.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/odd.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/round.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/subtotal.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/subtract.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/sum.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/misc/fingerprint.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/misc/importf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/misc/parquet.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/misc/random.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/print/jinjaf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/print/print_line.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/print/print_queue.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/print/printf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/print/table.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/sql/sql_in.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/stats/minf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/stats/nminmax.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/stats/percent.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/stats/percent_unique.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/stats/stdev.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/alter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/caps.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/concat.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/contains.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/format.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/length.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/lower.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/metaphone.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/regex.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/starts_with.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/strip.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/substring.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/upper.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/testing/debug.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/blank.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/boolean.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/datatype.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/datef.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/decimal.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/email.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/nonef.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/string.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/type.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/url.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/wildcard.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/validity/fail.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/validity/failed.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/validity/line.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/validity/matches.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/validity/percent_matching.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/clear.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/get.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/index_of.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/pushpop.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/put.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/slice.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/sort.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/track.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/variables.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/xml/xpath.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/lark_parser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/lark_transformer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/matcher.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/equality.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/expression.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/header.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/matchable.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/qualified.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/reference.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/term.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/variable.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/exceptions.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/expression_encoder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/expression_utility.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/lark_print_parser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/parquet_utility.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/print_parser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/runtime_data_collector.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/error_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/explain_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/files_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/logic_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/mode_controller.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/print_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/return_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/run_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/source_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/transfer_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/unmatched_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/validation_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/scanning/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/scanning/scanner2.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/scanning/scanner2_parser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/scanning/scanner2_transformer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_data_writer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_fingerprinter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_json_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_nos.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_utils.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/backend_check.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/box.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/cache.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/caser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/class_loader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/code.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/config_env.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/config_exception.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/date_util.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/exceptions.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/file_info.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/file_readers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/file_utility.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/file_writers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_data_writer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_json_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_nos.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_utils.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/hasher.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/http/http_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/intermediary.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/json/json_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/json/json_reader_helper.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/last_line_stats.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/line_counter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/line_monitor.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/line_spooler.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/metadata_parser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/nos.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/pandas_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/printer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/py_file_utility.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/files_reference_finder_2.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/files_tools/range_finder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/ref_utils.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/reference_exceptions.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/reference_grammar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/reference_parser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/reference_results.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/reference_transformer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_reference_finder_2.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/data_finder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/date_filter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/identity_finder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/path_filter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/token_filters.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/tools/date_completer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/referrer_printer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/run_home_maker.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_data_writer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_fingerprinter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_json_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_nos.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_utils.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_config.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_data_writer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_json_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_nos.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_walk.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sqliter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/template_util.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/xlsx/xlsx_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/xlsx/xlsx_reader_helper.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: csvpath
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.605
|
|
4
4
|
Summary: CsvPath Framework is a data preboarding automation library for receiving, validating, and tracking CSV, Excel, JSONL and other tabular data files before they can corrupt downstream data consumers.
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Author: David Kershaw
|
|
@@ -54,6 +54,7 @@ Requires-Dist: pytest (==8.4.2)
|
|
|
54
54
|
Requires-Dist: python-dateutil (==2.9.0.post0)
|
|
55
55
|
Requires-Dist: pytz (==2024.2)
|
|
56
56
|
Requires-Dist: requests (==2.32.5)
|
|
57
|
+
Requires-Dist: ruff (>=0.15.8,<0.16.0)
|
|
57
58
|
Requires-Dist: smart-open[all] (==7.5.1)
|
|
58
59
|
Requires-Dist: sqlalchemy (==2.0.48)
|
|
59
60
|
Requires-Dist: tabulate (==0.9.0)
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -35,7 +35,7 @@ path = cache
|
|
|
35
35
|
use_cache = yes
|
|
36
36
|
|
|
37
37
|
[functions]
|
|
38
|
-
imports =
|
|
38
|
+
imports =
|
|
39
39
|
|
|
40
40
|
[results]
|
|
41
41
|
archive = tmp/local/archive
|
|
@@ -48,7 +48,7 @@ allow_http_files = True
|
|
|
48
48
|
allow_local_files = True
|
|
49
49
|
|
|
50
50
|
[listeners]
|
|
51
|
-
groups = default
|
|
51
|
+
groups = default
|
|
52
52
|
webhook.results = from csvpath.managers.integrations.webhook.webhook_results_listener import WebhookResultsListener
|
|
53
53
|
scripts.results = from csvpath.managers.integrations.scripts.scripts_results_listener import ScriptsResultsListener
|
|
54
54
|
sql.file = from csvpath.managers.integrations.sql.sql_file_listener import SqlFileListener
|
|
@@ -105,7 +105,7 @@ port = SFTPPLUS_PORT
|
|
|
105
105
|
admin_username = SFTPPLUS_ADMIN_USERNAME
|
|
106
106
|
admin_password = SFTPPLUS_ADMIN_PASSWORD
|
|
107
107
|
api_url = https://. . . :10020/json
|
|
108
|
-
scripts_dir =
|
|
108
|
+
scripts_dir =
|
|
109
109
|
execute_timeout = 300
|
|
110
110
|
|
|
111
111
|
[ckan]
|
|
@@ -120,7 +120,7 @@ timeout = 5
|
|
|
120
120
|
verify = False
|
|
121
121
|
|
|
122
122
|
[slack]
|
|
123
|
-
webhook_url =
|
|
123
|
+
webhook_url =
|
|
124
124
|
|
|
125
125
|
[scripts]
|
|
126
126
|
run_scripts = yes
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
"""
|
|
2
|
-
|
|
1
|
+
"""CsvPaths' intent is to help you manage and automate your use
|
|
2
|
+
of the CsvPath library. it makes it easier to scale your CSV quality control."""
|
|
3
3
|
|
|
4
4
|
import os
|
|
5
5
|
import traceback
|
|
6
6
|
import atexit
|
|
7
7
|
import threading
|
|
8
8
|
|
|
9
|
-
from uuid import uuid4
|
|
9
|
+
from uuid import uuid4
|
|
10
10
|
from abc import ABC, abstractmethod
|
|
11
11
|
from typing import List, Any, NewType
|
|
12
|
-
from datetime import datetime
|
|
12
|
+
from datetime import datetime
|
|
13
13
|
from .managers.errors.error import Error
|
|
14
14
|
from .managers.errors.error_comms import ErrorCommunications
|
|
15
15
|
from .managers.errors.error_manager import ErrorManager
|
|
@@ -26,7 +26,6 @@ from .managers.results.results_manager import ResultsManager
|
|
|
26
26
|
from .managers.results.result import Result
|
|
27
27
|
from .util.box import Box
|
|
28
28
|
from . import CsvPath
|
|
29
|
-
from .managers.integrations.otlp.metrics import Metrics
|
|
30
29
|
|
|
31
30
|
|
|
32
31
|
# types for clarity
|
|
@@ -108,7 +107,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
108
107
|
skip_blank_lines=True,
|
|
109
108
|
print_default=True,
|
|
110
109
|
project_context=None,
|
|
111
|
-
project=None
|
|
110
|
+
project=None,
|
|
112
111
|
# config: Config = None,
|
|
113
112
|
):
|
|
114
113
|
if CsvPaths.METRICS_WRAP_REG is False:
|
|
@@ -219,7 +218,14 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
219
218
|
# that need to know about the run during the run; e.g. parquet()
|
|
220
219
|
#
|
|
221
220
|
self._csvpath_instances = []
|
|
222
|
-
|
|
221
|
+
#
|
|
222
|
+
# any listeners added here will be added to the internal_listeners of
|
|
223
|
+
# the csvpath instances that run.
|
|
224
|
+
#
|
|
225
|
+
self.dynamic_csvpath_error_listeners = []
|
|
226
|
+
#
|
|
227
|
+
#
|
|
228
|
+
#
|
|
223
229
|
self.logger.info(
|
|
224
230
|
f"Initialized CsvPaths: {self} in thread: {threading.current_thread()}"
|
|
225
231
|
)
|
|
@@ -278,40 +284,42 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
278
284
|
return f"""
|
|
279
285
|
Context: {self.project_context}.{self.project}
|
|
280
286
|
Logger: {logstr}
|
|
281
|
-
Configured log path: {self.config.get(section=
|
|
287
|
+
Configured log path: {self.config.get(section="logging", name="log_file")}
|
|
282
288
|
Current log paths: {logpath}
|
|
283
289
|
Config file: {self.config.configpath}
|
|
284
|
-
Var sub source: {self.config.get(section=
|
|
290
|
+
Var sub source: {self.config.get(section="config", name="var_sub_source")}
|
|
285
291
|
Var subs: {subs}
|
|
286
292
|
Errors:
|
|
287
|
-
- csvpath: {self.config.get(section=
|
|
288
|
-
- csvpaths: {self.config.get(section=
|
|
289
|
-
Named-files: {self.config.get(section=
|
|
290
|
-
Named-paths: {self.config.get(section=
|
|
291
|
-
Archive: {self.config.get(section=
|
|
293
|
+
- csvpath: {self.config.get(section="errors", name="csvpath")}
|
|
294
|
+
- csvpaths: {self.config.get(section="errors", name="csvpaths")}
|
|
295
|
+
Named-files: {self.config.get(section="inputs", name="files")}
|
|
296
|
+
Named-paths: {self.config.get(section="inputs", name="files")}
|
|
297
|
+
Archive: {self.config.get(section="results", name="archive")}
|
|
292
298
|
Cache: {cache}
|
|
293
299
|
{lstrs}
|
|
294
300
|
"""
|
|
295
301
|
|
|
296
|
-
"""
|
|
297
|
-
def info_dump(self) -> None:
|
|
298
|
-
self.logger.info(
|
|
299
|
-
"Initated logging on log path: %s",
|
|
300
|
-
self.config.get(section="logging", name="log_file"),
|
|
301
|
-
)
|
|
302
|
-
self.logger.info("Config file is at: %s", self.config.configpath)
|
|
303
|
-
intgs = self.config.get(section="listeners", name="groups")
|
|
304
|
-
self.logger.debug("Active integrations:")
|
|
305
|
-
for _ in intgs:
|
|
306
|
-
self.logger.debug(" - %s", _)
|
|
307
|
-
"""
|
|
308
|
-
|
|
309
302
|
def _set_managers(self) -> None:
|
|
310
303
|
self.paths_manager = PathsManager(csvpaths=self)
|
|
311
304
|
self.file_manager = FileManager(csvpaths=self)
|
|
312
|
-
self.results_manager = ResultsManager(csvpaths=self)
|
|
313
305
|
self.ecoms = ErrorCommunications(csvpaths=self)
|
|
314
306
|
self.error_manager = ErrorManager(csvpaths=self)
|
|
307
|
+
#
|
|
308
|
+
# we take a bit more care with resman because it may have listeners
|
|
309
|
+
# that are set programmatically. other managers deal with their
|
|
310
|
+
# registrars differently and don't have the problem of maintaining
|
|
311
|
+
# lists of listeners at the csvpaths level
|
|
312
|
+
#
|
|
313
|
+
resman = ResultsManager(csvpaths=self)
|
|
314
|
+
if self.results_manager:
|
|
315
|
+
resman.dynamic_result_listeners = (
|
|
316
|
+
self.results_manager.dynamic_result_listeners
|
|
317
|
+
)
|
|
318
|
+
resman.dynamic_results_listeners = (
|
|
319
|
+
self.results_manager.dynamic_results_listeners
|
|
320
|
+
)
|
|
321
|
+
resman.dynamic_run_listeners = self.results_manager.dynamic_run_listeners
|
|
322
|
+
self.results_manager = resman
|
|
315
323
|
|
|
316
324
|
@property
|
|
317
325
|
def project(self) -> str:
|
|
@@ -432,6 +440,8 @@ Cache: {cache}
|
|
|
432
440
|
if path.config.configpath != self.config.configpath:
|
|
433
441
|
path.config.set_config_path_and_reload(self.config.configpath)
|
|
434
442
|
path.logger = None
|
|
443
|
+
for _ in self.dynamic_csvpath_error_listeners:
|
|
444
|
+
path.error_manager.add_internal_listener(_)
|
|
435
445
|
return path
|
|
436
446
|
|
|
437
447
|
def stop_all(self) -> None: # pragma: no cover
|
|
@@ -1448,10 +1458,8 @@ Cache: {cache}
|
|
|
1448
1458
|
#
|
|
1449
1459
|
# re: W0212: treating _consider_line something like package private
|
|
1450
1460
|
#
|
|
1451
|
-
matched = (
|
|
1452
|
-
|
|
1453
|
-
line
|
|
1454
|
-
)
|
|
1461
|
+
matched = self.current_matcher._consider_line( # pylint:disable=W0212
|
|
1462
|
+
line
|
|
1455
1463
|
)
|
|
1456
1464
|
if self.current_matcher.stopped:
|
|
1457
1465
|
stopped_count.append(1)
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import os
|
|
2
1
|
import json
|
|
3
2
|
from csvpath.managers.metadata import Metadata
|
|
4
3
|
from csvpath.managers.results.results_metadata import ResultsMetadata
|
|
@@ -70,13 +69,13 @@ class WebhookResultsListener(WebhookListener):
|
|
|
70
69
|
if cfg is None:
|
|
71
70
|
return None
|
|
72
71
|
if atype.find("all") > -1:
|
|
73
|
-
return cfg.
|
|
72
|
+
return cfg.on_complete_all.url
|
|
74
73
|
elif atype.find("invalid") > -1:
|
|
75
|
-
return cfg.
|
|
74
|
+
return cfg.on_complete_invalid.url
|
|
76
75
|
elif atype.find("valid") > -1:
|
|
77
|
-
return cfg.
|
|
76
|
+
return cfg.on_complete_valid.url
|
|
78
77
|
elif atype.find("error") > -1:
|
|
79
|
-
return cfg.
|
|
78
|
+
return cfg.on_complete_error.url
|
|
80
79
|
else:
|
|
81
80
|
raise ValueError(f"Unknown type: {atype}")
|
|
82
81
|
|
|
@@ -106,13 +105,13 @@ class WebhookResultsListener(WebhookListener):
|
|
|
106
105
|
return {}
|
|
107
106
|
on = None
|
|
108
107
|
if atype.find("all") > -1:
|
|
109
|
-
on = cfg.on_complete_all
|
|
108
|
+
on = cfg.on_complete_all.payload
|
|
110
109
|
elif atype.find("invalid") > -1:
|
|
111
|
-
on = cfg.on_complete_invalid
|
|
110
|
+
on = cfg.on_complete_invalid.payload
|
|
112
111
|
elif atype.find("valid") > -1:
|
|
113
|
-
on = cfg.on_complete_valid
|
|
112
|
+
on = cfg.on_complete_valid.payload
|
|
114
113
|
elif atype.find("error") > -1:
|
|
115
|
-
on = cfg.on_complete_error
|
|
114
|
+
on = cfg.on_complete_error.payload
|
|
116
115
|
else:
|
|
117
116
|
raise ValueError(f"Unknown type: {atype}")
|
|
118
117
|
if on and len(on) > 0:
|
|
@@ -122,7 +121,6 @@ class WebhookResultsListener(WebhookListener):
|
|
|
122
121
|
return None
|
|
123
122
|
|
|
124
123
|
def _payload(self, *, mdata: Metadata, atype: str, cfg, hook: str) -> dict:
|
|
125
|
-
|
|
126
124
|
metadata = self.get_data(mdata, "meta.json")
|
|
127
125
|
variables = self.get_data(mdata, "vars.json")
|
|
128
126
|
pairs = VarUtility.get_value_pairs_from_value(
|
|
@@ -20,15 +20,16 @@ class Scripts(BaseModel):
|
|
|
20
20
|
on_complete_error: Optional[str] = None
|
|
21
21
|
|
|
22
22
|
|
|
23
|
+
class Webhook(BaseModel):
|
|
24
|
+
url: Optional[str] = None
|
|
25
|
+
payload: Optional[str] = None
|
|
26
|
+
|
|
27
|
+
|
|
23
28
|
class Webhooks(BaseModel):
|
|
24
|
-
on_complete_all: Optional[
|
|
25
|
-
on_complete_invalid: Optional[
|
|
26
|
-
on_complete_valid: Optional[
|
|
27
|
-
on_complete_error: Optional[
|
|
28
|
-
all_url: Optional[str] = None
|
|
29
|
-
valid_url: Optional[str] = None
|
|
30
|
-
invalid_url: Optional[str] = None
|
|
31
|
-
error_url: Optional[str] = None
|
|
29
|
+
on_complete_all: Optional[Webhook] = None
|
|
30
|
+
on_complete_invalid: Optional[Webhook] = None
|
|
31
|
+
on_complete_valid: Optional[Webhook] = None
|
|
32
|
+
on_complete_error: Optional[Webhook] = None
|
|
32
33
|
|
|
33
34
|
|
|
34
35
|
class GroupConfig(BaseModel):
|
|
@@ -42,7 +43,6 @@ class Config(BaseModel):
|
|
|
42
43
|
|
|
43
44
|
|
|
44
45
|
class NamedPathsDescriber:
|
|
45
|
-
|
|
46
46
|
README = "README.md"
|
|
47
47
|
DEFAULT_README = "# Named-Paths Documentation\n\n"
|
|
48
48
|
JSON_FILE = "definition.json"
|
|
@@ -78,6 +78,24 @@ class NamedPathsDescriber:
|
|
|
78
78
|
#
|
|
79
79
|
if self.CONFIG in j:
|
|
80
80
|
GroupConfig(**j[self.CONFIG])
|
|
81
|
+
#
|
|
82
|
+
# clear out the Nones
|
|
83
|
+
#
|
|
84
|
+
if self.CONFIG in j:
|
|
85
|
+
configs = j[self.CONFIG]
|
|
86
|
+
if "groups" in configs:
|
|
87
|
+
configs = configs["groups"]
|
|
88
|
+
print(f"configs: {configs}")
|
|
89
|
+
for _k, _v in j[self.CONFIG].items():
|
|
90
|
+
rms = []
|
|
91
|
+
for k, v in _v.items():
|
|
92
|
+
if v is None:
|
|
93
|
+
rms.append(k)
|
|
94
|
+
for rm in rms:
|
|
95
|
+
del _v[rm]
|
|
96
|
+
#
|
|
97
|
+
#
|
|
98
|
+
#
|
|
81
99
|
p = Nos(home).join(self.JSON_FILE)
|
|
82
100
|
with DataFileWriter(path=p) as writer:
|
|
83
101
|
json.dump(j, writer.sink, indent=2)
|
|
@@ -125,7 +143,7 @@ class NamedPathsDescriber:
|
|
|
125
143
|
config.groups[name] = gc
|
|
126
144
|
else:
|
|
127
145
|
config.groups[name] = j
|
|
128
|
-
_[self.CONFIG] = config.model_dump()
|
|
146
|
+
_[self.CONFIG] = config.model_dump(exclude_none=True)
|
|
129
147
|
self.store_json(name, _)
|
|
130
148
|
|
|
131
149
|
def get_config(self, name: NamedPathsName) -> GroupConfig:
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# pylint: disable=C0114
|
|
2
|
-
import os
|
|
3
2
|
import json
|
|
4
3
|
import traceback
|
|
5
4
|
from typing import NewType
|
|
@@ -10,7 +9,6 @@ from csvpath.util.metadata_parser import MetadataParser
|
|
|
10
9
|
from csvpath.util.references.reference_parser import ReferenceParser
|
|
11
10
|
from csvpath.util.file_readers import DataFileReader
|
|
12
11
|
from csvpath.util.file_writers import DataFileWriter
|
|
13
|
-
from csvpath.util.box import Box
|
|
14
12
|
from csvpath.util.nos import Nos
|
|
15
13
|
from .paths_registrar import PathsRegistrar
|
|
16
14
|
from .paths_metadata import PathsMetadata
|
|
@@ -470,7 +468,7 @@ class PathsManager:
|
|
|
470
468
|
if assure_definition is True:
|
|
471
469
|
t = self.get_json_paths_file(name)
|
|
472
470
|
if t is None:
|
|
473
|
-
raise ValueError(f"JSON
|
|
471
|
+
raise ValueError(f"JSON definition for {name} cannot be None")
|
|
474
472
|
if name not in t:
|
|
475
473
|
t[name] = []
|
|
476
474
|
self.describer.store_json(name, t)
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
# pylint: disable=C0114
|
|
2
2
|
import os
|
|
3
|
-
import json
|
|
4
3
|
import re
|
|
5
|
-
import traceback
|
|
6
4
|
from uuid import UUID
|
|
7
|
-
from pathlib import Path
|
|
8
|
-
import datetime
|
|
9
5
|
import dateutil.parser
|
|
10
6
|
from typing import Dict, List, Any
|
|
11
7
|
from csvpath.util.line_spooler import LineSpooler
|
|
@@ -40,6 +36,19 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
40
36
|
# use property
|
|
41
37
|
self.csvpaths = csvpaths
|
|
42
38
|
"""@private"""
|
|
39
|
+
#
|
|
40
|
+
# the dynamic listeners are added to each Registrar before
|
|
41
|
+
# it distributes updates. we don't need this for the other
|
|
42
|
+
# managers (paths, files, errors) because they don't create
|
|
43
|
+
# new registrars each time. we can just do:
|
|
44
|
+
# paths.error_manager.registrar.add_internal_listeners(lst)
|
|
45
|
+
# but with these we cannot do that. we could change how this
|
|
46
|
+
# class handles listeners but it feels like a small additive
|
|
47
|
+
# is better than an unknown impact
|
|
48
|
+
#
|
|
49
|
+
self.dynamic_result_listeners = []
|
|
50
|
+
self.dynamic_results_listeners = []
|
|
51
|
+
self.dynamic_run_listeners = []
|
|
43
52
|
|
|
44
53
|
@property
|
|
45
54
|
def csvpaths(self):
|
|
@@ -59,6 +68,11 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
59
68
|
pathsname=pathsname,
|
|
60
69
|
results=results,
|
|
61
70
|
)
|
|
71
|
+
for _ in self.dynamic_results_listeners:
|
|
72
|
+
rr.add_internal_listener(_)
|
|
73
|
+
#
|
|
74
|
+
# add any dynamic listeners to the registrar here
|
|
75
|
+
#
|
|
62
76
|
m = rr.manifest
|
|
63
77
|
mdata = ResultsMetadata(self.csvpaths.config)
|
|
64
78
|
if "time" not in m or m["time"] is None:
|
|
@@ -104,6 +118,12 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
104
118
|
run_dir=run_dir,
|
|
105
119
|
pathsname=pathsname,
|
|
106
120
|
)
|
|
121
|
+
#
|
|
122
|
+
# add any dynamic listeners to the registrar here
|
|
123
|
+
#
|
|
124
|
+
for _ in self.dynamic_results_listeners:
|
|
125
|
+
rr.add_internal_listener(_)
|
|
126
|
+
|
|
107
127
|
#
|
|
108
128
|
# collect the named-paths and named-file uuids. these may
|
|
109
129
|
# need to come from a different source at some point but
|
|
@@ -337,6 +357,18 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
337
357
|
mdata.named_file_name = result.file_name
|
|
338
358
|
mdata.method = result.method
|
|
339
359
|
rr = RunRegistrar(self.csvpaths)
|
|
360
|
+
#
|
|
361
|
+
# add any dynamic listeners to the registrar here
|
|
362
|
+
#
|
|
363
|
+
print(f"regsman: me: {id(self)}")
|
|
364
|
+
print(f"regsman: my csvpaths: {id(self.csvpaths)}")
|
|
365
|
+
print(f"regsman: dylsi: {self.dynamic_run_listeners}")
|
|
366
|
+
from csvpath.util.log_utility import LogUtility as lout
|
|
367
|
+
|
|
368
|
+
lout.log_brief_trace()
|
|
369
|
+
for _ in self.dynamic_run_listeners:
|
|
370
|
+
print(f"regsman: adding int lsit: {_}")
|
|
371
|
+
rr.add_internal_listener(_)
|
|
340
372
|
rr.register_start(mdata)
|
|
341
373
|
#
|
|
342
374
|
# we prep the results event
|
|
@@ -376,6 +408,11 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
376
408
|
rr = ResultRegistrar(
|
|
377
409
|
csvpaths=self.csvpaths, result=result, result_serializer=rs
|
|
378
410
|
)
|
|
411
|
+
#
|
|
412
|
+
# add any dynamic listeners to the registrar here
|
|
413
|
+
#
|
|
414
|
+
for _ in self.dynamic_result_listeners:
|
|
415
|
+
rr.add_internal_listener(_)
|
|
379
416
|
rr.register_start(mdata)
|
|
380
417
|
|
|
381
418
|
def set_named_results(self, results: Dict[str, List[Result]]) -> None:
|
|
@@ -464,8 +501,12 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
464
501
|
# exp! it would be good to offer a var sub here
|
|
465
502
|
#
|
|
466
503
|
if pathto:
|
|
467
|
-
result.csvpath.config.set(
|
|
468
|
-
|
|
504
|
+
result.csvpath.config.set(
|
|
505
|
+
section="_dummy-section", name="_dummy-name", value=pathto
|
|
506
|
+
)
|
|
507
|
+
pathto = result.csvpath.config.get(
|
|
508
|
+
section="_dummy-section", name="_dummy-name"
|
|
509
|
+
)
|
|
469
510
|
#
|
|
470
511
|
#
|
|
471
512
|
#
|
|
@@ -559,9 +600,15 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
559
600
|
self.do_transfers_if(result)
|
|
560
601
|
rs = ResultSerializer(self._csvpaths.config.archive_path)
|
|
561
602
|
rs.save_result(result)
|
|
562
|
-
ResultRegistrar(
|
|
603
|
+
rr = ResultRegistrar(
|
|
563
604
|
csvpaths=self.csvpaths, result=result, result_serializer=rs
|
|
564
|
-
)
|
|
605
|
+
)
|
|
606
|
+
#
|
|
607
|
+
# add any dynamic listeners to the registrar here
|
|
608
|
+
#
|
|
609
|
+
for _ in self.dynamic_result_listeners:
|
|
610
|
+
rr.add_internal_listener(_)
|
|
611
|
+
rr.register_complete()
|
|
565
612
|
|
|
566
613
|
def remove_named_results(self, name: str) -> None:
|
|
567
614
|
"""@private"""
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
from abc import ABC, abstractmethod
|
|
2
1
|
from .metadata import Metadata
|
|
3
|
-
from ..util.config import Config
|
|
4
2
|
from .listener import Listener
|
|
5
3
|
|
|
6
4
|
|
|
@@ -13,6 +11,8 @@ class TestListener(Listener):
|
|
|
13
11
|
def __init__(self, config=None) -> None:
|
|
14
12
|
self._config = None
|
|
15
13
|
super().__init__(config)
|
|
14
|
+
self.mine = None
|
|
16
15
|
|
|
17
16
|
def metadata_update(self, mdata: Metadata) -> None:
|
|
18
17
|
TestListener.METADATA = mdata
|
|
18
|
+
self.mine = mdata
|