csvpath 0.0.558__tar.gz → 0.0.560__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.558 → csvpath-0.0.560}/PKG-INFO +1 -1
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-local-azure.ini +3 -3
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/csvpath.py +2 -2
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/csvpaths.py +29 -5
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/result.py +6 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/result_metadata.py +3 -3
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/results_manager.py +34 -2
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/results_metadata.py +10 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/results_registrar.py +1 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/run/run_metadata.py +9 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/reference.py +1 -1
- {csvpath-0.0.558 → csvpath-0.0.560}/pyproject.toml +1 -1
- {csvpath-0.0.558 → csvpath-0.0.560}/LICENSE +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/README.md +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/config.ini +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/function.imports +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-local-gcs.ini +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-local-s3.ini +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-local-sftp.ini +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-windows-azure.ini +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-windows-gcs.ini +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-windows-local.ini +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-windows-s3.ini +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-windows-sftp.ini +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/local-localhost-sftp.ini +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/azure.sh +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/gcs-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/gcs.sh +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/local.sh +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/s3.sh +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/sftp.sh +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/azure.bat +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/gcs.bat +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/local.bat +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/s3.bat +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/sftp.bat +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sqlite/csvpath +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/config/config.ini +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/config/env.json +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/__init__.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/__init__.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/asker.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/cli.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/const.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/debug_config.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/drill_down.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/function_describer.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/function_lister.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/selecter.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/__init__.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/errors/error.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/errors/error_collector.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/errors/error_comms.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/errors/error_manager.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/files/file_manager.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/files/file_metadata.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/files/file_registrar.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/files/files_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ckan/ckan.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ckan/datafile.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ckan/dataset.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/event.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/event_result.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/job.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/run.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/run_state.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/sender.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/metrics.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftpplus/rpc.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/slack/event.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/slack/sender.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/engine.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/tables.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/updates.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/webhook/webhook_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/webhook/webhook_results_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/metadata.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/paths/paths_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/paths/paths_manager.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/paths/paths_metadata.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/paths/paths_registrar.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/registrar.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/readers/readers.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/result_file_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/result_registrar.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/result_serializer.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/run/run_listener_stdout.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/run/run_registrar.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/test_listener.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/__init__.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/__init__.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/args.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/args_helper.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/all.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/andf.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/any.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/between.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/empty.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/exists.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/inf.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/no.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/notf.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/orf.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/yes.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/count.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/count_bytes.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/count_headers.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/count_lines.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/count_scans.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/counter.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/every.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/has_matches.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/increment.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/tally.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/total_lines.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/dates/now.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/function.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/function_factory.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/function_finder.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/function_focus.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/append.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/collect.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/empty_stack.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/end.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/header_name.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/headers.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/insert.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/mismatch.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/replace.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/reset_headers.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/advance.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/after_blank.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/dups.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/first.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/first_line.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/last.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/stop.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/above.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/add.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/divide.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/equals.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/intf.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/mod.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/multiply.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/odd.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/round.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/subtotal.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/subtract.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/sum.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/misc/fingerprint.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/misc/importf.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/misc/random.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/print/jinjaf.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/print/print_line.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/print/print_queue.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/print/printf.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/print/table.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/stats/minf.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/stats/nminmax.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/stats/percent.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/stats/percent_unique.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/stats/stdev.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/alter.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/caps.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/concat.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/contains.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/length.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/lower.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/metaphone.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/regex.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/starts_with.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/strip.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/substring.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/upper.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/testing/debug.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/__init__.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/boolean.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/datatype.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/datef.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/decimal.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/email.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/nonef.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/string.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/type.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/url.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/validity/fail.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/validity/failed.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/validity/line.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/variables/get.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/variables/pushpop.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/variables/put.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/variables/track.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/variables/variables.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/lark_parser.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/lark_transformer.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/matcher.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/__init__.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/equality.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/expression.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/header.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/matchable.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/qualified.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/term.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/variable.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/util/exceptions.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/util/expression_encoder.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/util/expression_utility.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/util/lark_print_parser.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/util/print_parser.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/util/runtime_data_collector.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/error_mode.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/explain_mode.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/files_mode.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/logic_mode.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/mode_controller.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/print_mode.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/return_mode.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/run_mode.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/source_mode.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/transfer_mode.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/unmatched_mode.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/validation_mode.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/scanning/__init__.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/scanning/scanner2.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/scanning/scanner2_parser.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/scanning/scanner2_transformer.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/azure/azure_data_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/azure/azure_data_writer.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/azure/azure_fingerprinter.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/azure/azure_nos.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/azure/azure_utils.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/backend_check.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/box.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/cache.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/caser.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/class_loader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/code.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/config.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/config_env.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/config_exception.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/date_util.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/exceptions.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/file_info.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/file_readers.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/file_writers.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/gcs/gcs_data_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/gcs/gcs_data_writer.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/gcs/gcs_nos.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/gcs/gcs_utils.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/hasher.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/http/http_data_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/intermediary.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/last_line_stats.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/line_counter.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/line_monitor.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/line_spooler.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/log_utility.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/metadata_parser.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/nos.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/pandas_data_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/path_util.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/printer.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/files_reference_finder_2.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/files_tools/range_finder.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/ref_utils.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/reference_exceptions.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/reference_grammar.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/reference_parser.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/reference_results.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/reference_transformer.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_reference_finder_2.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/data_finder.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/date_filter.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/identity_finder.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/path_filter.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/token_filters.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/tools/date_completer.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/run_home_maker.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/s3/s3_data_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/s3/s3_data_writer.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/s3/s3_fingerprinter.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/s3/s3_nos.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/s3/s3_utils.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_config.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_data_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_data_writer.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_nos.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_walk.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sqliter.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/template_util.py +0 -0
- {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/var_utility.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: csvpath
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.560
|
|
4
4
|
Summary: A data preboarding framework for managing and validating CSV, Excel, and other tabular data files using a Collect, Store, Validate, Publish pattern to create a trusted publisher for downstream data consumers.
|
|
5
5
|
Author: David Kershaw
|
|
6
6
|
Author-email: dk107dk@hotmail.com
|
|
@@ -11,8 +11,8 @@ extensions = csvpath, csvpaths
|
|
|
11
11
|
extensions = csv, tsv, dat, tab, psv, ssv
|
|
12
12
|
|
|
13
13
|
[errors]
|
|
14
|
-
csvpath =
|
|
15
|
-
csvpaths =
|
|
14
|
+
csvpath = print,fail,collect
|
|
15
|
+
csvpaths = print,collect
|
|
16
16
|
use_format = full
|
|
17
17
|
pattern = {time}:{file}:{line}:{paths}:{instance}:{chain}: {message}
|
|
18
18
|
|
|
@@ -46,7 +46,7 @@ allow_http_files = True
|
|
|
46
46
|
allow_local_files = True
|
|
47
47
|
|
|
48
48
|
[listeners]
|
|
49
|
-
groups =
|
|
49
|
+
groups = default
|
|
50
50
|
sqlite.result = from csvpath.managers.integrations.sqlite.sqlite_result_listener import SqliteResultListener
|
|
51
51
|
sqlite.results = from csvpath.managers.integrations.sqlite.sqlite_results_listener import SqliteResultsListener
|
|
52
52
|
default.file = from csvpath.managers.files.files_listener import FilesListener
|
|
@@ -1338,7 +1338,7 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
|
|
|
1338
1338
|
self.identity,
|
|
1339
1339
|
)
|
|
1340
1340
|
return
|
|
1341
|
-
if self.scanner
|
|
1341
|
+
if self.scanner and self.scanner.filename:
|
|
1342
1342
|
filename = self.scanner.filename
|
|
1343
1343
|
#
|
|
1344
1344
|
# there are times, e.g. when using Lambda, when it may be better to
|
|
@@ -1365,7 +1365,7 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
|
|
|
1365
1365
|
f"Not using cache to get total lines and headers for {filename}"
|
|
1366
1366
|
)
|
|
1367
1367
|
lc = LineCounter(self)
|
|
1368
|
-
lm, headers = lc.get_lines_and_headers(
|
|
1368
|
+
lm, headers = lc.get_lines_and_headers(filename)
|
|
1369
1369
|
self.line_monitor = lm
|
|
1370
1370
|
self.headers = headers
|
|
1371
1371
|
|
|
@@ -200,7 +200,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
200
200
|
""" @private """
|
|
201
201
|
|
|
202
202
|
self.logger.info(
|
|
203
|
-
"Initialized CsvPaths: {self} in thread: {threading.
|
|
203
|
+
f"Initialized CsvPaths: {self} in thread: {threading.current_thread()}"
|
|
204
204
|
)
|
|
205
205
|
|
|
206
206
|
def _set_managers(self) -> None:
|
|
@@ -670,6 +670,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
670
670
|
filename=filename,
|
|
671
671
|
file=file,
|
|
672
672
|
run_uuid=run_uuid,
|
|
673
|
+
method="collect_paths",
|
|
673
674
|
)
|
|
674
675
|
#
|
|
675
676
|
#
|
|
@@ -686,6 +687,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
686
687
|
run_time=self.current_run_time,
|
|
687
688
|
run_dir=crt,
|
|
688
689
|
run_uuid=run_uuid,
|
|
690
|
+
method="collect_paths",
|
|
689
691
|
)
|
|
690
692
|
# casting a broad net because if "raise" not in the error policy we
|
|
691
693
|
# want to never fail during a run
|
|
@@ -813,7 +815,11 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
813
815
|
# run starts here
|
|
814
816
|
#
|
|
815
817
|
self.run_metadata = self.results_manager.start_run(
|
|
816
|
-
run_dir=crt,
|
|
818
|
+
run_dir=crt,
|
|
819
|
+
pathsname=pathsname,
|
|
820
|
+
filename=filename,
|
|
821
|
+
run_uuid=run_uuid,
|
|
822
|
+
method="fast_forward_paths",
|
|
817
823
|
)
|
|
818
824
|
#
|
|
819
825
|
#
|
|
@@ -830,6 +836,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
830
836
|
run_time=self.current_run_time,
|
|
831
837
|
run_dir=crt,
|
|
832
838
|
run_uuid=run_uuid,
|
|
839
|
+
method="fast_forward_paths",
|
|
833
840
|
)
|
|
834
841
|
try:
|
|
835
842
|
self._load_csvpath(
|
|
@@ -923,7 +930,11 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
923
930
|
# run starts here
|
|
924
931
|
#
|
|
925
932
|
self.run_metadata = self.results_manager.start_run(
|
|
926
|
-
run_dir=crt,
|
|
933
|
+
run_dir=crt,
|
|
934
|
+
pathsname=pathsname,
|
|
935
|
+
filename=filename,
|
|
936
|
+
run_uuid=run_uuid,
|
|
937
|
+
method="next_paths",
|
|
927
938
|
)
|
|
928
939
|
#
|
|
929
940
|
#
|
|
@@ -956,6 +967,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
956
967
|
run_time=self.current_run_time,
|
|
957
968
|
run_dir=crt,
|
|
958
969
|
run_uuid=run_uuid,
|
|
970
|
+
method="next_paths",
|
|
959
971
|
)
|
|
960
972
|
if self._fail_all:
|
|
961
973
|
self.logger.warning(
|
|
@@ -1043,6 +1055,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1043
1055
|
collect_when_not_matched=collect_when_not_matched,
|
|
1044
1056
|
file=file,
|
|
1045
1057
|
template=template,
|
|
1058
|
+
method="collect_by_line",
|
|
1046
1059
|
):
|
|
1047
1060
|
# re: W0612: we need 'line' in order to do the iteration. we have to iterate.
|
|
1048
1061
|
lines.append(line)
|
|
@@ -1091,6 +1104,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1091
1104
|
collect_when_not_matched=collect_when_not_matched,
|
|
1092
1105
|
file=file,
|
|
1093
1106
|
template=template,
|
|
1107
|
+
method="fast_forward_by_line",
|
|
1094
1108
|
):
|
|
1095
1109
|
# re: W0612: we need 'line' in order to do the iteration. we have to iterate.
|
|
1096
1110
|
pass
|
|
@@ -1117,6 +1131,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1117
1131
|
if_all_agree=False,
|
|
1118
1132
|
collect_when_not_matched=False,
|
|
1119
1133
|
template: str = None,
|
|
1134
|
+
method: str = None,
|
|
1120
1135
|
) -> List[Any]:
|
|
1121
1136
|
#
|
|
1122
1137
|
# we're doing a programmatic use when we use next_by_line() so we don't allow
|
|
@@ -1147,6 +1162,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1147
1162
|
collect_when_not_matched=False,
|
|
1148
1163
|
template: str = None,
|
|
1149
1164
|
file: str,
|
|
1165
|
+
method: str = "next_by_line",
|
|
1150
1166
|
) -> List[Any]:
|
|
1151
1167
|
"""Does a CsvPath.next() on filename where each row is considered
|
|
1152
1168
|
by every named path before the next row starts.
|
|
@@ -1200,6 +1216,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1200
1216
|
filename=filename,
|
|
1201
1217
|
pathsname=pathsname,
|
|
1202
1218
|
crt=crt,
|
|
1219
|
+
method=method,
|
|
1203
1220
|
)
|
|
1204
1221
|
#
|
|
1205
1222
|
# setting file into the csvpath is less obviously useful at CsvPaths
|
|
@@ -1370,7 +1387,9 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1370
1387
|
self.error_manager.handle_error(source=self, msg=f"{ex}")
|
|
1371
1388
|
return csvpath_objects
|
|
1372
1389
|
|
|
1373
|
-
def _prep_csvpath_results(
|
|
1390
|
+
def _prep_csvpath_results(
|
|
1391
|
+
self, *, csvpath_objects, filename, pathsname, crt: str, method: str
|
|
1392
|
+
):
|
|
1374
1393
|
"""@private"""
|
|
1375
1394
|
#
|
|
1376
1395
|
#
|
|
@@ -1380,7 +1399,11 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1380
1399
|
# run starts here
|
|
1381
1400
|
#
|
|
1382
1401
|
self.run_metadata = self.results_manager.start_run(
|
|
1383
|
-
run_dir=crt,
|
|
1402
|
+
run_dir=crt,
|
|
1403
|
+
pathsname=pathsname,
|
|
1404
|
+
filename=filename,
|
|
1405
|
+
run_uuid=run_uuid,
|
|
1406
|
+
method="next_paths",
|
|
1384
1407
|
)
|
|
1385
1408
|
#
|
|
1386
1409
|
#
|
|
@@ -1400,6 +1423,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1400
1423
|
run_dir=crt,
|
|
1401
1424
|
by_line=True,
|
|
1402
1425
|
run_uuid=run_uuid,
|
|
1426
|
+
method=method,
|
|
1403
1427
|
)
|
|
1404
1428
|
csvpath[1] = result
|
|
1405
1429
|
#
|
|
@@ -39,6 +39,7 @@ class Result(ErrorCollector, Printer, Listener): # pylint: disable=R0902
|
|
|
39
39
|
runtime_data: dict = None,
|
|
40
40
|
by_line: bool = False,
|
|
41
41
|
run_uuid: UUID,
|
|
42
|
+
method: str = None,
|
|
42
43
|
):
|
|
43
44
|
"""@private"""
|
|
44
45
|
ErrorCollector.__init__(self)
|
|
@@ -63,6 +64,7 @@ class Result(ErrorCollector, Printer, Listener): # pylint: disable=R0902
|
|
|
63
64
|
self._actual_data_file = None
|
|
64
65
|
self._origin_data_file = None
|
|
65
66
|
self._by_line = by_line
|
|
67
|
+
self._method = method
|
|
66
68
|
#
|
|
67
69
|
# data_file_path is the path to data.csv of this result
|
|
68
70
|
#
|
|
@@ -167,6 +169,10 @@ class Result(ErrorCollector, Printer, Listener): # pylint: disable=R0902
|
|
|
167
169
|
def by_line(self) -> bool:
|
|
168
170
|
return self._by_line
|
|
169
171
|
|
|
172
|
+
@property
|
|
173
|
+
def method(self) -> bool:
|
|
174
|
+
return self._method
|
|
175
|
+
|
|
170
176
|
@property
|
|
171
177
|
def source_mode_preceding(self) -> bool:
|
|
172
178
|
if self._preceding is None:
|
|
@@ -58,10 +58,8 @@ class ResultMetadata(Metadata):
|
|
|
58
58
|
self.lines_scanned: int = 0
|
|
59
59
|
self.lines_total: int = 0
|
|
60
60
|
self.lines_matched: int = 0
|
|
61
|
-
#
|
|
62
|
-
# why do we need this here? the run knows.
|
|
63
|
-
#
|
|
64
61
|
self.by_line: bool = False
|
|
62
|
+
self.method: str = None
|
|
65
63
|
#
|
|
66
64
|
# transfer tuples:
|
|
67
65
|
# 1: filename, no extension needed: data | unmatched
|
|
@@ -79,6 +77,7 @@ ResultMetadata(
|
|
|
79
77
|
{self.run_home},{self.instance_home},
|
|
80
78
|
{self.input_data_file},
|
|
81
79
|
{self.file_fingerprints},
|
|
80
|
+
{self.method},
|
|
82
81
|
{self.valid},{self.completed},{self.files_expected},{self.error_count},
|
|
83
82
|
{self.transfers}
|
|
84
83
|
)""" # {self.file_count},
|
|
@@ -98,6 +97,7 @@ ResultMetadata(
|
|
|
98
97
|
#
|
|
99
98
|
#
|
|
100
99
|
self.run = m.get("run")
|
|
100
|
+
self.method = m.get("method")
|
|
101
101
|
self.run_uuid_string = m.get("run_uuid")
|
|
102
102
|
self.run_home = m.get("run_home")
|
|
103
103
|
self.instance_home = m.get("instance_home")
|
|
@@ -88,7 +88,14 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
88
88
|
# and return that uuid.
|
|
89
89
|
#
|
|
90
90
|
def start_run(
|
|
91
|
-
self,
|
|
91
|
+
self,
|
|
92
|
+
*,
|
|
93
|
+
run_dir: str,
|
|
94
|
+
pathsname: str,
|
|
95
|
+
filename: str,
|
|
96
|
+
file: str = None,
|
|
97
|
+
run_uuid: UUID,
|
|
98
|
+
method: str,
|
|
92
99
|
) -> ResultsMetadata:
|
|
93
100
|
"""@private"""
|
|
94
101
|
rr = ResultsRegistrar(
|
|
@@ -121,6 +128,7 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
121
128
|
mdata.named_paths_name = pathsname
|
|
122
129
|
mdata.named_paths_uuid_string = np_uuid
|
|
123
130
|
mdata.named_results_name = pathsname
|
|
131
|
+
mdata.method = method
|
|
124
132
|
rr.register_start(mdata)
|
|
125
133
|
return mdata
|
|
126
134
|
|
|
@@ -217,7 +225,7 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
217
225
|
# it doesn't separate printouts from different Result objects. a better way
|
|
218
226
|
# to go might be to iterate the results and pull the printouts you need.
|
|
219
227
|
#
|
|
220
|
-
def get_printouts(self, name: str, printstream: str = "default") ->
|
|
228
|
+
def get_printouts(self, name: str, printstream: str = "default") -> list[str]:
|
|
221
229
|
results = self._get_results_list(name)
|
|
222
230
|
ps = []
|
|
223
231
|
for r in results:
|
|
@@ -323,6 +331,7 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
323
331
|
mdata.identity = result.identity_or_index
|
|
324
332
|
mdata.named_paths_name = result.paths_name
|
|
325
333
|
mdata.named_file_name = result.file_name
|
|
334
|
+
mdata.method = result.method
|
|
326
335
|
rr = RunRegistrar(self.csvpaths)
|
|
327
336
|
rr.register_start(mdata)
|
|
328
337
|
#
|
|
@@ -331,6 +340,10 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
331
340
|
# we use the same UUID for both metadata updates because the
|
|
332
341
|
# UUID represents the run, not the metadata object
|
|
333
342
|
#
|
|
343
|
+
#
|
|
344
|
+
# collect_paths and collect_by_line expect a data.csv file, even if it has 0-bytes.
|
|
345
|
+
# we make sure of that here.
|
|
346
|
+
#
|
|
334
347
|
mdata = ResultMetadata(self.csvpaths.config)
|
|
335
348
|
mdata.uuid = result.uuid
|
|
336
349
|
mdata.run_uuid = result.run_uuid
|
|
@@ -341,6 +354,18 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
341
354
|
mdata.run = result.run_dir[result.run_dir.rfind(sep) + 1 :]
|
|
342
355
|
mdata.run_home = result.run_dir
|
|
343
356
|
mdata.instance_home = result.instance_dir
|
|
357
|
+
mdata.method = result.method
|
|
358
|
+
#
|
|
359
|
+
# for the two CsvPaths methods that result in data.csv we want to make
|
|
360
|
+
# sure there is a data.csv, even if it ends up empty. we don't make this
|
|
361
|
+
# effort for unmatched.csv. perhaps we should but atm seems ok to pass.
|
|
362
|
+
#
|
|
363
|
+
if mdata.method in ["collect_paths", "collect_by_line"]:
|
|
364
|
+
path = Nos(mdata.instance_home).join("data.csv")
|
|
365
|
+
nos = Nos(path)
|
|
366
|
+
if not nos.exists():
|
|
367
|
+
with DataFileWriter(path=path) as file:
|
|
368
|
+
file.write("")
|
|
344
369
|
mdata.instance_identity = result.identity_or_index
|
|
345
370
|
mdata.input_data_file = result.file_name
|
|
346
371
|
rs = ResultSerializer(self._csvpaths.config.archive_path)
|
|
@@ -534,6 +559,13 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
534
559
|
self.csvpaths.logger.error(msg)
|
|
535
560
|
if self.csvpaths.ecoms.do_i_raise():
|
|
536
561
|
raise InputException(msg)
|
|
562
|
+
return []
|
|
563
|
+
if len(results.files) > 1:
|
|
564
|
+
self.csvpaths.logger.warning(
|
|
565
|
+
"Referance found multiple runs (%s) when only one was expected and only one will be used: %s",
|
|
566
|
+
len(results.files),
|
|
567
|
+
name,
|
|
568
|
+
)
|
|
537
569
|
path = results.files[0]
|
|
538
570
|
run = path[len(self.csvpaths.config.archive_name) :]
|
|
539
571
|
nos = Nos(path)
|
|
@@ -26,6 +26,15 @@ class ResultsMetadata(Metadata):
|
|
|
26
26
|
self.all_expected_files: bool = None
|
|
27
27
|
self.by_line: bool = False
|
|
28
28
|
self._run_uuid: UUID = None
|
|
29
|
+
self._method: str = None
|
|
30
|
+
|
|
31
|
+
@property
|
|
32
|
+
def method(self) -> str:
|
|
33
|
+
return self._method
|
|
34
|
+
|
|
35
|
+
@method.setter
|
|
36
|
+
def method(self, m: str) -> None:
|
|
37
|
+
self._method = m
|
|
29
38
|
|
|
30
39
|
@property
|
|
31
40
|
def run_uuid(self) -> UUID:
|
|
@@ -101,3 +110,4 @@ class ResultsMetadata(Metadata):
|
|
|
101
110
|
self.all_valid = m.get("all_valid")
|
|
102
111
|
self.error_count = m.get("error_count")
|
|
103
112
|
self.all_expected_files = m.get("all_expected_files")
|
|
113
|
+
self.method = m.get("method")
|
|
@@ -122,6 +122,7 @@ class ResultsRegistrar(Registrar, Listener):
|
|
|
122
122
|
m["hostname"] = mdata.hostname
|
|
123
123
|
m["username"] = mdata.username
|
|
124
124
|
m["ip_address"] = mdata.ip_address
|
|
125
|
+
m["method"] = mdata.method
|
|
125
126
|
mp = mdata.manifest_path
|
|
126
127
|
m["manifest_path"] = mp
|
|
127
128
|
with DataFileWriter(path=mp) as file:
|
|
@@ -11,6 +11,7 @@ class RunMetadata(Metadata):
|
|
|
11
11
|
self.named_file_name: str = None
|
|
12
12
|
self.identity: str = None
|
|
13
13
|
self._run_uuid: UUID = None
|
|
14
|
+
self._method: str = None
|
|
14
15
|
|
|
15
16
|
@property
|
|
16
17
|
def run_uuid(self) -> UUID:
|
|
@@ -29,3 +30,11 @@ class RunMetadata(Metadata):
|
|
|
29
30
|
@run_uuid_string.setter
|
|
30
31
|
def run_uuid_string(self, u: str) -> None:
|
|
31
32
|
self._run_uuid = UUID(u)
|
|
33
|
+
|
|
34
|
+
@property
|
|
35
|
+
def method(self) -> str:
|
|
36
|
+
return self._method
|
|
37
|
+
|
|
38
|
+
@method.setter
|
|
39
|
+
def method(self, m: str) -> None:
|
|
40
|
+
self._method = m
|
|
@@ -198,7 +198,7 @@ class Reference(Matchable):
|
|
|
198
198
|
else:
|
|
199
199
|
ret = v
|
|
200
200
|
else:
|
|
201
|
-
msg = f"
|
|
201
|
+
msg = f"The {ref['name']} variable is unknown: {self.my_chain}"
|
|
202
202
|
self.matcher.csvpath.error_manager.handle_error(source=self, msg=msg)
|
|
203
203
|
if self.matcher.csvpath.do_i_raise():
|
|
204
204
|
raise DataException(msg)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "csvpath"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.560"
|
|
4
4
|
description = "A data preboarding framework for managing and validating CSV, Excel, and other tabular data files using a Collect, Store, Validate, Publish pattern to create a trusted publisher for downstream data consumers."
|
|
5
5
|
authors = ["David Kershaw <dk107dk@hotmail.com>"]
|
|
6
6
|
readme = "README.md"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_error_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_file_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
{csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_paths_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_result_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_results_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftpplus/arrival_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
{csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftpplus/transfer_creator.py
RENAMED
|
File without changes
|