csvpath 0.0.559__tar.gz → 0.0.561__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.559 → csvpath-0.0.561}/PKG-INFO +2 -1
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/config/jenkins-local-azure.ini +3 -3
- {csvpath-0.0.559 → csvpath-0.0.561}/config/config.ini +5 -5
- csvpath-0.0.561/config/env.json +1 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/csvpaths.py +41 -5
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/otlp/metrics.py +52 -33
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +8 -1
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/otlp/otlp_results_listener.py +1 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/registrar.py +24 -19
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/results/result.py +6 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/results/result_metadata.py +3 -3
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/results/results_manager.py +26 -1
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/results/results_metadata.py +10 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/results/results_registrar.py +1 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/run/run_metadata.py +9 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/validity/line.py +3 -2
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/productions/reference.py +1 -1
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/config.py +207 -181
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/config_env.py +1 -3
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/s3/s3_utils.py +2 -4
- {csvpath-0.0.559 → csvpath-0.0.561}/pyproject.toml +2 -1
- csvpath-0.0.559/config/env.json +0 -1
- {csvpath-0.0.559 → csvpath-0.0.561}/LICENSE +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/README.md +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/config/config.ini +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/config/function.imports +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/config/jenkins-local-gcs.ini +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/config/jenkins-local-s3.ini +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/config/jenkins-local-sftp.ini +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/config/jenkins-windows-azure.ini +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/config/jenkins-windows-gcs.ini +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/config/jenkins-windows-local.ini +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/config/jenkins-windows-s3.ini +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/config/jenkins-windows-sftp.ini +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/config/local-localhost-sftp.ini +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/mac/azure.sh +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/mac/gcs-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/mac/gcs.sh +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/mac/local.sh +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/mac/s3.sh +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/mac/sftp.sh +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/windows/azure.bat +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/windows/gcs.bat +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/windows/local.bat +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/windows/s3.bat +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/windows/sftp.bat +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/integrations/sqlite/csvpath +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/assets/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/__init__.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/cli/__init__.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/cli/asker.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/cli/cli.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/cli/const.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/cli/debug_config.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/cli/drill_down.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/cli/function_describer.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/cli/function_lister.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/cli/selecter.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/csvpath.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/__init__.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/errors/error.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/errors/error_collector.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/errors/error_comms.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/errors/error_manager.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/files/file_manager.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/files/file_metadata.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/files/file_registrar.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/files/files_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ckan/ckan.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ckan/datafile.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ckan/dataset.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ol/event.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ol/event_result.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ol/job.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ol/run.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ol/run_state.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/ol/sender.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sftpplus/rpc.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/slack/event.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/slack/sender.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sql/engine.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sql/tables.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sql/updates.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/webhook/webhook_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/webhook/webhook_results_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/metadata.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/paths/paths_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/paths/paths_manager.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/paths/paths_metadata.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/paths/paths_registrar.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/results/readers/readers.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/results/result_file_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/results/result_registrar.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/results/result_serializer.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/run/run_listener_stdout.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/run/run_registrar.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/test_listener.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/__init__.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/__init__.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/args.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/args_helper.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/boolean/all.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/boolean/andf.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/boolean/any.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/boolean/between.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/boolean/empty.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/boolean/exists.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/boolean/inf.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/boolean/no.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/boolean/notf.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/boolean/orf.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/boolean/yes.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/counting/count.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/counting/count_bytes.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/counting/count_headers.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/counting/count_lines.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/counting/count_scans.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/counting/counter.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/counting/every.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/counting/has_matches.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/counting/increment.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/counting/tally.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/counting/total_lines.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/dates/now.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/function.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/function_factory.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/function_finder.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/function_focus.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/headers/append.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/headers/collect.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/headers/empty_stack.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/headers/end.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/headers/header_name.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/headers/headers.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/headers/insert.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/headers/mismatch.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/headers/replace.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/headers/reset_headers.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/lines/advance.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/lines/after_blank.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/lines/dups.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/lines/first.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/lines/first_line.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/lines/last.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/lines/stop.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/math/above.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/math/add.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/math/divide.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/math/equals.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/math/intf.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/math/mod.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/math/multiply.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/math/odd.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/math/round.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/math/subtotal.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/math/subtract.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/math/sum.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/misc/fingerprint.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/misc/importf.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/misc/random.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/print/jinjaf.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/print/print_line.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/print/print_queue.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/print/printf.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/print/table.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/stats/minf.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/stats/nminmax.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/stats/percent.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/stats/percent_unique.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/stats/stdev.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/strings/alter.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/strings/caps.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/strings/concat.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/strings/contains.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/strings/length.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/strings/lower.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/strings/metaphone.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/strings/regex.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/strings/starts_with.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/strings/strip.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/strings/substring.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/strings/upper.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/testing/debug.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/types/__init__.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/types/boolean.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/types/datatype.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/types/datef.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/types/decimal.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/types/email.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/types/nonef.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/types/string.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/types/type.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/types/url.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/validity/fail.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/validity/failed.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/variables/get.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/variables/pushpop.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/variables/put.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/variables/track.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/functions/variables/variables.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/lark_parser.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/lark_transformer.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/matcher.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/productions/__init__.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/productions/equality.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/productions/expression.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/productions/header.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/productions/matchable.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/productions/qualified.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/productions/term.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/productions/variable.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/util/exceptions.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/util/expression_encoder.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/util/expression_utility.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/util/lark_print_parser.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/util/print_parser.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/matching/util/runtime_data_collector.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/modes/error_mode.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/modes/explain_mode.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/modes/files_mode.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/modes/logic_mode.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/modes/mode_controller.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/modes/print_mode.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/modes/return_mode.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/modes/run_mode.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/modes/source_mode.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/modes/transfer_mode.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/modes/unmatched_mode.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/modes/validation_mode.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/scanning/__init__.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/scanning/scanner2.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/scanning/scanner2_parser.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/scanning/scanner2_transformer.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/azure/azure_data_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/azure/azure_data_writer.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/azure/azure_fingerprinter.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/azure/azure_nos.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/azure/azure_utils.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/backend_check.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/box.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/cache.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/caser.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/class_loader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/code.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/config_exception.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/date_util.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/exceptions.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/file_info.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/file_readers.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/file_writers.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/gcs/gcs_data_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/gcs/gcs_data_writer.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/gcs/gcs_nos.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/gcs/gcs_utils.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/hasher.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/http/http_data_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/intermediary.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/last_line_stats.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/line_counter.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/line_monitor.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/line_spooler.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/log_utility.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/metadata_parser.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/nos.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/pandas_data_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/path_util.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/printer.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/files_reference_finder_2.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/files_tools/range_finder.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/ref_utils.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/reference_exceptions.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/reference_grammar.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/reference_parser.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/reference_results.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/reference_transformer.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/results_reference_finder_2.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/results_tools/data_finder.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/results_tools/date_filter.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/results_tools/identity_finder.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/results_tools/path_filter.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/results_tools/token_filters.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/references/tools/date_completer.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/run_home_maker.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/s3/s3_data_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/s3/s3_data_writer.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/s3/s3_fingerprinter.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/s3/s3_nos.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/sftp/sftp_config.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/sftp/sftp_data_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/sftp/sftp_data_writer.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/sftp/sftp_nos.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/sftp/sftp_walk.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/sqliter.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/csvpath/util/template_util.py +0 -0
- {csvpath-0.0.559 → csvpath-0.0.561}/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.561
|
|
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
|
|
@@ -34,6 +34,7 @@ Requires-Dist: metaphone (>=0.6,<0.7)
|
|
|
34
34
|
Requires-Dist: mysqlclient (>=2.2.7,<3.0.0)
|
|
35
35
|
Requires-Dist: openlineage-python (>=1.25.0,<2.0.0)
|
|
36
36
|
Requires-Dist: opentelemetry-distro[otlp] (>=0.50b0,<0.51)
|
|
37
|
+
Requires-Dist: pandas (>=2.2.2,<3.0.0) ; extra == "pandas"
|
|
37
38
|
Requires-Dist: paramiko (>=3.5.0,<4.0.0)
|
|
38
39
|
Requires-Dist: pdoc (>=15.0.1,<16.0.0)
|
|
39
40
|
Requires-Dist: prompt-toolkit (>=3.0.50,<4.0.0)
|
|
@@ -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
|
|
@@ -17,15 +17,15 @@ use_format = full
|
|
|
17
17
|
pattern = {time}:{file}:{line}:{paths}:{instance}:{chain}: {message}
|
|
18
18
|
|
|
19
19
|
[logging]
|
|
20
|
-
csvpath =
|
|
21
|
-
csvpaths =
|
|
20
|
+
csvpath = debug
|
|
21
|
+
csvpaths = debug
|
|
22
22
|
log_file = logs/csvpath.log
|
|
23
23
|
log_files_to_keep = 100
|
|
24
24
|
log_file_size = 52428800
|
|
25
25
|
handler = file
|
|
26
26
|
|
|
27
27
|
[config]
|
|
28
|
-
path =
|
|
28
|
+
path = config/config.ini
|
|
29
29
|
allow_var_sub = True
|
|
30
30
|
var_sub_source = env
|
|
31
31
|
|
|
@@ -104,7 +104,7 @@ port = SFTPPLUS_PORT
|
|
|
104
104
|
admin_username = SFTPPLUS_ADMIN_USERNAME
|
|
105
105
|
admin_password = SFTPPLUS_ADMIN_PASSWORD
|
|
106
106
|
api_url = https://localhost:10020/json
|
|
107
|
-
scripts_dir =
|
|
107
|
+
scripts_dir =
|
|
108
108
|
execute_timeout = 300
|
|
109
109
|
|
|
110
110
|
[ckan]
|
|
@@ -119,7 +119,7 @@ timeout = 5
|
|
|
119
119
|
verify = False
|
|
120
120
|
|
|
121
121
|
[slack]
|
|
122
|
-
webhook_url =
|
|
122
|
+
webhook_url =
|
|
123
123
|
|
|
124
124
|
[scripts]
|
|
125
125
|
run_scripts = yes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -160,6 +160,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
160
160
|
""" @private """
|
|
161
161
|
self._config._assure_logs_path()
|
|
162
162
|
self.logger = LogUtility.logger(self)
|
|
163
|
+
self.info_dump()
|
|
163
164
|
""" @private """
|
|
164
165
|
self._errors = []
|
|
165
166
|
# coordinator attributes
|
|
@@ -200,9 +201,20 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
200
201
|
""" @private """
|
|
201
202
|
|
|
202
203
|
self.logger.info(
|
|
203
|
-
"Initialized CsvPaths: {self} in thread: {threading.
|
|
204
|
+
f"Initialized CsvPaths: {self} in thread: {threading.current_thread()}"
|
|
204
205
|
)
|
|
205
206
|
|
|
207
|
+
def info_dump(self) -> None:
|
|
208
|
+
self.logger.info(
|
|
209
|
+
"Initated logging on log path: %s",
|
|
210
|
+
self.config.get(section="logging", name="log_file"),
|
|
211
|
+
)
|
|
212
|
+
self.logger.info("Config file is at: %s", self.config.configpath)
|
|
213
|
+
intgs = self.config.get(section="listeners", name="groups")
|
|
214
|
+
self.logger.debug("Active integrations:")
|
|
215
|
+
for _ in intgs:
|
|
216
|
+
self.logger.debug(" - %s", _)
|
|
217
|
+
|
|
206
218
|
def _set_managers(self) -> None:
|
|
207
219
|
self.paths_manager = PathsManager(csvpaths=self)
|
|
208
220
|
self.file_manager = FileManager(csvpaths=self)
|
|
@@ -670,6 +682,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
670
682
|
filename=filename,
|
|
671
683
|
file=file,
|
|
672
684
|
run_uuid=run_uuid,
|
|
685
|
+
method="collect_paths",
|
|
673
686
|
)
|
|
674
687
|
#
|
|
675
688
|
#
|
|
@@ -686,6 +699,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
686
699
|
run_time=self.current_run_time,
|
|
687
700
|
run_dir=crt,
|
|
688
701
|
run_uuid=run_uuid,
|
|
702
|
+
method="collect_paths",
|
|
689
703
|
)
|
|
690
704
|
# casting a broad net because if "raise" not in the error policy we
|
|
691
705
|
# want to never fail during a run
|
|
@@ -813,7 +827,11 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
813
827
|
# run starts here
|
|
814
828
|
#
|
|
815
829
|
self.run_metadata = self.results_manager.start_run(
|
|
816
|
-
run_dir=crt,
|
|
830
|
+
run_dir=crt,
|
|
831
|
+
pathsname=pathsname,
|
|
832
|
+
filename=filename,
|
|
833
|
+
run_uuid=run_uuid,
|
|
834
|
+
method="fast_forward_paths",
|
|
817
835
|
)
|
|
818
836
|
#
|
|
819
837
|
#
|
|
@@ -830,6 +848,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
830
848
|
run_time=self.current_run_time,
|
|
831
849
|
run_dir=crt,
|
|
832
850
|
run_uuid=run_uuid,
|
|
851
|
+
method="fast_forward_paths",
|
|
833
852
|
)
|
|
834
853
|
try:
|
|
835
854
|
self._load_csvpath(
|
|
@@ -923,7 +942,11 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
923
942
|
# run starts here
|
|
924
943
|
#
|
|
925
944
|
self.run_metadata = self.results_manager.start_run(
|
|
926
|
-
run_dir=crt,
|
|
945
|
+
run_dir=crt,
|
|
946
|
+
pathsname=pathsname,
|
|
947
|
+
filename=filename,
|
|
948
|
+
run_uuid=run_uuid,
|
|
949
|
+
method="next_paths",
|
|
927
950
|
)
|
|
928
951
|
#
|
|
929
952
|
#
|
|
@@ -956,6 +979,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
956
979
|
run_time=self.current_run_time,
|
|
957
980
|
run_dir=crt,
|
|
958
981
|
run_uuid=run_uuid,
|
|
982
|
+
method="next_paths",
|
|
959
983
|
)
|
|
960
984
|
if self._fail_all:
|
|
961
985
|
self.logger.warning(
|
|
@@ -1043,6 +1067,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1043
1067
|
collect_when_not_matched=collect_when_not_matched,
|
|
1044
1068
|
file=file,
|
|
1045
1069
|
template=template,
|
|
1070
|
+
method="collect_by_line",
|
|
1046
1071
|
):
|
|
1047
1072
|
# re: W0612: we need 'line' in order to do the iteration. we have to iterate.
|
|
1048
1073
|
lines.append(line)
|
|
@@ -1091,6 +1116,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1091
1116
|
collect_when_not_matched=collect_when_not_matched,
|
|
1092
1117
|
file=file,
|
|
1093
1118
|
template=template,
|
|
1119
|
+
method="fast_forward_by_line",
|
|
1094
1120
|
):
|
|
1095
1121
|
# re: W0612: we need 'line' in order to do the iteration. we have to iterate.
|
|
1096
1122
|
pass
|
|
@@ -1117,6 +1143,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1117
1143
|
if_all_agree=False,
|
|
1118
1144
|
collect_when_not_matched=False,
|
|
1119
1145
|
template: str = None,
|
|
1146
|
+
method: str = None,
|
|
1120
1147
|
) -> List[Any]:
|
|
1121
1148
|
#
|
|
1122
1149
|
# we're doing a programmatic use when we use next_by_line() so we don't allow
|
|
@@ -1147,6 +1174,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1147
1174
|
collect_when_not_matched=False,
|
|
1148
1175
|
template: str = None,
|
|
1149
1176
|
file: str,
|
|
1177
|
+
method: str = "next_by_line",
|
|
1150
1178
|
) -> List[Any]:
|
|
1151
1179
|
"""Does a CsvPath.next() on filename where each row is considered
|
|
1152
1180
|
by every named path before the next row starts.
|
|
@@ -1200,6 +1228,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1200
1228
|
filename=filename,
|
|
1201
1229
|
pathsname=pathsname,
|
|
1202
1230
|
crt=crt,
|
|
1231
|
+
method=method,
|
|
1203
1232
|
)
|
|
1204
1233
|
#
|
|
1205
1234
|
# setting file into the csvpath is less obviously useful at CsvPaths
|
|
@@ -1370,7 +1399,9 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1370
1399
|
self.error_manager.handle_error(source=self, msg=f"{ex}")
|
|
1371
1400
|
return csvpath_objects
|
|
1372
1401
|
|
|
1373
|
-
def _prep_csvpath_results(
|
|
1402
|
+
def _prep_csvpath_results(
|
|
1403
|
+
self, *, csvpath_objects, filename, pathsname, crt: str, method: str
|
|
1404
|
+
):
|
|
1374
1405
|
"""@private"""
|
|
1375
1406
|
#
|
|
1376
1407
|
#
|
|
@@ -1380,7 +1411,11 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1380
1411
|
# run starts here
|
|
1381
1412
|
#
|
|
1382
1413
|
self.run_metadata = self.results_manager.start_run(
|
|
1383
|
-
run_dir=crt,
|
|
1414
|
+
run_dir=crt,
|
|
1415
|
+
pathsname=pathsname,
|
|
1416
|
+
filename=filename,
|
|
1417
|
+
run_uuid=run_uuid,
|
|
1418
|
+
method="next_paths",
|
|
1384
1419
|
)
|
|
1385
1420
|
#
|
|
1386
1421
|
#
|
|
@@ -1400,6 +1435,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
|
|
|
1400
1435
|
run_dir=crt,
|
|
1401
1436
|
by_line=True,
|
|
1402
1437
|
run_uuid=run_uuid,
|
|
1438
|
+
method=method,
|
|
1403
1439
|
)
|
|
1404
1440
|
csvpath[1] = result
|
|
1405
1441
|
#
|
|
@@ -64,39 +64,57 @@ class Metrics:
|
|
|
64
64
|
@property
|
|
65
65
|
def provider(self) -> LoggerProvider:
|
|
66
66
|
if self._provider is None:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
67
|
+
try:
|
|
68
|
+
# Add resource information
|
|
69
|
+
resource = Resource.create(
|
|
70
|
+
{"service.name": "CsvPath", "service.version": "1.0.0"}
|
|
71
|
+
)
|
|
72
|
+
self._provider = LoggerProvider(resource=resource)
|
|
73
|
+
set_logger_provider(self._provider)
|
|
74
|
+
#
|
|
75
|
+
# these were working values for a local openobserve.
|
|
76
|
+
#
|
|
77
|
+
# OTEL_EXPORTER_OTLP_ENDPOINT=http://0.0.0.0:5080/api/default/v1/logs
|
|
78
|
+
# OTEL_EXPORTER_OTLP_HEADERS=Authorization=Basic ZGsxMDdka0Bob3RtYWlsLmNvbTpoYW5nemhvdQ==,stream-name=flightpath
|
|
79
|
+
#
|
|
80
|
+
# certificate_file=None,
|
|
81
|
+
# client_key_file=None,
|
|
82
|
+
# client_certificate_file=None,
|
|
83
|
+
# timeout=None,
|
|
84
|
+
# compression=None,
|
|
85
|
+
# session=None
|
|
86
|
+
#
|
|
87
|
+
# in CsvPath and FlightPath Data these can come from regular env vars
|
|
88
|
+
# but in FlightPath Server they must come from var_sub_source=config/env.json
|
|
89
|
+
# because we plan to allow projects to push data to their own choice of OTLP
|
|
90
|
+
# platform. FlightPath Data will have to provide an API for setting env.json
|
|
91
|
+
# and assistence in copying its own env vars and the OS env vars to env.json
|
|
92
|
+
# on the server.
|
|
93
|
+
#
|
|
94
|
+
endpoint = self._get(name="OTEL_EXPORTER_OTLP_LOGS_ENDPOINT")
|
|
95
|
+
if endpoint is None or endpoint == "OTEL_EXPORTER_OTLP_LOGS_ENDPOINT":
|
|
96
|
+
endpoint = self._get(name="OTEL_EXPORTER_OTLP_ENDPOINT")
|
|
97
|
+
if endpoint is None or endpoint == "OTEL_EXPORTER_OTLP_ENDPOINT":
|
|
98
|
+
raise ValueError(
|
|
99
|
+
"You must pass either OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_LOGS_ENDPOINT, the latter preferred"
|
|
100
|
+
)
|
|
101
|
+
headers = self._get(name="OTEL_EXPORTER_OTLP_HEADERS")
|
|
102
|
+
if headers is None or headers == "OTEL_EXPORTER_OTLP_HEADERS":
|
|
103
|
+
raise ValueError("OTEL_EXPORTER_OTLP_HEADERS cannot be None")
|
|
104
|
+
headers = headers.split(",")
|
|
105
|
+
d = {}
|
|
106
|
+
for _ in headers:
|
|
107
|
+
k = _[0 : _.find("=")]
|
|
108
|
+
v = _[_.find("=") + 1 :]
|
|
109
|
+
d[k] = v
|
|
110
|
+
exporter = OTLPLogExporter(endpoint=endpoint, headers=d)
|
|
111
|
+
self._provider.add_log_record_processor(
|
|
112
|
+
BatchLogRecordProcessor(exporter)
|
|
113
|
+
)
|
|
114
|
+
except Exception as ex:
|
|
115
|
+
if self._csvpaths:
|
|
116
|
+
self._csvpaths.logger.error("Cannot configure OTLP")
|
|
117
|
+
self._csvpaths.logger.error(ex)
|
|
100
118
|
return self._provider
|
|
101
119
|
|
|
102
120
|
def logger(self, project: str = "csvpath") -> Logger:
|
|
@@ -114,4 +132,5 @@ class Metrics:
|
|
|
114
132
|
# Prevent propagation to avoid duplicate logs
|
|
115
133
|
logger.propagate = False
|
|
116
134
|
Metrics.LOGGERS[project] = logger
|
|
135
|
+
# logging.basicConfig(level=logging.DEBUG)
|
|
117
136
|
return logger
|
{csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/otlp/otlp_paths_listener.py
RENAMED
|
@@ -21,6 +21,13 @@ class OpenTelemetryPathsListener(OtlpListener):
|
|
|
21
21
|
)
|
|
22
22
|
self.assure_metrics()
|
|
23
23
|
try:
|
|
24
|
+
ids = []
|
|
25
|
+
#
|
|
26
|
+
# otlp doesn't like Nones. should there not be any?
|
|
27
|
+
#
|
|
28
|
+
for _ in mdata.named_paths_identities:
|
|
29
|
+
if _:
|
|
30
|
+
ids.append(_)
|
|
24
31
|
etype = "named-paths group load"
|
|
25
32
|
extra = {
|
|
26
33
|
"event_type": etype,
|
|
@@ -29,7 +36,7 @@ class OpenTelemetryPathsListener(OtlpListener):
|
|
|
29
36
|
"named_paths_home": mdata.named_paths_home,
|
|
30
37
|
"group_file_path": mdata.group_file_path,
|
|
31
38
|
"named_paths_count": mdata.named_paths_count,
|
|
32
|
-
"named_paths_identities":
|
|
39
|
+
"named_paths_identities": ids,
|
|
33
40
|
"source_path": mdata.source_path,
|
|
34
41
|
"template": mdata.template if mdata.template else "",
|
|
35
42
|
**self.core_meta(mdata),
|
{csvpath-0.0.559 → csvpath-0.0.561}/csvpath/managers/integrations/otlp/otlp_results_listener.py
RENAMED
|
@@ -49,6 +49,7 @@ class OpenTelemetryResultsListener(OtlpListener):
|
|
|
49
49
|
self.csvpaths.__class__.METRICS.logger().debug(
|
|
50
50
|
"Csvpath completed", extra=extra
|
|
51
51
|
)
|
|
52
|
+
self.csvpaths.logger.info("Csvpath shipped log entry to OTLP integration")
|
|
52
53
|
except Exception as ex:
|
|
53
54
|
print(traceback.format_exc())
|
|
54
55
|
self.csvpaths.logger.error(ex)
|
|
@@ -51,13 +51,18 @@ class Registrar(ABC):
|
|
|
51
51
|
# notable exception of errors, errors are not thrown in non-CsvPaths code.
|
|
52
52
|
#
|
|
53
53
|
if self.csvpaths is not None:
|
|
54
|
+
self.csvpaths.logger.info("Distributing updates to listeners")
|
|
54
55
|
try:
|
|
55
56
|
self.load_additional_listeners(self.type_name, listeners)
|
|
56
57
|
except Exception as ex:
|
|
57
58
|
print(traceback.format_exc())
|
|
58
59
|
if self.csvpaths:
|
|
59
|
-
self.csvpaths.logger(f"Error in loading listeners: {ex}")
|
|
60
|
+
self.csvpaths.logger.error(f"Error in loading listeners: {ex}")
|
|
60
61
|
for lst in listeners:
|
|
62
|
+
if self.csvpaths:
|
|
63
|
+
self.csvpaths.logger.debug(
|
|
64
|
+
"Updating listener %s with metadata %s", lst, mdata
|
|
65
|
+
)
|
|
61
66
|
try:
|
|
62
67
|
lst.metadata_update(mdata)
|
|
63
68
|
except Exception as ex:
|
|
@@ -75,27 +80,27 @@ class Registrar(ABC):
|
|
|
75
80
|
"""
|
|
76
81
|
if self.csvpaths:
|
|
77
82
|
ss = self.csvpaths.config.additional_listeners(listener_type_name)
|
|
83
|
+
self.csvpaths.logger.info("Loading additional listener type(s) %s", ss)
|
|
78
84
|
if ss and not isinstance(ss, list):
|
|
79
85
|
ss = [ss]
|
|
80
86
|
if ss and len(ss) > 0:
|
|
81
87
|
for lst in ss:
|
|
82
|
-
|
|
83
|
-
self.load_additional_listener(lst, listeners)
|
|
84
|
-
except Exception as ex:
|
|
85
|
-
print(traceback.format_exc())
|
|
86
|
-
self.csvpaths.logger.error(
|
|
87
|
-
f"Failed to load listener {lst}: {ex}"
|
|
88
|
-
)
|
|
88
|
+
self.load_additional_listener(lst, listeners)
|
|
89
89
|
|
|
90
90
|
def load_additional_listener(self, load_cmd: str, listeners: list) -> None:
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
91
|
+
self.csvpaths.logger.info("Loading additional listener %s", load_cmd)
|
|
92
|
+
try:
|
|
93
|
+
loader = ClassLoader()
|
|
94
|
+
alistener = loader.load(load_cmd)
|
|
95
|
+
if alistener is not None:
|
|
96
|
+
if hasattr(alistener, "csvpaths"):
|
|
97
|
+
setattr(alistener, "csvpaths", self.csvpaths)
|
|
98
|
+
if hasattr(alistener, "result"):
|
|
99
|
+
setattr(alistener, "result", self.result)
|
|
100
|
+
if hasattr(self, "csvpath") and hasattr(alistener, "csvpath"):
|
|
101
|
+
alistener.csvpath = self.csvpath
|
|
102
|
+
alistener.config = self.csvpaths.config
|
|
103
|
+
listeners.append(alistener)
|
|
104
|
+
except Exception as e:
|
|
105
|
+
print(traceback.format_exc())
|
|
106
|
+
self.csvpaths.logger.error(e)
|
|
@@ -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
|
|
|
@@ -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)
|
|
@@ -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
|
|
@@ -248,7 +248,8 @@ class Line(MatchDecider):
|
|
|
248
248
|
#
|
|
249
249
|
if t and t.name != self.matcher.csvpath.headers[i] and t.name != f"{i}":
|
|
250
250
|
ii = i + 1
|
|
251
|
-
|
|
251
|
+
|
|
252
|
+
msg = f"The {ExpressionUtility._numeric_string(ii)} item, {t}, does not match the current header '{self.matcher.csvpath.headers[i]}'"
|
|
252
253
|
errors.append(msg)
|
|
253
254
|
return True
|
|
254
255
|
|
|
@@ -264,6 +265,6 @@ class Line(MatchDecider):
|
|
|
264
265
|
#
|
|
265
266
|
if t and t.name != self.matcher.csvpath.headers[i] and t.name != f"{i}":
|
|
266
267
|
ii = i + 1
|
|
267
|
-
msg = f"The {ExpressionUtility._numeric_string(ii)} item, {t}, does not match the current header"
|
|
268
|
+
msg = f"The {ExpressionUtility._numeric_string(ii)} item, {t}, does not match the current header '{self.matcher.csvpath.headers[i]}'"
|
|
268
269
|
errors.append(msg)
|
|
269
270
|
return True
|
|
@@ -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)
|