csvpath 0.0.599__tar.gz → 0.0.606__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.606}/PKG-INFO +2 -1
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/.DS_Store +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/.DS_Store +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/windows/azure.bat +8 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/windows/gcs.bat +8 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/windows/local.bat +8 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/windows/s3.bat +8 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/windows/sftp.bat +8 -0
- csvpath-0.0.606/assets/libs/release_candidate_maker-0.0.25-py3-none-any.whl +0 -0
- csvpath-0.0.606/assets/libs/release_candidate_maker-0.0.27-py3-none-any.whl +0 -0
- csvpath-0.0.606/assets/libs/release_candidate_maker-0.0.28-py3-none-any.whl +0 -0
- csvpath-0.0.606/assets/libs/release_candidate_maker-0.0.29-py3-none-any.whl +0 -0
- csvpath-0.0.606/assets/libs/release_candidate_maker-0.0.30.tar.gz +0 -0
- csvpath-0.0.606/assets/libs/release_candidate_maker-0.0.31.tar.gz +0 -0
- csvpath-0.0.606/assets/libs/release_candidate_maker-0.0.33.tar.gz +0 -0
- csvpath-0.0.606/assets/libs/release_candidate_maker-0.0.34.tar.gz +0 -0
- csvpath-0.0.606/assets/libs/release_candidate_maker-0.0.35.tar.gz +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/config/config.ini +4 -4
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/csvpaths.py +45 -36
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/files/file_manager.py +5 -3
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/webhook/webhook_results_listener.py +8 -10
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/paths/paths_describer.py +27 -10
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/paths/paths_manager.py +2 -4
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/results/results_manager.py +51 -8
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/test_listener.py +2 -2
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/azure/azure_data_writer.py +4 -5
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/azure/azure_nos.py +0 -4
- csvpath-0.0.606/csvpath/util/azure/azure_timing_policy.py +14 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/azure/azure_utils.py +11 -4
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/config.py +61 -16
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/log_utility.py +17 -5
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/path_util.py +5 -8
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/sftp/sftp_fingerprinter.py +4 -3
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/sftp/sftp_nos.py +103 -55
- csvpath-0.0.606/csvpath/util/stopwatch.py +43 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/var_utility.py +21 -26
- {csvpath-0.0.599 → csvpath-0.0.606}/pyproject.toml +4 -3
- {csvpath-0.0.599 → csvpath-0.0.606}/LICENSE +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/README.md +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/config/config.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/config/extra-functions.imports +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/config/function.imports +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/config/jenkins-local-azure.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/config/jenkins-local-gcs.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/config/jenkins-local-s3.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/config/jenkins-local-sftp.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/config/jenkins-windows-azure.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/config/jenkins-windows-gcs.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/config/jenkins-windows-local.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/config/jenkins-windows-s3.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/config/jenkins-windows-sftp.ini +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/Mac.goenvironment.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/Windows.goenvironment.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/mac/azure.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/mac/gcs.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/mac/google-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/mac/local.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/mac/s3.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/mac/sftp.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/integrations/.DS_Store +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/integrations/sqlite/csvpath +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/assets/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/config/env.json +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/cli/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/cli/asker.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/cli/cli.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/cli/const.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/cli/debug_config.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/cli/drill_down.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/cli/function_describer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/cli/function_lister.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/cli/selecter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/csvpath.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/errors/error.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/errors/error_collector.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/errors/error_comms.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/errors/error_manager.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/files/file_activator.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/files/file_describer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/files/file_metadata.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/files/file_registrar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/files/files_activation_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/files/files_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ckan/ckan.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ckan/datafile.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ckan/dataset.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ol/event.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ol/event_result.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ol/job.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ol/run.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ol/run_state.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/ol/sender.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/otlp/metrics.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sftpplus/rpc.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/slack/event.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/slack/sender.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sql/engine.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sql/tables.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sql/updates.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/integrations/webhook/webhook_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/metadata.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/paths/paths_listener.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/paths/paths_metadata.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/paths/paths_registrar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/registrar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/results/readers/readers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/results/result.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/results/result_file_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/results/result_metadata.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/results/result_registrar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/results/result_serializer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/results/results_metadata.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/results/results_registrar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/run/run_listener_stdout.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/run/run_metadata.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/managers/run/run_registrar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/args.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/args_helper.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/boolean/all.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/boolean/andf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/boolean/any.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/boolean/between.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/boolean/empty.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/boolean/exists.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/boolean/inf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/boolean/no.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/boolean/notf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/boolean/orf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/boolean/yes.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/counting/count.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/counting/count_bytes.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/counting/count_headers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/counting/count_lines.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/counting/count_scans.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/counting/counter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/counting/every.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/counting/has_matches.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/counting/increment.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/counting/tally.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/counting/total_lines.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/dates/now.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/dates/part.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/dates/roll.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/function.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/function_factory.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/function_finder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/function_focus.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/append.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/collect.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/empty_stack.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/end.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/header_name.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/headers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/headers_stack.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/insert.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/line_before.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/mismatch.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/remove.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/rename.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/replace.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/headers/reset_headers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/json/jsonpath.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/lines/advance.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/lines/after_blank.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/lines/dups.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/lines/first.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/lines/first_line.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/lines/last.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/lines/stop.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/math/above.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/math/add.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/math/divide.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/math/equals.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/math/intf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/math/mod.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/math/multiply.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/math/odd.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/math/round.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/math/subtotal.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/math/subtract.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/math/sum.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/misc/fingerprint.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/misc/importf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/misc/parquet.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/misc/random.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/print/jinjaf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/print/print_line.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/print/print_queue.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/print/printf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/print/table.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/sql/sql_in.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/stats/minf.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/stats/nminmax.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/stats/percent.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/stats/percent_unique.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/stats/stdev.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/strings/alter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/strings/caps.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/strings/concat.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/strings/contains.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/strings/format.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/strings/length.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/strings/lower.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/strings/metaphone.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/strings/regex.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/strings/starts_with.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/strings/strip.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/strings/substring.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/strings/upper.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/testing/debug.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/types/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/types/blank.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/types/boolean.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/types/datatype.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/types/datef.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/types/decimal.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/types/email.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/types/nonef.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/types/string.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/types/type.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/types/url.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/types/wildcard.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/validity/fail.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/validity/failed.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/validity/line.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/validity/matches.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/validity/percent_matching.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/variables/clear.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/variables/get.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/variables/index_of.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/variables/pushpop.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/variables/put.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/variables/slice.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/variables/sort.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/variables/track.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/variables/variables.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/functions/xml/xpath.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/lark_parser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/lark_transformer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/matcher.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/productions/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/productions/equality.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/productions/expression.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/productions/header.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/productions/matchable.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/productions/qualified.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/productions/reference.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/productions/term.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/productions/variable.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/util/exceptions.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/util/expression_encoder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/util/expression_utility.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/util/lark_print_parser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/util/parquet_utility.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/util/print_parser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/matching/util/runtime_data_collector.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/modes/error_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/modes/explain_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/modes/files_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/modes/logic_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/modes/mode_controller.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/modes/print_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/modes/return_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/modes/run_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/modes/source_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/modes/transfer_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/modes/unmatched_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/modes/validation_mode.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/scanning/__init__.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/scanning/scanner2.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/scanning/scanner2_parser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/scanning/scanner2_transformer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/azure/azure_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/azure/azure_fingerprinter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/azure/azure_json_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/backend_check.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/box.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/cache.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/caser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/class_loader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/code.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/config_env.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/config_exception.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/date_util.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/exceptions.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/file_info.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/file_readers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/file_utility.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/file_writers.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/gcs/gcs_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/gcs/gcs_data_writer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/gcs/gcs_json_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/gcs/gcs_nos.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/gcs/gcs_utils.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/hasher.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/http/http_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/intermediary.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/json/json_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/json/json_reader_helper.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/last_line_stats.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/line_counter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/line_monitor.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/line_spooler.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/metadata_parser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/nos.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/pandas_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/printer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/py_file_utility.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/files_reference_finder_2.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/files_tools/range_finder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/ref_utils.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/reference_exceptions.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/reference_grammar.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/reference_parser.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/reference_results.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/reference_transformer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/results_reference_finder_2.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/results_tools/data_finder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/results_tools/date_filter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/results_tools/identity_finder.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/results_tools/path_filter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/results_tools/token_filters.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/references/tools/date_completer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/referrer_printer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/run_home_maker.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/s3/s3_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/s3/s3_data_writer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/s3/s3_fingerprinter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/s3/s3_json_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/s3/s3_nos.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/s3/s3_utils.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/sftp/sftp_config.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/sftp/sftp_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/sftp/sftp_data_writer.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/sftp/sftp_json_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/sftp/sftp_walk.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/sqliter.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/template_util.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/csvpath/util/xlsx/xlsx_data_reader.py +0 -0
- {csvpath-0.0.599 → csvpath-0.0.606}/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.606
|
|
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
|
|
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:
|
|
@@ -173,8 +172,8 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
173
172
|
#
|
|
174
173
|
#
|
|
175
174
|
#
|
|
176
|
-
self.info_dump()
|
|
177
|
-
|
|
175
|
+
# self.info_dump()
|
|
176
|
+
|
|
178
177
|
self._errors = []
|
|
179
178
|
# coordinator attributes
|
|
180
179
|
self._stop_all = 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
|
)
|
|
@@ -263,8 +269,9 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
263
269
|
if subs not in ["env", "none"]:
|
|
264
270
|
subs = f"{subs} with keys:"
|
|
265
271
|
e = self.config.config_env.env
|
|
266
|
-
|
|
267
|
-
|
|
272
|
+
if e is not None:
|
|
273
|
+
for k, v in e.items():
|
|
274
|
+
subs = f"{subs}\n - {k}"
|
|
268
275
|
cache = self.config.get(section="cache", name="path")
|
|
269
276
|
cache = cache if self.config.get(section="cache", name="use_cache") else "none"
|
|
270
277
|
logstr = self.logger if self.logger else "pending"
|
|
@@ -278,40 +285,42 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
278
285
|
return f"""
|
|
279
286
|
Context: {self.project_context}.{self.project}
|
|
280
287
|
Logger: {logstr}
|
|
281
|
-
Configured log path: {self.config.get(section=
|
|
288
|
+
Configured log path: {self.config.get(section="logging", name="log_file")}
|
|
282
289
|
Current log paths: {logpath}
|
|
283
290
|
Config file: {self.config.configpath}
|
|
284
|
-
Var sub source: {self.config.get(section=
|
|
291
|
+
Var sub source: {self.config.get(section="config", name="var_sub_source")}
|
|
285
292
|
Var subs: {subs}
|
|
286
293
|
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=
|
|
294
|
+
- csvpath: {self.config.get(section="errors", name="csvpath")}
|
|
295
|
+
- csvpaths: {self.config.get(section="errors", name="csvpaths")}
|
|
296
|
+
Named-files: {self.config.get(section="inputs", name="files")}
|
|
297
|
+
Named-paths: {self.config.get(section="inputs", name="files")}
|
|
298
|
+
Archive: {self.config.get(section="results", name="archive")}
|
|
292
299
|
Cache: {cache}
|
|
293
300
|
{lstrs}
|
|
294
301
|
"""
|
|
295
302
|
|
|
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
303
|
def _set_managers(self) -> None:
|
|
310
304
|
self.paths_manager = PathsManager(csvpaths=self)
|
|
311
305
|
self.file_manager = FileManager(csvpaths=self)
|
|
312
|
-
self.results_manager = ResultsManager(csvpaths=self)
|
|
313
306
|
self.ecoms = ErrorCommunications(csvpaths=self)
|
|
314
307
|
self.error_manager = ErrorManager(csvpaths=self)
|
|
308
|
+
#
|
|
309
|
+
# we take a bit more care with resman because it may have listeners
|
|
310
|
+
# that are set programmatically. other managers deal with their
|
|
311
|
+
# registrars differently and don't have the problem of maintaining
|
|
312
|
+
# lists of listeners at the csvpaths level
|
|
313
|
+
#
|
|
314
|
+
resman = ResultsManager(csvpaths=self)
|
|
315
|
+
if self.results_manager:
|
|
316
|
+
resman.dynamic_result_listeners = (
|
|
317
|
+
self.results_manager.dynamic_result_listeners
|
|
318
|
+
)
|
|
319
|
+
resman.dynamic_results_listeners = (
|
|
320
|
+
self.results_manager.dynamic_results_listeners
|
|
321
|
+
)
|
|
322
|
+
resman.dynamic_run_listeners = self.results_manager.dynamic_run_listeners
|
|
323
|
+
self.results_manager = resman
|
|
315
324
|
|
|
316
325
|
@property
|
|
317
326
|
def project(self) -> str:
|
|
@@ -432,6 +441,8 @@ Cache: {cache}
|
|
|
432
441
|
if path.config.configpath != self.config.configpath:
|
|
433
442
|
path.config.set_config_path_and_reload(self.config.configpath)
|
|
434
443
|
path.logger = None
|
|
444
|
+
for _ in self.dynamic_csvpath_error_listeners:
|
|
445
|
+
path.error_manager.add_internal_listener(_)
|
|
435
446
|
return path
|
|
436
447
|
|
|
437
448
|
def stop_all(self) -> None: # pragma: no cover
|
|
@@ -1448,10 +1459,8 @@ Cache: {cache}
|
|
|
1448
1459
|
#
|
|
1449
1460
|
# re: W0212: treating _consider_line something like package private
|
|
1450
1461
|
#
|
|
1451
|
-
matched = (
|
|
1452
|
-
|
|
1453
|
-
line
|
|
1454
|
-
)
|
|
1462
|
+
matched = self.current_matcher._consider_line( # pylint:disable=W0212
|
|
1463
|
+
line
|
|
1455
1464
|
)
|
|
1456
1465
|
if self.current_matcher.stopped:
|
|
1457
1466
|
stopped_count.append(1)
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import os
|
|
2
1
|
import json
|
|
3
|
-
import csv
|
|
4
2
|
import traceback
|
|
5
3
|
from typing import NewType
|
|
6
4
|
from json import JSONDecodeError
|
|
@@ -13,7 +11,7 @@ from csvpath.util.references.files_reference_finder_2 import (
|
|
|
13
11
|
from csvpath.util.references.results_reference_finder_2 import (
|
|
14
12
|
ResultsReferenceFinder2 as ResultsReferenceFinder,
|
|
15
13
|
)
|
|
16
|
-
from csvpath.util.exceptions import
|
|
14
|
+
from csvpath.util.exceptions import FileException
|
|
17
15
|
from csvpath.util.nos import Nos
|
|
18
16
|
from csvpath.util.box import Box
|
|
19
17
|
from csvpath.util.path_util import PathUtility as pathu
|
|
@@ -641,10 +639,12 @@ class FileManager:
|
|
|
641
639
|
#
|
|
642
640
|
self.csvpaths.logger.debug("Path after removing mark, if any: %s", path)
|
|
643
641
|
self._copy_in(path, home, template)
|
|
642
|
+
self.csvpaths.logger.debug("Done copying in")
|
|
644
643
|
#
|
|
645
644
|
#
|
|
646
645
|
#
|
|
647
646
|
self.assure_docs_and_discriptor(name)
|
|
647
|
+
self.csvpaths.logger.debug("Assured docs and discriptor")
|
|
648
648
|
#
|
|
649
649
|
# create the reference to the bytes/version added to the named-file.
|
|
650
650
|
# this is the most specific reference possible. we return it when we're
|
|
@@ -658,6 +658,7 @@ class FileManager:
|
|
|
658
658
|
# create the metadata event for this registration
|
|
659
659
|
#
|
|
660
660
|
name_home = self.named_file_home(name)
|
|
661
|
+
self.csvpaths.logger.debug("Name home is %s", name_home)
|
|
661
662
|
mdata = FileMetadata(self.csvpaths.config)
|
|
662
663
|
mdata.named_file_name = name
|
|
663
664
|
mdata.named_file_ref = ret
|
|
@@ -678,6 +679,7 @@ class FileManager:
|
|
|
678
679
|
mdata.name_home = name_home
|
|
679
680
|
mdata.mark = mark
|
|
680
681
|
mdata.template = template
|
|
682
|
+
self.csvpaths.logger.debug("Created metadata")
|
|
681
683
|
#
|
|
682
684
|
# TODO: add file_size. move FileInfo into Nos. for now it is 0.
|
|
683
685
|
#
|
|
@@ -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,23 @@ 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
|
+
for _k, _v in j[self.CONFIG].items():
|
|
89
|
+
rms = []
|
|
90
|
+
for k, v in _v.items():
|
|
91
|
+
if v is None:
|
|
92
|
+
rms.append(k)
|
|
93
|
+
for rm in rms:
|
|
94
|
+
del _v[rm]
|
|
95
|
+
#
|
|
96
|
+
#
|
|
97
|
+
#
|
|
81
98
|
p = Nos(home).join(self.JSON_FILE)
|
|
82
99
|
with DataFileWriter(path=p) as writer:
|
|
83
100
|
json.dump(j, writer.sink, indent=2)
|
|
@@ -125,7 +142,7 @@ class NamedPathsDescriber:
|
|
|
125
142
|
config.groups[name] = gc
|
|
126
143
|
else:
|
|
127
144
|
config.groups[name] = j
|
|
128
|
-
_[self.CONFIG] = config.model_dump()
|
|
145
|
+
_[self.CONFIG] = config.model_dump(exclude_none=True)
|
|
129
146
|
self.store_json(name, _)
|
|
130
147
|
|
|
131
148
|
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
|
|
@@ -392,7 +390,7 @@ class PathsManager:
|
|
|
392
390
|
assure_definition: bool = True,
|
|
393
391
|
) -> str:
|
|
394
392
|
self.last_add_metadata = None
|
|
395
|
-
if template is not None:
|
|
393
|
+
if template is not None and str(template).strip() != "":
|
|
396
394
|
#
|
|
397
395
|
# this will raise an error. if that's a problem use temu.validate
|
|
398
396
|
#
|
|
@@ -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,14 @@ 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
|
+
for _ in self.dynamic_run_listeners:
|
|
367
|
+
rr.add_internal_listener(_)
|
|
340
368
|
rr.register_start(mdata)
|
|
341
369
|
#
|
|
342
370
|
# we prep the results event
|
|
@@ -376,6 +404,11 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
376
404
|
rr = ResultRegistrar(
|
|
377
405
|
csvpaths=self.csvpaths, result=result, result_serializer=rs
|
|
378
406
|
)
|
|
407
|
+
#
|
|
408
|
+
# add any dynamic listeners to the registrar here
|
|
409
|
+
#
|
|
410
|
+
for _ in self.dynamic_result_listeners:
|
|
411
|
+
rr.add_internal_listener(_)
|
|
379
412
|
rr.register_start(mdata)
|
|
380
413
|
|
|
381
414
|
def set_named_results(self, results: Dict[str, List[Result]]) -> None:
|
|
@@ -464,8 +497,12 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
464
497
|
# exp! it would be good to offer a var sub here
|
|
465
498
|
#
|
|
466
499
|
if pathto:
|
|
467
|
-
result.csvpath.config.set(
|
|
468
|
-
|
|
500
|
+
result.csvpath.config.set(
|
|
501
|
+
section="_dummy-section", name="_dummy-name", value=pathto
|
|
502
|
+
)
|
|
503
|
+
pathto = result.csvpath.config.get(
|
|
504
|
+
section="_dummy-section", name="_dummy-name"
|
|
505
|
+
)
|
|
469
506
|
#
|
|
470
507
|
#
|
|
471
508
|
#
|
|
@@ -559,9 +596,15 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
559
596
|
self.do_transfers_if(result)
|
|
560
597
|
rs = ResultSerializer(self._csvpaths.config.archive_path)
|
|
561
598
|
rs.save_result(result)
|
|
562
|
-
ResultRegistrar(
|
|
599
|
+
rr = ResultRegistrar(
|
|
563
600
|
csvpaths=self.csvpaths, result=result, result_serializer=rs
|
|
564
|
-
)
|
|
601
|
+
)
|
|
602
|
+
#
|
|
603
|
+
# add any dynamic listeners to the registrar here
|
|
604
|
+
#
|
|
605
|
+
for _ in self.dynamic_result_listeners:
|
|
606
|
+
rr.add_internal_listener(_)
|
|
607
|
+
rr.register_complete()
|
|
565
608
|
|
|
566
609
|
def remove_named_results(self, name: str) -> None:
|
|
567
610
|
"""@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
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# pylint: disable=C0114
|
|
2
2
|
|
|
3
|
-
import os
|
|
4
3
|
from smart_open import open
|
|
5
4
|
from ..file_writers import DataFileWriter
|
|
6
5
|
from csvpath.util.azure.azure_utils import AzureUtility
|
|
6
|
+
from csvpath.util.stopwatch import Stopwatch
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class AzureDataWriter(DataFileWriter):
|
|
@@ -13,17 +13,16 @@ class AzureDataWriter(DataFileWriter):
|
|
|
13
13
|
if self.sink is None:
|
|
14
14
|
client = AzureUtility.make_client()
|
|
15
15
|
self.sink = open(
|
|
16
|
-
self.path,
|
|
17
|
-
self.mode,
|
|
18
|
-
transport_params={"client": client},
|
|
19
|
-
newline=''
|
|
16
|
+
self.path, self.mode, transport_params={"client": client}, newline=""
|
|
20
17
|
)
|
|
21
18
|
AzureDataWriter._write_file_count += 1
|
|
22
19
|
|
|
23
20
|
def write(self, data) -> None:
|
|
24
21
|
if self.is_binary and not isinstance(data, bytes):
|
|
25
22
|
data = data.encode(self.encoding)
|
|
23
|
+
s = Stopwatch()
|
|
26
24
|
self.sink.write(data)
|
|
25
|
+
s.end()
|
|
27
26
|
|
|
28
27
|
def file_info(self) -> dict[str, str | int | float]:
|
|
29
28
|
# TODO: what can/should we provide here?
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
# pylint: disable=C0114
|
|
2
|
-
import os
|
|
3
|
-
from azure.storage.blob import BlobServiceClient, ContainerClient
|
|
4
2
|
from azure.storage.blob._list_blobs_helper import BlobPrefix
|
|
5
3
|
from .azure_utils import AzureUtility
|
|
6
4
|
from ..path_util import PathUtility as pathu
|
|
@@ -100,8 +98,6 @@ class AzureDo:
|
|
|
100
98
|
if files_only is True and dirs_only is True:
|
|
101
99
|
raise ValueError("Cannot list with neither files nor dirs")
|
|
102
100
|
container, blob = AzureUtility.path_to_parts(path)
|
|
103
|
-
|
|
104
|
-
# listed = os.path.basename(self.path)
|
|
105
101
|
if not blob.endswith("/"):
|
|
106
102
|
blob = f"{blob}/"
|
|
107
103
|
if blob == "/":
|