csvpath 0.0.549__tar.gz → 0.0.550__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.549 → csvpath-0.0.550}/PKG-INFO +1 -1
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/config/jenkins-local-sftp.ini +2 -2
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/csvpath.py +5 -2
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/errors/error_comms.py +8 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/results/result_registrar.py +11 -1
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/results/results_manager.py +5 -2
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/results/results_registrar.py +1 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/function_factory.py +2 -1
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/lines/last.py +9 -6
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/math/above.py +4 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/util/expression_utility.py +81 -17
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/files_reference_finder_2.py +11 -13
- {csvpath-0.0.549 → csvpath-0.0.550}/pyproject.toml +1 -1
- {csvpath-0.0.549 → csvpath-0.0.550}/LICENSE +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/README.md +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/config/config.ini +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/config/function.imports +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/config/jenkins-local-azure.ini +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/config/jenkins-local-gcs.ini +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/config/jenkins-local-s3.ini +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/config/jenkins-windows-azure.ini +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/config/jenkins-windows-gcs.ini +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/config/jenkins-windows-local.ini +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/config/jenkins-windows-s3.ini +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/config/jenkins-windows-sftp.ini +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/config/local-localhost-sftp.ini +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/mac/azure.sh +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/mac/gcs-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/mac/gcs.sh +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/mac/local.sh +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/mac/s3.sh +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/mac/sftp.sh +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/windows/azure.bat +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/windows/gcs.bat +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/windows/local.bat +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/windows/s3.bat +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/windows/sftp.bat +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/integrations/sqlite/csvpath +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/assets/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/config/config.ini +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/__init__.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/cli/__init__.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/cli/asker.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/cli/cli.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/cli/const.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/cli/debug_config.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/cli/drill_down.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/cli/function_describer.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/cli/function_lister.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/cli/selecter.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/csvpaths.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/__init__.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/errors/error.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/errors/error_collector.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/errors/error_manager.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/files/file_manager.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/files/file_metadata.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/files/file_registrar.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/files/files_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ckan/ckan.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ckan/datafile.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ckan/dataset.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ol/event.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ol/event_result.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ol/job.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ol/run.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ol/run_state.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/ol/sender.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/otlp/metrics.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sftpplus/rpc.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/slack/event.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/slack/sender.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sql/engine.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sql/tables.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sql/updates.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/webhook/webhook_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/webhook/webhook_results_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/metadata.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/paths/paths_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/paths/paths_manager.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/paths/paths_metadata.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/paths/paths_registrar.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/registrar.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/results/readers/readers.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/results/result.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/results/result_file_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/results/result_metadata.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/results/result_serializer.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/results/results_metadata.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/run/run_listener_stdout.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/run/run_metadata.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/run/run_registrar.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/test_listener.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/__init__.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/__init__.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/args.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/args_helper.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/boolean/all.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/boolean/andf.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/boolean/any.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/boolean/between.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/boolean/empty.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/boolean/exists.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/boolean/inf.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/boolean/no.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/boolean/notf.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/boolean/orf.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/boolean/yes.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/counting/count.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/counting/count_bytes.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/counting/count_headers.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/counting/count_lines.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/counting/count_scans.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/counting/counter.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/counting/every.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/counting/has_matches.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/counting/increment.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/counting/tally.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/counting/total_lines.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/dates/now.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/function.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/function_finder.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/function_focus.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/headers/append.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/headers/collect.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/headers/empty_stack.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/headers/end.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/headers/header_name.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/headers/headers.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/headers/insert.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/headers/mismatch.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/headers/replace.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/headers/reset_headers.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/lines/advance.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/lines/after_blank.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/lines/dups.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/lines/first.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/lines/first_line.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/lines/stop.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/math/add.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/math/divide.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/math/equals.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/math/intf.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/math/mod.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/math/multiply.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/math/odd.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/math/round.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/math/subtotal.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/math/subtract.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/math/sum.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/misc/fingerprint.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/misc/importf.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/misc/random.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/print/jinjaf.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/print/print_line.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/print/print_queue.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/print/printf.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/print/table.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/stats/minf.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/stats/nminmax.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/stats/percent.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/stats/percent_unique.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/stats/stdev.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/strings/alter.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/strings/caps.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/strings/concat.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/strings/contains.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/strings/length.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/strings/lower.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/strings/metaphone.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/strings/regex.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/strings/starts_with.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/strings/strip.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/strings/substring.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/strings/upper.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/testing/debug.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/types/__init__.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/types/boolean.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/types/datef.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/types/decimal.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/types/email.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/types/nonef.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/types/string.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/types/type.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/types/url.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/validity/fail.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/validity/failed.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/validity/line.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/variables/get.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/variables/pushpop.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/variables/put.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/variables/track.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/functions/variables/variables.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/lark_parser.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/lark_transformer.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/matcher.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/productions/__init__.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/productions/equality.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/productions/expression.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/productions/header.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/productions/matchable.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/productions/qualified.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/productions/reference.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/productions/term.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/productions/variable.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/util/exceptions.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/util/expression_encoder.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/util/lark_print_parser.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/util/print_parser.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/matching/util/runtime_data_collector.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/modes/error_mode.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/modes/explain_mode.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/modes/files_mode.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/modes/logic_mode.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/modes/mode_controller.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/modes/print_mode.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/modes/return_mode.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/modes/run_mode.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/modes/source_mode.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/modes/transfer_mode.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/modes/unmatched_mode.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/modes/validation_mode.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/scanning/__init__.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/scanning/exceptions.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/scanning/parser.out +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/scanning/parsetab.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/scanning/scanner.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/scanning/scanning_lexer.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/azure/azure_data_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/azure/azure_data_writer.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/azure/azure_fingerprinter.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/azure/azure_nos.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/azure/azure_utils.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/box.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/cache.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/caser.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/class_loader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/code.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/config.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/config_exception.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/date_util.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/exceptions.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/file_info.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/file_readers.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/file_writers.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/gcs/gcs_data_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/gcs/gcs_data_writer.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/gcs/gcs_nos.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/gcs/gcs_utils.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/hasher.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/http/http_data_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/intermediary.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/last_line_stats.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/line_counter.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/line_monitor.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/line_spooler.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/log_utility.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/metadata_parser.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/nos.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/pandas_data_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/path_util.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/printer.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/files_tools/range_finder.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/ref_utils.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/reference_exceptions.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/reference_grammar.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/reference_parser.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/reference_results.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/reference_transformer.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/results_reference_finder_2.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/results_tools/data_finder.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/results_tools/date_filter.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/results_tools/identity_finder.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/results_tools/path_filter.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/results_tools/token_filters.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/references/tools/date_completer.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/run_home_maker.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/s3/s3_data_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/s3/s3_data_writer.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/s3/s3_fingerprinter.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/s3/s3_nos.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/s3/s3_utils.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/sftp/sftp_config.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/sftp/sftp_data_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/sftp/sftp_data_writer.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/sftp/sftp_nos.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/sftp/sftp_walk.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/sqliter.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/template_util.py +0 -0
- {csvpath-0.0.549 → csvpath-0.0.550}/csvpath/util/var_utility.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: csvpath
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.550
|
|
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
|
|
@@ -6,7 +6,7 @@ extensions = csv, tsv, dat, tab, psv, ssv
|
|
|
6
6
|
|
|
7
7
|
[errors]
|
|
8
8
|
csvpath = raise, collect, print
|
|
9
|
-
csvpaths = raise,
|
|
9
|
+
csvpaths = raise, print
|
|
10
10
|
use_format = full
|
|
11
11
|
pattern = {time}:{file}:{line}:{paths}:{instance}:{chain}: {message}
|
|
12
12
|
|
|
@@ -42,7 +42,7 @@ s3.skip = yes
|
|
|
42
42
|
sftp.skip = no
|
|
43
43
|
|
|
44
44
|
[listeners]
|
|
45
|
-
groups =
|
|
45
|
+
groups = default
|
|
46
46
|
sqlite.result = from csvpath.managers.integrations.sqlite.sqlite_result_listener import SqliteResultListener
|
|
47
47
|
sqlite.results = from csvpath.managers.integrations.sqlite.sqlite_results_listener import SqliteResultsListener
|
|
48
48
|
default.file = from csvpath.managers.files.files_listener import FilesListener
|
|
@@ -1222,10 +1222,13 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
|
|
|
1222
1222
|
"CsvPath.matches:703: %s: matches: %s", self.identity, matches
|
|
1223
1223
|
)
|
|
1224
1224
|
#
|
|
1225
|
-
# if we are done scanning we can stop
|
|
1225
|
+
# if we are done scanning we can stop. however, if the file is ending on its own
|
|
1226
|
+
# -- we are scanning right to the last line -- we don't call stop because we aren't
|
|
1227
|
+
# actively stopping the run, we're just letting it run out.
|
|
1226
1228
|
#
|
|
1227
1229
|
if self.scanner.is_last(self.line_monitor.physical_line_number):
|
|
1228
|
-
self.
|
|
1230
|
+
if not self.line_monitor.is_last_line():
|
|
1231
|
+
self.stop()
|
|
1229
1232
|
if matches is True:
|
|
1230
1233
|
#
|
|
1231
1234
|
# _current_match_count is a placeholder that
|
|
@@ -60,6 +60,13 @@ class ErrorCommunications:
|
|
|
60
60
|
return ret
|
|
61
61
|
|
|
62
62
|
def do_i_stop(self) -> bool:
|
|
63
|
+
#
|
|
64
|
+
# stop is having problems. copying raise, which works fine.
|
|
65
|
+
#
|
|
66
|
+
if self._csvpath and self._csvpath.stop_on_validation_errors is not None:
|
|
67
|
+
return self._csvpath.stop_on_validation_errors
|
|
68
|
+
return self.in_policy(OnError.STOP.value)
|
|
69
|
+
"""
|
|
63
70
|
mode = None
|
|
64
71
|
if self._csvpath and self._csvpath.stop_on_validation_errors is not None:
|
|
65
72
|
#
|
|
@@ -73,6 +80,7 @@ class ErrorCommunications:
|
|
|
73
80
|
# return self._csvpath.stop_on_validation_errors
|
|
74
81
|
policy = self.in_policy(OnError.STOP.value)
|
|
75
82
|
return mode is True or policy is True
|
|
83
|
+
"""
|
|
76
84
|
|
|
77
85
|
def do_i_fail(self) -> bool:
|
|
78
86
|
if self._csvpath and self._csvpath.fail_on_validation_errors is not None:
|
|
@@ -3,8 +3,10 @@ import json
|
|
|
3
3
|
from datetime import datetime
|
|
4
4
|
from csvpath.util.file_readers import DataFileReader
|
|
5
5
|
from csvpath.util.file_writers import DataFileWriter
|
|
6
|
+
from csvpath.util.references.reference_parser import ReferenceParser
|
|
6
7
|
from csvpath.util.nos import Nos
|
|
7
8
|
from csvpath.util.box import Box
|
|
9
|
+
|
|
8
10
|
from ..listener import Listener
|
|
9
11
|
from ..metadata import Metadata
|
|
10
12
|
from ..registrar import Registrar
|
|
@@ -66,7 +68,15 @@ class ResultRegistrar(Registrar, Listener):
|
|
|
66
68
|
mdata = ResultMetadata(config=self.csvpaths.config)
|
|
67
69
|
mdata.from_manifest(m)
|
|
68
70
|
mdata.archive_name = self.archive_name
|
|
69
|
-
|
|
71
|
+
#
|
|
72
|
+
# if the paths_name has a $ we need to be more general
|
|
73
|
+
#
|
|
74
|
+
if "$" in self.result.paths_name:
|
|
75
|
+
ref = ReferenceParser(self.result.paths_name)
|
|
76
|
+
mdata.named_results_name = ref.root_major
|
|
77
|
+
else:
|
|
78
|
+
mdata.named_results_name = self.result.paths_name
|
|
79
|
+
|
|
70
80
|
mdata.named_paths_name = self.result.paths_name
|
|
71
81
|
mdata.named_paths_uuid_string = self.csvpaths.run_metadata.named_paths_uuid
|
|
72
82
|
mdata.named_file_name = self.result.file_name
|
|
@@ -16,6 +16,7 @@ from csvpath.util.references.results_reference_finder_2 import (
|
|
|
16
16
|
from csvpath.util.file_readers import DataFileReader
|
|
17
17
|
from csvpath.util.file_writers import DataFileWriter
|
|
18
18
|
from csvpath.util.nos import Nos
|
|
19
|
+
|
|
19
20
|
from csvpath.scanning.scanner import Scanner
|
|
20
21
|
from ..run.run_metadata import RunMetadata
|
|
21
22
|
from ..run.run_registrar import RunRegistrar
|
|
@@ -71,7 +72,10 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
71
72
|
mdata.named_file_path = m["named_file_path"]
|
|
72
73
|
mdata.run_home = run_dir
|
|
73
74
|
mdata.named_paths_name = pathsname
|
|
74
|
-
|
|
75
|
+
if "$" in pathsname:
|
|
76
|
+
mdata.named_results_name = ReferenceParser(pathsname).root_major
|
|
77
|
+
else:
|
|
78
|
+
mdata.named_results_name = pathsname
|
|
75
79
|
mdata.number_of_files_expected = -1
|
|
76
80
|
mdata.number_of_files_generated = -1
|
|
77
81
|
|
|
@@ -534,7 +538,6 @@ class ResultsManager: # pylint: disable=C0115
|
|
|
534
538
|
# seems to be important for a handful of unit tests.
|
|
535
539
|
#
|
|
536
540
|
rs = self.named_results[name]
|
|
537
|
-
# print(f"resultsmgr: returning named results from cache: {rs}")
|
|
538
541
|
return rs
|
|
539
542
|
""" """
|
|
540
543
|
#
|
|
@@ -107,6 +107,7 @@ class ResultsRegistrar(Registrar, Listener):
|
|
|
107
107
|
m["status"] = mdata.status
|
|
108
108
|
m["run_home"] = mdata.run_home
|
|
109
109
|
m["named_results_name"] = mdata.named_results_name
|
|
110
|
+
|
|
110
111
|
#
|
|
111
112
|
m["named_paths_name"] = mdata.named_paths_name
|
|
112
113
|
m["named_paths_uuid"] = mdata.named_paths_uuid
|
|
@@ -230,13 +230,14 @@ class FunctionFactory:
|
|
|
230
230
|
fs["alter"] = Alter
|
|
231
231
|
fs["percent"] = Percent
|
|
232
232
|
#
|
|
233
|
-
#
|
|
233
|
+
# less than
|
|
234
234
|
#
|
|
235
235
|
fs["below"] = AboveBelow
|
|
236
236
|
fs["lt"] = AboveBelow
|
|
237
237
|
fs["before"] = AboveBelow
|
|
238
238
|
fs["lte"] = AboveBelow
|
|
239
239
|
fs["le"] = AboveBelow
|
|
240
|
+
# greater than
|
|
240
241
|
fs["above"] = AboveBelow
|
|
241
242
|
fs["gt"] = AboveBelow
|
|
242
243
|
fs["after"] = AboveBelow
|
|
@@ -17,13 +17,16 @@ class Last(MatchDecider):
|
|
|
17
17
|
"""\
|
|
18
18
|
Evaluates True on the last line to be scanned.
|
|
19
19
|
|
|
20
|
-
last() will always run, even if its line turns out to be
|
|
21
|
-
blank and would otherwise be skipped.
|
|
20
|
+
last() used by itself will always run, even if its line turns out to be
|
|
21
|
+
blank and would otherwise be skipped. When last() is composed within other
|
|
22
|
+
functions it loses that ability to run no matter what. For e.g.
|
|
23
|
+
last() -> print("will always run")
|
|
24
|
+
vs.
|
|
25
|
+
and(yes(), last()) -> print("runs if the last scanned line is not blank")
|
|
22
26
|
|
|
23
|
-
Optionally, last() can take a function that will be
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
only on the last line.
|
|
27
|
+
Optionally, last() can take a function that will be evaluated when last()
|
|
28
|
+
evaluates to True. This function, if provided, will not necessarily be the
|
|
29
|
+
last evaluation of the run, but will happen only on the last line.
|
|
27
30
|
"""
|
|
28
31
|
),
|
|
29
32
|
]
|
|
@@ -99,6 +99,8 @@ class AboveBelow(MatchDecider):
|
|
|
99
99
|
|
|
100
100
|
def _try_dates(self, a, b) -> bool:
|
|
101
101
|
if ExpressionUtility.all([a, b], [datetime]):
|
|
102
|
+
a = ExpressionUtility.to_datetime(a)
|
|
103
|
+
b = ExpressionUtility.to_datetime(b)
|
|
102
104
|
if self._above() and self.name != "gte":
|
|
103
105
|
return a.timestamp() > b.timestamp()
|
|
104
106
|
elif self._above():
|
|
@@ -107,6 +109,8 @@ class AboveBelow(MatchDecider):
|
|
|
107
109
|
a.timestamp() < b.timestamp()
|
|
108
110
|
return a.timestamp() <= b.timestamp()
|
|
109
111
|
if ExpressionUtility.all([a, b], [date]):
|
|
112
|
+
a = ExpressionUtility.to_date(a)
|
|
113
|
+
b = ExpressionUtility.to_date(b)
|
|
110
114
|
if self._above() and self.name != "gte":
|
|
111
115
|
return a > b
|
|
112
116
|
elif self._above():
|
|
@@ -30,33 +30,97 @@ class ExpressionUtility:
|
|
|
30
30
|
else:
|
|
31
31
|
return f"{i}th"
|
|
32
32
|
|
|
33
|
+
#
|
|
34
|
+
# this uses to_bool so it will translate "true" to True.
|
|
35
|
+
#
|
|
33
36
|
@classmethod
|
|
34
37
|
def all(cls, objects: List, classlist: tuple = None) -> bool:
|
|
35
|
-
|
|
38
|
+
#
|
|
39
|
+
# we don't match None isa None
|
|
40
|
+
#
|
|
41
|
+
if objects is None and classlist is None:
|
|
36
42
|
return False
|
|
37
|
-
if
|
|
43
|
+
if objects is None:
|
|
44
|
+
objects = [None]
|
|
45
|
+
if not isinstance(objects, list):
|
|
46
|
+
objects = [objects]
|
|
47
|
+
#
|
|
48
|
+
# if we don't pass a list of types or [], just None, we're
|
|
49
|
+
# True if all items in objects are non-None.
|
|
50
|
+
#
|
|
51
|
+
if classlist is None:
|
|
52
|
+
for o in objects:
|
|
53
|
+
if o is None:
|
|
54
|
+
return False
|
|
38
55
|
return True
|
|
39
|
-
|
|
56
|
+
for o in objects:
|
|
57
|
+
if not cls.isa(o, classlist):
|
|
58
|
+
return False
|
|
59
|
+
return True
|
|
60
|
+
|
|
61
|
+
@classmethod
|
|
62
|
+
def safe_isinstance(cls, obj, classes: type[type]) -> bool:
|
|
63
|
+
try:
|
|
64
|
+
if isinstance(obj, classes):
|
|
65
|
+
return True
|
|
66
|
+
except Exception:
|
|
67
|
+
...
|
|
68
|
+
return False
|
|
69
|
+
|
|
70
|
+
#
|
|
71
|
+
# this uses to_bool so it will translate "true" to True.
|
|
72
|
+
#
|
|
73
|
+
@classmethod
|
|
74
|
+
def isa(cls, obj: List, classes: tuple = None) -> bool:
|
|
75
|
+
if obj is None and classes is None:
|
|
40
76
|
return True
|
|
77
|
+
if classes is None:
|
|
78
|
+
classes = []
|
|
41
79
|
#
|
|
42
|
-
#
|
|
80
|
+
# make sure we have a tuple of types
|
|
43
81
|
#
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
82
|
+
lst = []
|
|
83
|
+
for t in classes:
|
|
84
|
+
if t is None:
|
|
85
|
+
if obj is None:
|
|
86
|
+
return True
|
|
87
|
+
elif cls.safe_isinstance(t, type):
|
|
88
|
+
lst.append(t)
|
|
89
|
+
else:
|
|
90
|
+
lst.append(type(t))
|
|
91
|
+
classes = lst
|
|
92
|
+
#
|
|
93
|
+
# isinstance
|
|
94
|
+
#
|
|
95
|
+
if cls.safe_isinstance(obj, classes):
|
|
96
|
+
return True
|
|
50
97
|
#
|
|
51
|
-
#
|
|
98
|
+
# cross-class cast
|
|
52
99
|
#
|
|
53
|
-
|
|
54
|
-
if i == 0:
|
|
55
|
-
continue
|
|
56
|
-
if isinstance(o, type(objects[i - 1])):
|
|
57
|
-
continue
|
|
100
|
+
if f"{obj}".strip() == "":
|
|
58
101
|
return False
|
|
59
|
-
|
|
102
|
+
for t in classes:
|
|
103
|
+
if t == int:
|
|
104
|
+
o = cls.to_int(obj)
|
|
105
|
+
if cls.safe_isinstance(o, int):
|
|
106
|
+
return True
|
|
107
|
+
if t == float:
|
|
108
|
+
o = cls.to_float(obj)
|
|
109
|
+
if cls.safe_isinstance(o, float):
|
|
110
|
+
return True
|
|
111
|
+
if t == datetime:
|
|
112
|
+
o = cls.to_datetime(obj)
|
|
113
|
+
if cls.safe_isinstance(o, datetime):
|
|
114
|
+
return True
|
|
115
|
+
elif t == datetime.date:
|
|
116
|
+
o = cls.to_date(obj)
|
|
117
|
+
if cls.safe_isinstance(o, datetime.date):
|
|
118
|
+
return True
|
|
119
|
+
elif t == bool:
|
|
120
|
+
o = cls.to_bool(obj)
|
|
121
|
+
if cls.safe_isinstance(o, bool):
|
|
122
|
+
return True
|
|
123
|
+
return False
|
|
60
124
|
|
|
61
125
|
@classmethod
|
|
62
126
|
def is_number(cls, v: Any) -> bool:
|
|
@@ -52,7 +52,6 @@ class FilesReferenceFinder2:
|
|
|
52
52
|
return lst
|
|
53
53
|
|
|
54
54
|
def query(self) -> ReferenceResults:
|
|
55
|
-
# print(f"starting to find files: {self.csvpaths.config.get(section='inputs', name='files')}")
|
|
56
55
|
results = ReferenceResults(ref=self.ref, csvpaths=self.csvpaths)
|
|
57
56
|
#
|
|
58
57
|
# if we find fingerprint we are done
|
|
@@ -72,12 +71,17 @@ class FilesReferenceFinder2:
|
|
|
72
71
|
# otherwise, path or date may exist and if either does, it
|
|
73
72
|
# disallows the other.
|
|
74
73
|
#
|
|
74
|
+
# print(f"75: starting name one")
|
|
75
75
|
if not self._range_if_name_one(results=results, tokens=tokens):
|
|
76
76
|
# print(f"65: results: {len(results)}")
|
|
77
77
|
if not self._date_if_name_one(results=results, tokens=tokens):
|
|
78
|
-
|
|
78
|
+
print(f"66: results: {len(results)}")
|
|
79
79
|
self._path_if_name_one(results=results, tokens=tokens)
|
|
80
80
|
# print(f"69: results: {len(results)}")
|
|
81
|
+
#
|
|
82
|
+
# we need a date token filter here!
|
|
83
|
+
#
|
|
84
|
+
|
|
81
85
|
#
|
|
82
86
|
# ordinals simply pickout an item in results.files, if possible
|
|
83
87
|
#
|
|
@@ -119,7 +123,6 @@ class FilesReferenceFinder2:
|
|
|
119
123
|
rrange = self._get_range_from_tokens(results, tokens)
|
|
120
124
|
if rrange is None:
|
|
121
125
|
return False
|
|
122
|
-
print(f"_range_if_name_one: results: {results}, tokens: {tokens}")
|
|
123
126
|
#
|
|
124
127
|
# a 3-parts range where the range tells the date which way to look:
|
|
125
128
|
# path >> date >> range
|
|
@@ -224,17 +227,10 @@ class FilesReferenceFinder2:
|
|
|
224
227
|
# gets the range of files that are after a point.
|
|
225
228
|
# the point is a date or the first match of a path prefix.
|
|
226
229
|
#
|
|
227
|
-
print(
|
|
228
|
-
f"_do_range_of_name_one: results: {results}, rrange: {rrange}, results.ref.name_one: {results.ref.name_one}"
|
|
229
|
-
)
|
|
230
|
-
for _ in mani:
|
|
231
|
-
print(f" ...{_['file']}")
|
|
232
|
-
|
|
233
230
|
date = DateCompleter.to_date(results.ref.name_one)
|
|
234
231
|
px = -1
|
|
235
232
|
if date is None:
|
|
236
233
|
prefix, px = self._prefix(results) # os.path.join(inputs, named_file)
|
|
237
|
-
print(f"_do_range_of_name_one: prefix: {prefix}, px: {px}")
|
|
238
234
|
before = rrange in ["before", "to"]
|
|
239
235
|
after = rrange in ["after", "from"]
|
|
240
236
|
nameone = results.ref.name_one
|
|
@@ -247,8 +243,6 @@ class FilesReferenceFinder2:
|
|
|
247
243
|
for i, _ in enumerate(mani):
|
|
248
244
|
if date is None:
|
|
249
245
|
path = _["file"]
|
|
250
|
-
print(f"_do_range_of_name_one: path: {path}, nameone: {nameone}")
|
|
251
|
-
# minus = self._path_minus_prolog(named_file_name=self.ref.root_major, path=path)
|
|
252
246
|
sw = self._starts_with(path, nameone)
|
|
253
247
|
if rrange == "all":
|
|
254
248
|
if sw:
|
|
@@ -383,6 +377,11 @@ class FilesReferenceFinder2:
|
|
|
383
377
|
first, last = None, None
|
|
384
378
|
if len(tokens) > 0 and DateCompleter.is_date_or_date_prefix(tokens[0]):
|
|
385
379
|
first, last = DateCompleter.get_bracket_dates(tokens[0])
|
|
380
|
+
#
|
|
381
|
+
# need to remove token[0] here, right? we consume tokens. if there is an ordinal and it doesn't
|
|
382
|
+
# move up into [0] we ignore it.
|
|
383
|
+
#
|
|
384
|
+
del tokens[0]
|
|
386
385
|
#
|
|
387
386
|
#
|
|
388
387
|
#
|
|
@@ -405,7 +404,6 @@ class FilesReferenceFinder2:
|
|
|
405
404
|
|
|
406
405
|
def _starts_with(self, path, prefix) -> bool:
|
|
407
406
|
path = self._path_minus_prolog(path=path)
|
|
408
|
-
print(f"_starts_with: path: {path}, prefix: {prefix}")
|
|
409
407
|
if path.startswith(prefix):
|
|
410
408
|
return True
|
|
411
409
|
i = path.rfind(".")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "csvpath"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.550"
|
|
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
|
{csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/otlp/otlp_error_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
{csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/otlp/otlp_result_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/otlp/otlp_results_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sftpplus/arrival_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
{csvpath-0.0.549 → csvpath-0.0.550}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py
RENAMED
|
File without changes
|