csvpath 0.0.615__tar.gz → 0.0.617__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.615 → csvpath-0.0.617}/PKG-INFO +1 -1
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/config/jenkins-windows-azure.ini +6 -7
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/csvpath.py +2 -1
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/csvpaths.py +8 -1
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/files/file_manager.py +89 -24
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/files/file_registrar.py +4 -7
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/files/files_listener.py +2 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/webhook/webhook_listener.py +7 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/metadata.py +1 -2
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/result.py +7 -2
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/results_manager.py +1 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/transfers_manager.py +35 -16
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/run/run_metadata.py +10 -1
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/run/run_registrar.py +1 -6
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/config.py +5 -1
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/file_writers.py +6 -3
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/log_utility.py +1 -1
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/template_util.py +7 -3
- {csvpath-0.0.615 → csvpath-0.0.617}/pyproject.toml +1 -1
- {csvpath-0.0.615 → csvpath-0.0.617}/LICENSE +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/README.md +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/.DS_Store +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/config/config.ini +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/config/extra-functions.imports +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/config/function.imports +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/config/jenkins-local-azure.ini +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/config/jenkins-local-gcs.ini +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/config/jenkins-local-s3.ini +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/config/jenkins-local-sftp.ini +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/config/jenkins-windows-gcs.ini +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/config/jenkins-windows-local.ini +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/config/jenkins-windows-s3.ini +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/config/jenkins-windows-sftp.ini +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/.DS_Store +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/Mac.goenvironment.json +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/Windows.goenvironment.json +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/mac/azure.sh +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/mac/gcs.sh +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/mac/google-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/mac/local.sh +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/mac/s3.sh +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/mac/sftp.sh +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/windows/azure.bat +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/windows/gcs.bat +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/windows/local.bat +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/windows/s3.bat +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/windows/sftp.bat +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/integrations/.DS_Store +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/integrations/sqlite/csvpath +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/libs/release_candidate_maker-0.0.25-py3-none-any.whl +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/libs/release_candidate_maker-0.0.27-py3-none-any.whl +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/libs/release_candidate_maker-0.0.28-py3-none-any.whl +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/libs/release_candidate_maker-0.0.29-py3-none-any.whl +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/libs/release_candidate_maker-0.0.30.tar.gz +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/libs/release_candidate_maker-0.0.31.tar.gz +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/libs/release_candidate_maker-0.0.33.tar.gz +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/libs/release_candidate_maker-0.0.34.tar.gz +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/libs/release_candidate_maker-0.0.35.tar.gz +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/assets/libs/release_candidate_maker-0.0.36.tar.gz +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/config/config.ini +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/config/env.json +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/__init__.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/cli/__init__.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/cli/asker.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/cli/cli.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/cli/const.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/cli/debug_config.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/cli/drill_down.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/cli/function_describer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/cli/function_lister.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/cli/selecter.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/__init__.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/errors/error.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/errors/error_collector.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/errors/error_comms.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/errors/error_manager.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/files/file_activator.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/files/file_describer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/files/file_descriptor.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/files/file_metadata.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/files/file_names_rules.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/files/files_activation_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ckan/ckan.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ckan/datafile.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ckan/dataset.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ol/event.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ol/event_result.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ol/job.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ol/run.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ol/run_state.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/ol/sender.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/otlp/metrics.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/slack/event.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/slack/sender.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/sql/engine.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/sql/tables.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/sql/updates.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/webhook/webhook_results_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/paths/paths_describer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/paths/paths_descriptor.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/paths/paths_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/paths/paths_manager.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/paths/paths_metadata.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/paths/paths_registrar.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/registrar.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/readers/readers.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/result_file_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/result_metadata.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/result_registrar.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/result_serializer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/results_metadata.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/results/results_registrar.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/run/run_listener_stdout.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/server_config.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/test_listener.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/__init__.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/__init__.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/args.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/args_helper.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/boolean/all.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/boolean/andf.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/boolean/any.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/boolean/between.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/boolean/empty.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/boolean/exists.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/boolean/inf.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/boolean/no.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/boolean/notf.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/boolean/orf.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/boolean/yes.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/counting/count.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/counting/count_bytes.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/counting/count_headers.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/counting/count_lines.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/counting/count_scans.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/counting/counter.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/counting/every.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/counting/has_matches.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/counting/increment.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/counting/tally.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/counting/total_lines.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/dates/now.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/dates/part.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/dates/roll.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/function.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/function_factory.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/function_finder.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/function_focus.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/append.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/collect.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/empty_stack.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/end.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/header_name.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/headers.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/headers_stack.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/insert.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/line_before.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/mismatch.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/remove.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/rename.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/replace.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/headers/reset_headers.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/json/jsonpath.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/lines/advance.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/lines/after_blank.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/lines/dups.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/lines/first.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/lines/first_line.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/lines/last.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/lines/stop.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/math/above.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/math/add.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/math/divide.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/math/equals.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/math/intf.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/math/mod.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/math/multiply.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/math/odd.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/math/round.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/math/subtotal.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/math/subtract.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/math/sum.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/misc/env.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/misc/fingerprint.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/misc/importf.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/misc/metadata.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/misc/parquet.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/misc/random.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/misc/runtime.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/print/jinjaf.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/print/print_line.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/print/print_queue.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/print/printf.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/print/table.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/sql/select.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/sql/sql_in.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/stats/minf.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/stats/nminmax.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/stats/percent.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/stats/percent_unique.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/stats/stdev.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/strings/alter.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/strings/caps.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/strings/concat.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/strings/contains.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/strings/format.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/strings/length.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/strings/lower.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/strings/metaphone.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/strings/regex.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/strings/starts_with.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/strings/strip.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/strings/substring.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/strings/upper.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/testing/debug.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/types/__init__.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/types/blank.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/types/boolean.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/types/datatype.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/types/datef.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/types/decimal.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/types/email.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/types/nonef.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/types/string.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/types/type.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/types/url.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/types/uuid.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/types/wildcard.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/validity/fail.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/validity/failed.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/validity/line.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/validity/matches.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/validity/percent_matching.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/variables/clear.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/variables/get.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/variables/index_of.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/variables/pushpop.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/variables/put.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/variables/slice.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/variables/sort.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/variables/track.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/variables/variables.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/functions/xml/xpath.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/lark_parser.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/lark_transformer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/matcher.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/productions/__init__.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/productions/equality.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/productions/expression.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/productions/header.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/productions/matchable.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/productions/qualified.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/productions/reference.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/productions/term.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/productions/variable.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/util/exceptions.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/util/expression_encoder.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/util/expression_utility.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/util/lark_print_parser.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/util/parquet_utility.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/util/print_parser.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/matching/util/runtime_data_collector.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/modes/error_mode.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/modes/explain_mode.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/modes/files_mode.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/modes/logic_mode.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/modes/mode_controller.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/modes/print_mode.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/modes/return_mode.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/modes/run_mode.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/modes/source_mode.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/modes/transfer_mode.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/modes/unmatched_mode.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/modes/validation_mode.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/scanning/__init__.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/scanning/scanner2.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/scanning/scanner2_parser.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/scanning/scanner2_transformer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/azure/azure_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/azure/azure_data_writer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/azure/azure_fingerprinter.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/azure/azure_json_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/azure/azure_nos.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/azure/azure_timing_policy.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/azure/azure_utils.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/backend_check.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/box.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/cache.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/caser.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/class_loader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/code.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/config_env.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/config_exception.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/date_util.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/exceptions.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/file_info.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/file_readers.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/file_utility.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/gcs/gcs_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/gcs/gcs_data_writer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/gcs/gcs_json_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/gcs/gcs_nos.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/gcs/gcs_utils.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/hasher.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/http/http_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/intermediary.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/json/json_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/json/json_reader_helper.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/last_line_stats.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/line_counter.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/line_monitor.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/line_spooler.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/metadata_parser.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/nos.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/pandas_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/path_util.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/printer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/py_file_utility.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/files_reference_finder_2.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/files_tools/range_finder.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/ref_utils.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/reference_exceptions.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/reference_grammar.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/reference_parser.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/reference_results.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/reference_transformer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/results_reference_finder_2.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/results_tools/data_finder.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/results_tools/date_filter.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/results_tools/identity_finder.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/results_tools/path_filter.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/results_tools/token_filters.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/references/tools/date_completer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/referrer_printer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/run_home_maker.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/s3/s3_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/s3/s3_data_writer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/s3/s3_fingerprinter.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/s3/s3_json_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/s3/s3_nos.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/s3/s3_utils.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/sftp/sftp_config.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/sftp/sftp_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/sftp/sftp_data_writer.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/sftp/sftp_json_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/sftp/sftp_nos.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/sftp/sftp_server_creds.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/sftp/sftp_walk.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/sqliter.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/stopwatch.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/var_utility.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/csvpath/util/xlsx/xlsx_data_reader.py +0 -0
- {csvpath-0.0.615 → csvpath-0.0.617}/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.617
|
|
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
|
|
@@ -4,7 +4,7 @@ csv_files = csv, tsv, dat, tab, psv, ssv
|
|
|
4
4
|
|
|
5
5
|
[errors]
|
|
6
6
|
csvpath = raise, collect, print
|
|
7
|
-
csvpaths = raise, collect
|
|
7
|
+
csvpaths = raise, collect, print
|
|
8
8
|
use_format = full
|
|
9
9
|
pattern = {time}:{file}:{line}:{paths}:{instance}:{chain}: {message}
|
|
10
10
|
|
|
@@ -26,7 +26,7 @@ path = cache
|
|
|
26
26
|
use_cache = no
|
|
27
27
|
|
|
28
28
|
[functions]
|
|
29
|
-
imports =
|
|
29
|
+
imports =
|
|
30
30
|
|
|
31
31
|
[results]
|
|
32
32
|
archive = tmp\azure\archive
|
|
@@ -40,7 +40,7 @@ allow_http_files = True
|
|
|
40
40
|
allow_local_files = True
|
|
41
41
|
|
|
42
42
|
[listeners]
|
|
43
|
-
groups =
|
|
43
|
+
groups = default
|
|
44
44
|
sqlite.result = from csvpath.managers.integrations.sqlite.sqlite_result_listener import SqliteResultListener
|
|
45
45
|
sqlite.results = from csvpath.managers.integrations.sqlite.sqlite_results_listener import SqliteResultsListener
|
|
46
46
|
default.file = from csvpath.managers.files.files_listener import FilesListener
|
|
@@ -70,7 +70,7 @@ scripts.results = from csvpath.managers.integrations.scripts.scripts_results_lis
|
|
|
70
70
|
[gcs]
|
|
71
71
|
|
|
72
72
|
[scripts]
|
|
73
|
-
run_scripts=yes
|
|
73
|
+
run_scripts = yes
|
|
74
74
|
|
|
75
75
|
[sftp]
|
|
76
76
|
server = SFTP_SERVER
|
|
@@ -89,7 +89,7 @@ port = SFTPPLUS_PORT
|
|
|
89
89
|
admin_username = SFTPPLUS_ADMIN_USERNAME
|
|
90
90
|
admin_password = SFTPPLUS_ADMIN_PASSWORD
|
|
91
91
|
api_url = https://. . . :10020/json
|
|
92
|
-
scripts_dir =
|
|
92
|
+
scripts_dir =
|
|
93
93
|
execute_timeout = 300
|
|
94
94
|
|
|
95
95
|
[ckan]
|
|
@@ -104,6 +104,5 @@ timeout = 5
|
|
|
104
104
|
verify = False
|
|
105
105
|
|
|
106
106
|
[slack]
|
|
107
|
-
webhook_url =
|
|
108
|
-
|
|
107
|
+
webhook_url =
|
|
109
108
|
|
|
@@ -313,9 +313,10 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
|
|
|
313
313
|
self.error_manager.error_metrics.provider.shutdown()
|
|
314
314
|
self.error_manager.error_metrics = None
|
|
315
315
|
self.error_manager = None
|
|
316
|
-
lout.release_logger(self)
|
|
317
316
|
except Exception:
|
|
318
317
|
print(traceback.format_exc())
|
|
318
|
+
finally:
|
|
319
|
+
lout.release_logger(self)
|
|
319
320
|
|
|
320
321
|
#
|
|
321
322
|
# this method saves and reloads the config. if you don't want that use
|
|
@@ -588,9 +588,10 @@ Cache: {cache}
|
|
|
588
588
|
def __del__(self) -> None:
|
|
589
589
|
try:
|
|
590
590
|
self.wrap_up()
|
|
591
|
-
lout.release_logger(self)
|
|
592
591
|
except Exception:
|
|
593
592
|
print(traceback.format_exc())
|
|
593
|
+
finally:
|
|
594
|
+
lout.release_logger(self)
|
|
594
595
|
|
|
595
596
|
def _trim_archive_if(self, home: str) -> str:
|
|
596
597
|
archive = self.config.get(section="results", name="archive")
|
|
@@ -877,6 +878,7 @@ Cache: {cache}
|
|
|
877
878
|
run_dir=crt,
|
|
878
879
|
run_uuid=run_uuid,
|
|
879
880
|
method="collect_paths",
|
|
881
|
+
template=template,
|
|
880
882
|
)
|
|
881
883
|
# casting a broad net because if "raise" not in the error policy we
|
|
882
884
|
# want to never fail during a run
|
|
@@ -1047,6 +1049,7 @@ Cache: {cache}
|
|
|
1047
1049
|
run_dir=crt,
|
|
1048
1050
|
run_uuid=run_uuid,
|
|
1049
1051
|
method="fast_forward_paths",
|
|
1052
|
+
template=template,
|
|
1050
1053
|
)
|
|
1051
1054
|
try:
|
|
1052
1055
|
self._load_csvpath(
|
|
@@ -1181,6 +1184,7 @@ Cache: {cache}
|
|
|
1181
1184
|
run_dir=crt,
|
|
1182
1185
|
run_uuid=run_uuid,
|
|
1183
1186
|
method="next_paths",
|
|
1187
|
+
template=template,
|
|
1184
1188
|
)
|
|
1185
1189
|
if self._fail_all:
|
|
1186
1190
|
self.logger.warning(
|
|
@@ -1447,6 +1451,7 @@ Cache: {cache}
|
|
|
1447
1451
|
crt=crt,
|
|
1448
1452
|
method=method,
|
|
1449
1453
|
extra_data=extra_data,
|
|
1454
|
+
template=template,
|
|
1450
1455
|
)
|
|
1451
1456
|
#
|
|
1452
1457
|
# setting file into the csvpath is less obviously useful at CsvPaths
|
|
@@ -1624,6 +1629,7 @@ Cache: {cache}
|
|
|
1624
1629
|
crt: str,
|
|
1625
1630
|
method: str,
|
|
1626
1631
|
extra_data: Optional[dict[str, str]],
|
|
1632
|
+
template: str = "",
|
|
1627
1633
|
):
|
|
1628
1634
|
"""@private"""
|
|
1629
1635
|
#
|
|
@@ -1660,6 +1666,7 @@ Cache: {cache}
|
|
|
1660
1666
|
by_line=True,
|
|
1661
1667
|
run_uuid=run_uuid,
|
|
1662
1668
|
method=method,
|
|
1669
|
+
template=template,
|
|
1663
1670
|
)
|
|
1664
1671
|
csvpath[1] = result
|
|
1665
1672
|
#
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import re
|
|
2
2
|
import json
|
|
3
3
|
import traceback
|
|
4
|
-
from uuid import UUID
|
|
4
|
+
from uuid import UUID, uuid4
|
|
5
5
|
from typing import NewType
|
|
6
6
|
from json import JSONDecodeError
|
|
7
7
|
from csvpath.util.file_readers import DataFileReader
|
|
@@ -19,6 +19,7 @@ from csvpath.util.path_util import PathUtility as pathu
|
|
|
19
19
|
from csvpath.util.template_util import TemplateUtility as temu
|
|
20
20
|
from .file_registrar import FileRegistrar
|
|
21
21
|
from .lines_and_headers_cacher import LinesAndHeadersCacher
|
|
22
|
+
from .files_listener import FilesListener
|
|
22
23
|
from .file_metadata import FileMetadata
|
|
23
24
|
from .file_describer import NamedFileDescriber
|
|
24
25
|
from .file_activator import NamedFileActivator
|
|
@@ -219,8 +220,6 @@ class FileManager:
|
|
|
219
220
|
#
|
|
220
221
|
path = lst[0]
|
|
221
222
|
path = Nos(path).join("manifest.json")
|
|
222
|
-
# path = os.path.join(path, "manifest.json")
|
|
223
|
-
# nos = self.nos
|
|
224
223
|
nos = Nos(path)
|
|
225
224
|
if nos.exists():
|
|
226
225
|
mani = self.registrar.get_manifest(path)
|
|
@@ -634,11 +633,18 @@ class FileManager:
|
|
|
634
633
|
# issue driven by the 3rd party or business rules.
|
|
635
634
|
#
|
|
636
635
|
UUID(registration_uuid)
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
636
|
+
else:
|
|
637
|
+
#
|
|
638
|
+
# if we don't create the uuid here the metadata object will create one;
|
|
639
|
+
# however, if we want to tie log statements back we should have a uuid
|
|
640
|
+
# here, regardless of if the user creates it or we do.
|
|
641
|
+
#
|
|
642
|
+
registration_uuid = str(uuid4())
|
|
643
|
+
self.csvpaths.logger.info(
|
|
644
|
+
"Registration of %s will be associated with UUID %s",
|
|
645
|
+
path,
|
|
646
|
+
registration_uuid,
|
|
647
|
+
)
|
|
642
648
|
if not self.can_load(path):
|
|
643
649
|
#
|
|
644
650
|
# if False, can_load() will have already raised an error and/or, minimally,
|
|
@@ -648,9 +654,26 @@ class FileManager:
|
|
|
648
654
|
# will load any allowed files, even if some are not allowed -- but with the
|
|
649
655
|
# caveat that if an exception is raised we may stop in the middle of the load.
|
|
650
656
|
#
|
|
657
|
+
#
|
|
658
|
+
#
|
|
659
|
+
_ = {
|
|
660
|
+
"name": name,
|
|
661
|
+
"path": path,
|
|
662
|
+
"template": template,
|
|
663
|
+
"registration_uuid": registration_uuid,
|
|
664
|
+
}
|
|
665
|
+
self._registration_failed(_)
|
|
666
|
+
#
|
|
651
667
|
return
|
|
652
668
|
self.legal_name(name)
|
|
653
669
|
if path is None or path.strip() == "":
|
|
670
|
+
_ = {
|
|
671
|
+
"name": name,
|
|
672
|
+
"path": path,
|
|
673
|
+
"template": template,
|
|
674
|
+
"registration_uuid": registration_uuid,
|
|
675
|
+
}
|
|
676
|
+
self._registration_failed(_)
|
|
654
677
|
raise ValueError("Path cannot be None or empty")
|
|
655
678
|
if template is None:
|
|
656
679
|
template = self.describer.get_template(name)
|
|
@@ -666,7 +689,7 @@ class FileManager:
|
|
|
666
689
|
#
|
|
667
690
|
self.configure_named_file(name, config)
|
|
668
691
|
path = pathu.resep(path)
|
|
669
|
-
self.csvpaths.logger.debug("Path after resep %s", path)
|
|
692
|
+
self.csvpaths.logger.debug("[%s] Path after resep %s", registration_uuid, path)
|
|
670
693
|
config = self.csvpaths.config
|
|
671
694
|
http = config.get(section="inputs", name="allow_http_files", default=False)
|
|
672
695
|
http = str(http).strip().lower() in ["on", "yes", "true"]
|
|
@@ -679,14 +702,28 @@ class FileManager:
|
|
|
679
702
|
# the user cannot just override certain settings.
|
|
680
703
|
#
|
|
681
704
|
if nos.is_http and http is not True:
|
|
682
|
-
|
|
705
|
+
_ = {
|
|
706
|
+
"name": name,
|
|
707
|
+
"path": path,
|
|
708
|
+
"template": template,
|
|
709
|
+
"registration_uuid": registration_uuid,
|
|
710
|
+
}
|
|
711
|
+
self._registration_failed(_)
|
|
712
|
+
msg = f"[{registration_uuid}] Cannot add {path} as {name} because loading files over HTTP is not allowed"
|
|
683
713
|
self.csvpaths.logger.warning(msg)
|
|
684
714
|
self.csvpaths.error_manager.handle_error(source=self, msg=msg)
|
|
685
715
|
if self.csvpaths.ecoms.do_i_raise():
|
|
686
716
|
raise FileException(msg)
|
|
687
717
|
return
|
|
688
718
|
if nos.is_local and local is not True:
|
|
689
|
-
|
|
719
|
+
_ = {
|
|
720
|
+
"name": name,
|
|
721
|
+
"path": path,
|
|
722
|
+
"template": template,
|
|
723
|
+
"registration_uuid": registration_uuid,
|
|
724
|
+
}
|
|
725
|
+
self._registration_failed(_)
|
|
726
|
+
msg = f"[{registration_uuid}] Cannot add {path} as {name} because loading local files is not allowed"
|
|
690
727
|
self.csvpaths.logger.warning(msg)
|
|
691
728
|
self.csvpaths.error_manager.handle_error(source=self, msg=msg)
|
|
692
729
|
if self.csvpaths.ecoms.do_i_raise():
|
|
@@ -715,7 +752,9 @@ class FileManager:
|
|
|
715
752
|
path, name=name, template=template, recurse=False
|
|
716
753
|
)
|
|
717
754
|
try:
|
|
718
|
-
self.csvpaths.logger.debug(
|
|
755
|
+
self.csvpaths.logger.debug(
|
|
756
|
+
"[%s] Ready to register %s", registration_uuid, path
|
|
757
|
+
)
|
|
719
758
|
#
|
|
720
759
|
# path must end up with only legal filesystem chars.
|
|
721
760
|
# the read-only http backend will have ? and possibly other
|
|
@@ -750,13 +789,17 @@ class FileManager:
|
|
|
750
789
|
# exp: moving docs and descriptor to above copy_in()
|
|
751
790
|
#
|
|
752
791
|
self.assure_docs_and_discriptor(name)
|
|
753
|
-
self.csvpaths.logger.debug(
|
|
792
|
+
self.csvpaths.logger.debug(
|
|
793
|
+
"[%s] Assured docs and discriptor", registration_uuid
|
|
794
|
+
)
|
|
754
795
|
#
|
|
755
796
|
# copy file to its home location
|
|
756
797
|
#
|
|
757
|
-
self.csvpaths.logger.debug(
|
|
798
|
+
self.csvpaths.logger.debug(
|
|
799
|
+
"[%s] Path after removing mark, if any: %s", registration_uuid, path
|
|
800
|
+
)
|
|
758
801
|
self._copy_in(name=name, path=path, home=home, template=template)
|
|
759
|
-
self.csvpaths.logger.debug("Done copying in")
|
|
802
|
+
self.csvpaths.logger.debug("[%s] Done copying in", registration_uuid)
|
|
760
803
|
#
|
|
761
804
|
# self.assure_docs_and_discriptor(name)
|
|
762
805
|
# self.csvpaths.logger.debug("Assured docs and discriptor")
|
|
@@ -766,9 +809,13 @@ class FileManager:
|
|
|
766
809
|
# done here.
|
|
767
810
|
#
|
|
768
811
|
rpath, h = self._fingerprint(home)
|
|
769
|
-
self.csvpaths.logger.debug(
|
|
812
|
+
self.csvpaths.logger.debug(
|
|
813
|
+
"[%s] Fingerprint of %s: %s", registration_uuid, path, h
|
|
814
|
+
)
|
|
770
815
|
ret = f"${name}.files.{h}"
|
|
771
|
-
self.csvpaths.logger.debug(
|
|
816
|
+
self.csvpaths.logger.debug(
|
|
817
|
+
"[%s] Reference to named-file: %s", registration_uuid, ret
|
|
818
|
+
)
|
|
772
819
|
#
|
|
773
820
|
# ---------------------------
|
|
774
821
|
# maybe move the metadata handling to its own method?
|
|
@@ -777,7 +824,9 @@ class FileManager:
|
|
|
777
824
|
# create the metadata event for this registration
|
|
778
825
|
#
|
|
779
826
|
name_home = self.named_file_home(name)
|
|
780
|
-
self.csvpaths.logger.debug(
|
|
827
|
+
self.csvpaths.logger.debug(
|
|
828
|
+
"[%s] Name home is %s", registration_uuid, name_home
|
|
829
|
+
)
|
|
781
830
|
mdata = FileMetadata(self.csvpaths.config)
|
|
782
831
|
#
|
|
783
832
|
# add the ability to pass in a UUID. if received, use it here to
|
|
@@ -805,8 +854,8 @@ class FileManager:
|
|
|
805
854
|
mdata.file_name = file_home[file_home.rfind(nos.sep) + 1 :]
|
|
806
855
|
mdata.name_home = name_home
|
|
807
856
|
mdata.mark = mark
|
|
808
|
-
mdata.template = template
|
|
809
|
-
self.csvpaths.logger.debug("Created metadata")
|
|
857
|
+
mdata.template = template or ""
|
|
858
|
+
self.csvpaths.logger.debug("[%s] Created metadata", registration_uuid)
|
|
810
859
|
#
|
|
811
860
|
# TODO: add file_size. move FileInfo into Nos. for now it is 0.
|
|
812
861
|
#
|
|
@@ -815,17 +864,23 @@ class FileManager:
|
|
|
815
864
|
# the fingerprint is the most precise way of referencing a particular
|
|
816
865
|
# named-file version.
|
|
817
866
|
#
|
|
818
|
-
self.csvpaths.logger.debug("Registered %s", ret)
|
|
867
|
+
self.csvpaths.logger.debug("[%s] Registered %s", registration_uuid, ret)
|
|
819
868
|
return ret
|
|
820
869
|
except Exception as ex:
|
|
870
|
+
_ = {
|
|
871
|
+
"name": name,
|
|
872
|
+
"path": path,
|
|
873
|
+
"template": template,
|
|
874
|
+
"registration_uuid": registration_uuid,
|
|
875
|
+
}
|
|
876
|
+
self._registration_failed(_)
|
|
821
877
|
#
|
|
822
878
|
# remove me! tho, why you'd want quiet is not sure.
|
|
823
879
|
#
|
|
824
|
-
print(traceback.format_exc())
|
|
880
|
+
# print(traceback.format_exc())
|
|
825
881
|
#
|
|
826
882
|
#
|
|
827
|
-
|
|
828
|
-
msg = f"Error in loading named-file: {ex}"
|
|
883
|
+
msg = f"[{registration_uuid}] Error in loading named-file: {ex}"
|
|
829
884
|
self.csvpaths.logger.error(msg)
|
|
830
885
|
self.csvpaths.error_manager.handle_error(
|
|
831
886
|
source=traceback.format_exc(), msg=msg
|
|
@@ -833,6 +888,16 @@ class FileManager:
|
|
|
833
888
|
if self.csvpaths.ecoms.do_i_raise():
|
|
834
889
|
raise
|
|
835
890
|
|
|
891
|
+
def _registration_failed(self, data: dict[str, str]) -> None:
|
|
892
|
+
lst = FilesListener(self.csvpaths)
|
|
893
|
+
mdata = FileMetadata(self.csvpaths.config)
|
|
894
|
+
mdata.named_file_name = data.get("name")
|
|
895
|
+
mdata.origin_path = data.get("path")
|
|
896
|
+
mdata.template = data.get("template") or ""
|
|
897
|
+
mdata.uuid_string = data.get("registration_uuid")
|
|
898
|
+
mdata.status = "Registration failed"
|
|
899
|
+
lst.metadata_update(mdata)
|
|
900
|
+
|
|
836
901
|
def _validate_xlsx_mark(self, path: str, mark: str) -> None:
|
|
837
902
|
if not XlsxReaderHelper.is_xlsx(path):
|
|
838
903
|
raise ValueError(f"Not an Excel file: {path}")
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import os
|
|
2
|
-
import json
|
|
3
|
-
from datetime import datetime
|
|
4
2
|
from csvpath.util.exceptions import InputException, FileException
|
|
5
3
|
from csvpath.util.nos import Nos
|
|
6
4
|
from csvpath.managers.registrar import Registrar
|
|
@@ -110,9 +108,9 @@ class FileRegistrar(Registrar, Listener):
|
|
|
110
108
|
nos.path = old_home
|
|
111
109
|
nos.rename(new_home)
|
|
112
110
|
mani[index]["file_home"] = new_home
|
|
113
|
-
mani[index][
|
|
114
|
-
"
|
|
115
|
-
|
|
111
|
+
mani[index]["file"] = (
|
|
112
|
+
f"{new_home}{sep}{mani[index]['fingerprint']}.{mani[index]['type']}"
|
|
113
|
+
)
|
|
116
114
|
|
|
117
115
|
def metadata_update(self, mdata: Metadata) -> None:
|
|
118
116
|
path = mdata.origin_path
|
|
@@ -132,8 +130,7 @@ class FileRegistrar(Registrar, Listener):
|
|
|
132
130
|
mani["from"] = path
|
|
133
131
|
if mark is not None:
|
|
134
132
|
mani["mark"] = mark
|
|
135
|
-
|
|
136
|
-
mani["template"] = mdata.template
|
|
133
|
+
mani["template"] = mdata.template or ""
|
|
137
134
|
jdata = self.get_manifest(manifest_path)
|
|
138
135
|
jdata.append(mani)
|
|
139
136
|
self.intermediary.put_json(manifest_path, jdata)
|
|
@@ -69,6 +69,8 @@ class FilesListener(Listener): # Registrar,
|
|
|
69
69
|
if mdata.mark is not None:
|
|
70
70
|
mani["mark"] = mdata.mark
|
|
71
71
|
mani["manifest_path"] = self.manifest_path()
|
|
72
|
+
if hasattr(mdata, "status"):
|
|
73
|
+
mani["status"] = mdata.status
|
|
72
74
|
return mani
|
|
73
75
|
|
|
74
76
|
def metadata_update(self, mdata: Metadata) -> None:
|
{csvpath-0.0.615 → csvpath-0.0.617}/csvpath/managers/integrations/webhook/webhook_listener.py
RENAMED
|
@@ -165,4 +165,11 @@ class WebhookListener(Listener, threading.Thread):
|
|
|
165
165
|
...
|
|
166
166
|
|
|
167
167
|
def _do_send(self, *, url: str, payload: dict, headers: dict, timeout: int):
|
|
168
|
+
#
|
|
169
|
+
# this is an expected occurance. any empty block captured by the FlightPath form
|
|
170
|
+
# will have no url but will exist so will be attempted. we just want to ignore
|
|
171
|
+
# those attempts
|
|
172
|
+
#
|
|
173
|
+
if not url:
|
|
174
|
+
return
|
|
168
175
|
return requests.post(url, json=payload, headers=headers, timeout=timeout)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from uuid import uuid4, UUID
|
|
2
2
|
import os
|
|
3
3
|
from abc import ABC
|
|
4
|
-
from datetime import datetime
|
|
4
|
+
from datetime import datetime
|
|
5
5
|
from dateutil import parser
|
|
6
6
|
import getpass
|
|
7
7
|
import socket
|
|
@@ -150,7 +150,6 @@ class Metadata(ABC):
|
|
|
150
150
|
|
|
151
151
|
@time_started_string.setter
|
|
152
152
|
def time_started_string(self, s: str) -> None:
|
|
153
|
-
# self._time_started = datetime.date.fromisoformat(s)
|
|
154
153
|
self._time_started = parser.parse(s)
|
|
155
154
|
|
|
156
155
|
@property
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# pylint: disable=C0114
|
|
2
|
-
import os
|
|
3
2
|
from uuid import UUID
|
|
4
3
|
import uuid
|
|
5
4
|
import json
|
|
@@ -12,7 +11,7 @@ from csvpath.managers.listener import Listener
|
|
|
12
11
|
from csvpath.managers.metadata import Metadata
|
|
13
12
|
from csvpath.util.printer import Printer
|
|
14
13
|
from csvpath.util.exceptions import CsvPathsException
|
|
15
|
-
from csvpath.util.line_spooler import LineSpooler
|
|
14
|
+
from csvpath.util.line_spooler import LineSpooler
|
|
16
15
|
from .result_serializer import ResultSerializer
|
|
17
16
|
from .readers.readers import ResultReadersFacade
|
|
18
17
|
from csvpath.matching.util.expression_utility import ExpressionUtility
|
|
@@ -40,6 +39,7 @@ class Result(ErrorCollector, Printer, Listener): # pylint: disable=R0902
|
|
|
40
39
|
by_line: bool = False,
|
|
41
40
|
run_uuid: UUID,
|
|
42
41
|
method: str = None,
|
|
42
|
+
template: str = None,
|
|
43
43
|
):
|
|
44
44
|
"""@private"""
|
|
45
45
|
ErrorCollector.__init__(self)
|
|
@@ -105,6 +105,7 @@ class Result(ErrorCollector, Printer, Listener): # pylint: disable=R0902
|
|
|
105
105
|
self._lines: list[list[Any]] = None
|
|
106
106
|
self._readers_facade = ResultReadersFacade(self)
|
|
107
107
|
self._run_uuid = run_uuid
|
|
108
|
+
self._template = template or ""
|
|
108
109
|
|
|
109
110
|
@property
|
|
110
111
|
def actual_data_file(self) -> str:
|
|
@@ -121,6 +122,10 @@ class Result(ErrorCollector, Printer, Listener): # pylint: disable=R0902
|
|
|
121
122
|
)
|
|
122
123
|
return self._origin_data_file
|
|
123
124
|
|
|
125
|
+
@property
|
|
126
|
+
def template(self) -> str:
|
|
127
|
+
return self._template
|
|
128
|
+
|
|
124
129
|
@property
|
|
125
130
|
def uuid(self) -> UUID:
|
|
126
131
|
if self._uuid is None:
|
|
@@ -365,6 +365,7 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
365
365
|
mdata.named_paths_name = result.paths_name
|
|
366
366
|
mdata.named_file_name = result.file_name
|
|
367
367
|
mdata.method = result.method
|
|
368
|
+
mdata.template = result.template or ""
|
|
368
369
|
rr = RunRegistrar(self.csvpaths)
|
|
369
370
|
#
|
|
370
371
|
# add any dynamic listeners to the registrar here
|
|
@@ -12,6 +12,10 @@ class TransfersManager:
|
|
|
12
12
|
def __init__(self, *, results_manager):
|
|
13
13
|
self._results_manager = results_manager
|
|
14
14
|
|
|
15
|
+
@property
|
|
16
|
+
def logger(self):
|
|
17
|
+
return self.csvpaths.logger
|
|
18
|
+
|
|
15
19
|
@property
|
|
16
20
|
def csvpaths(self):
|
|
17
21
|
return self.results_manager.csvpaths
|
|
@@ -22,21 +26,25 @@ class TransfersManager:
|
|
|
22
26
|
|
|
23
27
|
def do_transfers_if(self, result) -> None:
|
|
24
28
|
try:
|
|
29
|
+
self.logger.info(
|
|
30
|
+
"Checking for transfers from run: %s declared on named-paths group: %s for statement: %s",
|
|
31
|
+
result.run_uuid,
|
|
32
|
+
result.paths_name,
|
|
33
|
+
result.identity_or_index,
|
|
34
|
+
)
|
|
25
35
|
self.do_transfer_mode_if(result)
|
|
26
|
-
except Exception
|
|
27
|
-
|
|
28
|
-
# handle better!
|
|
29
|
-
#
|
|
30
|
-
print(traceback.format_exc())
|
|
31
|
-
self.results_manager.csvpaths.logger.error(ex)
|
|
36
|
+
except Exception:
|
|
37
|
+
self.logger.error(traceback.format_exc())
|
|
32
38
|
try:
|
|
39
|
+
self.logger.info(
|
|
40
|
+
"Checking for transfers from run: %s in named-paths group: %s declared by statement: %s",
|
|
41
|
+
result.run_uuid,
|
|
42
|
+
result.paths_name,
|
|
43
|
+
result.identity_or_index,
|
|
44
|
+
)
|
|
33
45
|
self.do_description_transfers_if(result)
|
|
34
|
-
except Exception
|
|
35
|
-
|
|
36
|
-
# handle better!
|
|
37
|
-
#
|
|
38
|
-
print(traceback.format_exc())
|
|
39
|
-
self.results_manager.csvpaths.logger.error(ex)
|
|
46
|
+
except Exception:
|
|
47
|
+
self.logger.error(traceback.format_exc())
|
|
40
48
|
|
|
41
49
|
def do_description_transfers_if(self, result) -> None:
|
|
42
50
|
#
|
|
@@ -226,6 +234,12 @@ class TransfersManager:
|
|
|
226
234
|
for t in tpaths:
|
|
227
235
|
pathfrom = t[2]
|
|
228
236
|
pathto = t[3]
|
|
237
|
+
self.logger.info(
|
|
238
|
+
"Attempting transfer of %s to %s for named-paths group %s",
|
|
239
|
+
pathfrom,
|
|
240
|
+
pathto,
|
|
241
|
+
name,
|
|
242
|
+
)
|
|
229
243
|
try:
|
|
230
244
|
rmode = "rb" if "b" in t[4] else "r"
|
|
231
245
|
n = pathu.dir_name(pathto)
|
|
@@ -253,12 +267,17 @@ class TransfersManager:
|
|
|
253
267
|
writer.sink.write(pf.read())
|
|
254
268
|
finally:
|
|
255
269
|
writer.close()
|
|
270
|
+
self.logger.info(
|
|
271
|
+
"Done transfering %s to %s for named-paths group %s",
|
|
272
|
+
pathfrom,
|
|
273
|
+
pathto,
|
|
274
|
+
name,
|
|
275
|
+
)
|
|
256
276
|
except Exception:
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
logger.warning(
|
|
260
|
-
"Cannot transfer %s to %s", pathfrom, pathto, exc_info=True
|
|
277
|
+
self.logger.error(
|
|
278
|
+
"Error in transfers of %s for named-paths group %s", tpaths, name
|
|
261
279
|
)
|
|
280
|
+
self.logger.error(traceback.format_exc())
|
|
262
281
|
|
|
263
282
|
def _path_to_transfer_to(self, result, t) -> str:
|
|
264
283
|
if result is None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from csvpath.managers.metadata import Metadata
|
|
2
2
|
|
|
3
|
-
from uuid import
|
|
3
|
+
from uuid import UUID
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class RunMetadata(Metadata):
|
|
@@ -12,6 +12,15 @@ class RunMetadata(Metadata):
|
|
|
12
12
|
self.identity: str = None
|
|
13
13
|
self._run_uuid: UUID = None
|
|
14
14
|
self._method: str = None
|
|
15
|
+
self._template: str = ""
|
|
16
|
+
|
|
17
|
+
@property
|
|
18
|
+
def template(self) -> str:
|
|
19
|
+
return self._template
|
|
20
|
+
|
|
21
|
+
@template.setter
|
|
22
|
+
def template(self, t: str) -> None:
|
|
23
|
+
self._template = t
|
|
15
24
|
|
|
16
25
|
@property
|
|
17
26
|
def run_uuid(self) -> UUID:
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import time
|
|
3
1
|
import json
|
|
4
|
-
from abc import ABC, abstractmethod
|
|
5
|
-
from csvpath.util.exceptions import FileException
|
|
6
2
|
from csvpath.util.file_writers import DataFileWriter
|
|
7
3
|
from csvpath.util.file_readers import DataFileReader
|
|
8
4
|
from csvpath.util.nos import Nos
|
|
@@ -13,7 +9,6 @@ from ..metadata import Metadata
|
|
|
13
9
|
|
|
14
10
|
class RunRegistrar(Registrar, Listener):
|
|
15
11
|
def __init__(self, csvpaths):
|
|
16
|
-
# super().__init__(csvpaths)
|
|
17
12
|
Registrar.__init__(self, csvpaths)
|
|
18
13
|
Listener.__init__(self, csvpaths.config)
|
|
19
14
|
self.type_name = "run"
|
|
@@ -22,7 +17,6 @@ class RunRegistrar(Registrar, Listener):
|
|
|
22
17
|
@property
|
|
23
18
|
def manifest_path(self) -> str:
|
|
24
19
|
return Nos(self.archive).join("manifest.json")
|
|
25
|
-
# return os.path.join(self.archive, "manifest.json")
|
|
26
20
|
|
|
27
21
|
@property
|
|
28
22
|
def manifest(self) -> list:
|
|
@@ -54,6 +48,7 @@ class RunRegistrar(Registrar, Listener):
|
|
|
54
48
|
m["base_path"] = mdata.base_path
|
|
55
49
|
m["named_files_root"] = mdata.named_files_root
|
|
56
50
|
m["named_paths_root"] = mdata.named_paths_root
|
|
51
|
+
m["template"] = mdata.template or ""
|
|
57
52
|
#
|
|
58
53
|
#
|
|
59
54
|
#
|
|
@@ -113,7 +113,11 @@ allow_http_files=True
|
|
|
113
113
|
allow_local_files=True
|
|
114
114
|
|
|
115
115
|
[listeners]
|
|
116
|
-
#
|
|
116
|
+
#
|
|
117
|
+
# add listener group names to send events to the channel they represent. default
|
|
118
|
+
# tracks registrations, loads, and (soon) results at the highest level. it isn't
|
|
119
|
+
# required, but it is highly recommended.
|
|
120
|
+
#
|
|
117
121
|
groups = default,activation
|
|
118
122
|
#slack, openlineage, ckan, sftp, sftpplus, otlp, sqlite, sql
|
|
119
123
|
|
|
@@ -34,9 +34,12 @@ class DataFileWriter(ABC):
|
|
|
34
34
|
|
|
35
35
|
def close(self) -> None:
|
|
36
36
|
if self.sink is not None:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
try:
|
|
38
|
+
self.sink.flush()
|
|
39
|
+
self.sink.close()
|
|
40
|
+
self.sink = None
|
|
41
|
+
except Exception as e:
|
|
42
|
+
...
|
|
40
43
|
|
|
41
44
|
@abstractmethod
|
|
42
45
|
def load_if(self) -> None:
|