csvpath 0.0.581__tar.gz → 0.0.584__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.581 → csvpath-0.0.584}/PKG-INFO +1 -1
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/config/jenkins-local-sftp.ini +3 -3
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/csvpath.py +7 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/json/jsonpath.py +11 -3
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/config.py +1 -1
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/file_readers.py +17 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/json/json_data_reader.py +4 -1
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/json/json_reader_helper.py +10 -1
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/line_counter.py +10 -1
- {csvpath-0.0.581 → csvpath-0.0.584}/pyproject.toml +1 -1
- {csvpath-0.0.581 → csvpath-0.0.584}/LICENSE +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/README.md +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/config/config.ini +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/config/extra-functions.imports +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/config/function.imports +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/config/jenkins-local-azure.ini +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/config/jenkins-local-gcs.ini +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/config/jenkins-local-s3.ini +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/config/jenkins-windows-azure.ini +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/config/jenkins-windows-gcs.ini +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/config/jenkins-windows-local.ini +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/config/jenkins-windows-s3.ini +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/config/jenkins-windows-sftp.ini +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/mac/azure.sh +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/mac/gcs-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/mac/gcs.sh +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/mac/local.sh +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/mac/s3.sh +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/mac/sftp.sh +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/windows/azure.bat +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/windows/gcs.bat +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/windows/local.bat +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/windows/s3.bat +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/windows/sftp.bat +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/integrations/sqlite/csvpath +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/assets/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/config/config.ini +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/config/env.json +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/__init__.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/cli/__init__.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/cli/asker.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/cli/cli.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/cli/const.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/cli/debug_config.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/cli/drill_down.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/cli/function_describer.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/cli/function_lister.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/cli/selecter.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/csvpaths.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/__init__.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/errors/error.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/errors/error_collector.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/errors/error_comms.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/errors/error_manager.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/files/file_manager.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/files/file_metadata.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/files/file_registrar.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/files/files_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ckan/ckan.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ckan/datafile.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ckan/dataset.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ol/event.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ol/event_result.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ol/job.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ol/run.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ol/run_state.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/ol/sender.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/otlp/metrics.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sftpplus/rpc.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/slack/event.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/slack/sender.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sql/engine.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sql/tables.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sql/updates.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/webhook/webhook_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/webhook/webhook_results_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/metadata.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/paths/paths_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/paths/paths_manager.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/paths/paths_metadata.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/paths/paths_registrar.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/registrar.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/readers/readers.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/result.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/result_file_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/result_metadata.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/result_registrar.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/result_serializer.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/results_manager.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/results_metadata.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/results_registrar.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/run/run_listener_stdout.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/run/run_metadata.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/run/run_registrar.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/test_listener.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/__init__.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/__init__.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/args.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/args_helper.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/boolean/all.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/boolean/andf.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/boolean/any.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/boolean/between.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/boolean/empty.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/boolean/exists.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/boolean/inf.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/boolean/no.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/boolean/notf.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/boolean/orf.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/boolean/yes.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/counting/count.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/counting/count_bytes.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/counting/count_headers.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/counting/count_lines.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/counting/count_scans.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/counting/counter.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/counting/every.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/counting/has_matches.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/counting/increment.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/counting/tally.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/counting/total_lines.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/dates/now.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/dates/part.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/dates/roll.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/function.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/function_factory.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/function_finder.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/function_focus.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/append.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/collect.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/empty_stack.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/end.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/header_name.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/headers.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/headers_stack.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/insert.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/line_before.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/mismatch.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/remove.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/rename.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/replace.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/headers/reset_headers.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/lines/advance.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/lines/after_blank.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/lines/dups.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/lines/first.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/lines/first_line.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/lines/last.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/lines/stop.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/math/above.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/math/add.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/math/divide.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/math/equals.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/math/intf.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/math/mod.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/math/multiply.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/math/odd.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/math/round.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/math/subtotal.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/math/subtract.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/math/sum.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/misc/fingerprint.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/misc/importf.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/misc/random.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/print/jinjaf.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/print/print_line.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/print/print_queue.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/print/printf.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/print/table.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/stats/minf.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/stats/nminmax.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/stats/percent.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/stats/percent_unique.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/stats/stdev.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/strings/alter.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/strings/caps.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/strings/concat.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/strings/contains.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/strings/format.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/strings/length.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/strings/lower.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/strings/metaphone.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/strings/regex.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/strings/starts_with.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/strings/strip.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/strings/substring.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/strings/upper.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/testing/debug.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/types/__init__.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/types/blank.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/types/boolean.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/types/datatype.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/types/datef.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/types/decimal.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/types/email.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/types/nonef.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/types/string.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/types/type.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/types/url.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/types/wildcard.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/validity/fail.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/validity/failed.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/validity/line.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/variables/clear.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/variables/get.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/variables/index_of.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/variables/pushpop.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/variables/put.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/variables/track.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/variables/variables.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/functions/xml/xpath.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/lark_parser.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/lark_transformer.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/matcher.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/productions/__init__.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/productions/equality.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/productions/expression.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/productions/header.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/productions/matchable.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/productions/qualified.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/productions/reference.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/productions/term.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/productions/variable.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/util/exceptions.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/util/expression_encoder.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/util/expression_utility.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/util/lark_print_parser.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/util/print_parser.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/matching/util/runtime_data_collector.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/modes/error_mode.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/modes/explain_mode.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/modes/files_mode.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/modes/logic_mode.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/modes/mode_controller.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/modes/print_mode.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/modes/return_mode.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/modes/run_mode.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/modes/source_mode.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/modes/transfer_mode.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/modes/unmatched_mode.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/modes/validation_mode.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/scanning/__init__.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/scanning/scanner2.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/scanning/scanner2_parser.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/scanning/scanner2_transformer.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/azure/azure_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/azure/azure_data_writer.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/azure/azure_fingerprinter.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/azure/azure_json_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/azure/azure_nos.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/azure/azure_utils.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/backend_check.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/box.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/cache.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/caser.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/class_loader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/code.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/config_env.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/config_exception.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/date_util.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/exceptions.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/file_info.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/file_writers.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/gcs/gcs_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/gcs/gcs_data_writer.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/gcs/gcs_json_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/gcs/gcs_nos.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/gcs/gcs_utils.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/hasher.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/http/http_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/intermediary.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/last_line_stats.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/line_monitor.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/line_spooler.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/log_utility.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/metadata_parser.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/nos.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/pandas_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/path_util.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/printer.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/py_file_utility.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/files_reference_finder_2.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/files_tools/range_finder.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/ref_utils.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/reference_exceptions.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/reference_grammar.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/reference_parser.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/reference_results.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/reference_transformer.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/results_reference_finder_2.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/results_tools/data_finder.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/results_tools/date_filter.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/results_tools/identity_finder.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/results_tools/path_filter.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/results_tools/token_filters.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/references/tools/date_completer.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/run_home_maker.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/s3/s3_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/s3/s3_data_writer.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/s3/s3_fingerprinter.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/s3/s3_json_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/s3/s3_nos.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/s3/s3_utils.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/sftp/sftp_config.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/sftp/sftp_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/sftp/sftp_data_writer.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/sftp/sftp_json_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/sftp/sftp_nos.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/sftp/sftp_walk.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/sqliter.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/template_util.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/var_utility.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/xlsx/xlsx_data_reader.py +0 -0
- {csvpath-0.0.581 → csvpath-0.0.584}/csvpath/util/xlsx/xlsx_reader_helper.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.584
|
|
4
4
|
Summary: A data preboarding framework for ingesting, managing, and validating CSV, Excel, and other tabular data files using a Collect, Store, Validate, Publish architecture to create a trusted publisher for downstream data consumers.
|
|
5
5
|
Author: David Kershaw
|
|
6
6
|
Author-email: info@csvpath.org
|
|
@@ -25,7 +25,7 @@ path = cache
|
|
|
25
25
|
use_cache = no
|
|
26
26
|
|
|
27
27
|
[functions]
|
|
28
|
-
imports =
|
|
28
|
+
imports =
|
|
29
29
|
|
|
30
30
|
[results]
|
|
31
31
|
archive = tmp/sftp/archive
|
|
@@ -94,7 +94,7 @@ port = SFTPPLUS_PORT
|
|
|
94
94
|
admin_username = SFTPPLUS_ADMIN_USERNAME
|
|
95
95
|
admin_password = SFTPPLUS_ADMIN_PASSWORD
|
|
96
96
|
api_url = https://. . . :10020/json
|
|
97
|
-
scripts_dir =
|
|
97
|
+
scripts_dir =
|
|
98
98
|
execute_timeout = 300
|
|
99
99
|
|
|
100
100
|
[ckan]
|
|
@@ -109,5 +109,5 @@ timeout = 5
|
|
|
109
109
|
verify = False
|
|
110
110
|
|
|
111
111
|
[slack]
|
|
112
|
-
webhook_url =
|
|
112
|
+
webhook_url =
|
|
113
113
|
|
|
@@ -1234,6 +1234,13 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
|
|
|
1234
1234
|
)
|
|
1235
1235
|
for line in reader.next():
|
|
1236
1236
|
self.track_line(line=line)
|
|
1237
|
+
#
|
|
1238
|
+
# some formats embed headers in each line. JSONL headers are the dict keys in
|
|
1239
|
+
# each line that uses a dict
|
|
1240
|
+
#
|
|
1241
|
+
if reader.updates_headers:
|
|
1242
|
+
_ = reader.current_headers
|
|
1243
|
+
self.headers = self.headers if _ is None else _
|
|
1237
1244
|
yield line
|
|
1238
1245
|
self.finalize()
|
|
1239
1246
|
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import pyjson5
|
|
3
3
|
from typing import Any
|
|
4
|
-
|
|
4
|
+
#
|
|
5
|
+
# the ext supports a "full" JSONPath syntax; whereas, w/o .ext is too limiting
|
|
6
|
+
# both should support single quotes in paths, which we need because atm csvpaths
|
|
7
|
+
# require double quotes for terms. if that becomes a problem we either have to
|
|
8
|
+
# allow single quoted strings (probably easily doable) or unwrapped jsonpaths,
|
|
9
|
+
# same as we do with regexes; but this would probably be a pain.
|
|
10
|
+
#
|
|
11
|
+
from jsonpath_ng.ext import parse
|
|
12
|
+
#from jsonpath_ng import jsonpath, parse
|
|
5
13
|
from ..function_focus import ValueProducer
|
|
6
14
|
from csvpath.matching.productions import Term, Variable, Header, Reference
|
|
7
15
|
from ..function import Function
|
|
@@ -43,9 +51,9 @@ class JsonPath(ValueProducer):
|
|
|
43
51
|
v = self._value_two(skip=skip)
|
|
44
52
|
jpath = parse(v)
|
|
45
53
|
r = jpath.find(j)
|
|
46
|
-
if r and len(r) == 1:
|
|
54
|
+
if r is not None and len(r) == 1:
|
|
47
55
|
self.value = r[0].value
|
|
48
|
-
elif r:
|
|
56
|
+
elif r is not None:
|
|
49
57
|
self.value = [_.value for _ in r]
|
|
50
58
|
else:
|
|
51
59
|
raise DataException("No value for jsonpath")
|
|
@@ -23,6 +23,23 @@ class DataFileReader(ABC):
|
|
|
23
23
|
self._encoding = None
|
|
24
24
|
self.mode = mode
|
|
25
25
|
self.encoding = encoding
|
|
26
|
+
self._current_headers = None
|
|
27
|
+
self._updates_headers = False
|
|
28
|
+
|
|
29
|
+
#
|
|
30
|
+
# some formats -- esp. JSONL -- embed their headers line-by-line
|
|
31
|
+
#
|
|
32
|
+
@property
|
|
33
|
+
def updates_headers(self) -> bool:
|
|
34
|
+
return self._updates_headers
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def current_headers(self) -> list[str]:
|
|
38
|
+
return self._current_headers
|
|
39
|
+
|
|
40
|
+
@current_headers.setter
|
|
41
|
+
def current_headers(self, headers: list[str]) -> None:
|
|
42
|
+
self._current_headers = headers
|
|
26
43
|
|
|
27
44
|
@classmethod
|
|
28
45
|
def register_data(cls, *, path, filelike) -> None:
|
|
@@ -27,6 +27,7 @@ class JsonDataReader(DataFileReader):
|
|
|
27
27
|
self.path = path
|
|
28
28
|
self.mode = mode
|
|
29
29
|
self.encoding = encoding
|
|
30
|
+
self._updates_headers = True
|
|
30
31
|
|
|
31
32
|
def next(self) -> list[str]:
|
|
32
33
|
with jsonlines.open(self.path) as reader:
|
|
@@ -35,10 +36,12 @@ class JsonDataReader(DataFileReader):
|
|
|
35
36
|
line = JsonReaderHelper.line_from_obj(obj, i)
|
|
36
37
|
if isinstance(line, tuple):
|
|
37
38
|
headers = line[0]
|
|
39
|
+
self.current_headers = headers
|
|
38
40
|
line = line[1]
|
|
39
|
-
yield headers
|
|
41
|
+
# yield headers
|
|
40
42
|
yield line
|
|
41
43
|
else:
|
|
44
|
+
self.current_headers = line[:]
|
|
42
45
|
yield line
|
|
43
46
|
i += 1
|
|
44
47
|
|
|
@@ -74,7 +74,13 @@ class JsonReaderHelper:
|
|
|
74
74
|
if isinstance(obj, (tuple, list)):
|
|
75
75
|
return ["" if o is None else str(o) for o in obj]
|
|
76
76
|
elif isinstance(obj, dict):
|
|
77
|
-
|
|
77
|
+
#
|
|
78
|
+
# new theory is that we don't sort the keys because headers change on a row-by-row
|
|
79
|
+
# so the positions in the header list don't have meaning and there is no other value
|
|
80
|
+
# to the keys being sorted, and, moreover, if the key order had any meaning to the
|
|
81
|
+
# data generator that information is lost if we sort.
|
|
82
|
+
#
|
|
83
|
+
# obj = {key: obj[key] for key in sorted(obj)}
|
|
78
84
|
keys = list(obj.keys())
|
|
79
85
|
#
|
|
80
86
|
# we sort because a dict does require a certain order of its keys.
|
|
@@ -82,12 +88,14 @@ class JsonReaderHelper:
|
|
|
82
88
|
# order on any given line.
|
|
83
89
|
#
|
|
84
90
|
line = [cls.string_or_date_string(obj[k]) for k in keys]
|
|
91
|
+
return (keys, line)
|
|
85
92
|
#
|
|
86
93
|
# make a header row if line number is 0 else just a data row
|
|
87
94
|
#
|
|
88
95
|
#
|
|
89
96
|
# check if we have headers for values. i.e. keys == values in first line
|
|
90
97
|
#
|
|
98
|
+
"""
|
|
91
99
|
same = True
|
|
92
100
|
if line_number == 0:
|
|
93
101
|
for i, _ in enumerate(line):
|
|
@@ -97,6 +105,7 @@ class JsonReaderHelper:
|
|
|
97
105
|
if line_number == 0 and not same:
|
|
98
106
|
return (keys, line)
|
|
99
107
|
return line
|
|
108
|
+
"""
|
|
100
109
|
else:
|
|
101
110
|
return cls.string_or_date_string(obj)
|
|
102
111
|
|
|
@@ -36,7 +36,16 @@ class LineCounter:
|
|
|
36
36
|
lm.next_line(last_line=[], data=line)
|
|
37
37
|
if len(line) == 0 and self.csvpathx.skip_blank_lines:
|
|
38
38
|
continue
|
|
39
|
-
|
|
39
|
+
#
|
|
40
|
+
# some data formats embed headers in each line -- e.g. JSONL.
|
|
41
|
+
# in that case, we never have a header line. we'll just take the
|
|
42
|
+
# first headers available. in JSONL headers are an even looser
|
|
43
|
+
# concept than in CSV. it is very possible that a JSONL file's
|
|
44
|
+
# headers never settle for more than one line.
|
|
45
|
+
#
|
|
46
|
+
if reader.updates_headers and reader.current_headers:
|
|
47
|
+
line = reader.current_headers
|
|
48
|
+
if (not headers or len(headers) == 0) and line and len(line) > 0:
|
|
40
49
|
headers = line[:]
|
|
41
50
|
if not headers:
|
|
42
51
|
headers = []
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "csvpath"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.584"
|
|
4
4
|
description = "A data preboarding framework for ingesting, managing, and validating CSV, Excel, and other tabular data files using a Collect, Store, Validate, Publish architecture to create a trusted publisher for downstream data consumers."
|
|
5
5
|
authors = ["David Kershaw <info@csvpath.org>"]
|
|
6
6
|
readme = "README.md"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/otlp/otlp_error_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/otlp/otlp_file_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
{csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/otlp/otlp_paths_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/otlp/otlp_result_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/otlp/otlp_results_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sftpplus/arrival_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
{csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sftpplus/transfer_creator.py
RENAMED
|
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.581 → csvpath-0.0.584}/csvpath/managers/integrations/sql/sql_result_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sql/sql_results_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/integrations/webhook/webhook_listener.py
RENAMED
|
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.581 → csvpath-0.0.584}/csvpath/managers/results/readers/file_printouts_reader.py
RENAMED
|
File without changes
|
{csvpath-0.0.581 → csvpath-0.0.584}/csvpath/managers/results/readers/file_unmatched_reader.py
RENAMED
|
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
|