csvpath 0.0.527__tar.gz → 0.0.528__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.527 → csvpath-0.0.528}/PKG-INFO +1 -1
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/csvpath.py +2 -2
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/files/file_manager.py +14 -29
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/files/file_registrar.py +36 -2
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/files/files_listener.py +4 -0
- csvpath-0.0.527/csvpath/managers/files/file_cacher.py → csvpath-0.0.528/csvpath/managers/files/lines_and_headers_cacher.py +1 -1
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/paths/paths_registrar.py +14 -1
- csvpath-0.0.528/csvpath/util/intermediary.py +84 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sftp/sftp_data_reader.py +7 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/pyproject.toml +1 -1
- {csvpath-0.0.527 → csvpath-0.0.528}/LICENSE +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/README.md +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/assets/config/config.ini +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/assets/config/function.imports +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/assets/config/jenkins-local-sftp.ini +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/assets/config/jenkins-s3.ini +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sqlite/csvpath +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/config/config.ini +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/__init__.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/__init__.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/asker.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/cli.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/const.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/debug_config.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/drill_down.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/function_describer.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/function_lister.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/selecter.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/csvpaths.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/__init__.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/errors/error.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/errors/error_collector.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/errors/error_comms.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/errors/error_manager.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/files/file_metadata.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ckan/ckan.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ckan/datafile.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ckan/dataset.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/event.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/event_result.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/job.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/run.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/run_state.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/sender.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/metrics.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftpplus/rpc.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/slack/event.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/slack/sender.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/listener.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/metadata.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/paths/paths_listener.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/paths/paths_manager.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/paths/paths_metadata.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/registrar.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/readers/readers.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/result.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/result_file_reader.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/result_metadata.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/result_registrar.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/result_serializer.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/results_manager.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/results_metadata.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/results_registrar.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/run/run_listener_stdout.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/run/run_metadata.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/run/run_registrar.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/__init__.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/__init__.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/args.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/args_helper.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/all.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/andf.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/any.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/between.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/empty.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/exists.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/inf.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/no.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/notf.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/orf.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/yes.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/count.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/count_bytes.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/count_headers.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/count_lines.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/count_scans.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/counter.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/every.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/has_matches.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/increment.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/tally.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/total_lines.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/dates/now.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/function.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/function_factory.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/function_finder.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/function_focus.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/append.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/collect.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/empty_stack.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/end.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/header_name.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/headers.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/insert.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/mismatch.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/replace.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/reset_headers.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/advance.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/after_blank.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/dups.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/first.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/first_line.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/last.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/stop.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/above.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/add.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/divide.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/equals.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/intf.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/mod.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/multiply.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/odd.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/round.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/subtotal.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/subtract.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/sum.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/misc/fingerprint.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/misc/importf.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/misc/random.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/print/jinjaf.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/print/print_line.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/print/print_queue.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/print/printf.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/print/table.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/stats/minf.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/stats/percent.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/stats/percent_unique.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/stats/stdev.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/alter.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/caps.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/concat.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/contains.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/length.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/lower.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/metaphone.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/regex.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/starts_with.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/strip.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/substring.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/upper.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/testing/debug.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/__init__.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/boolean.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/datef.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/decimal.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/email.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/nonef.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/string.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/type.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/url.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/validity/fail.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/validity/failed.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/validity/line.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/variables/get.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/variables/pushpop.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/variables/put.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/variables/track.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/variables/variables.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/lark_parser.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/lark_transformer.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/matcher.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/__init__.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/equality.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/expression.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/header.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/matchable.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/qualified.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/reference.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/term.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/variable.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/util/exceptions.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/util/expression_encoder.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/util/expression_utility.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/util/lark_print_parser.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/util/print_parser.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/util/runtime_data_collector.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/error_mode.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/explain_mode.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/files_mode.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/logic_mode.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/mode_controller.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/print_mode.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/return_mode.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/run_mode.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/source_mode.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/transfer_mode.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/unmatched_mode.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/validation_mode.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/scanning/__init__.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/scanning/exceptions.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/scanning/parser.out +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/scanning/parsetab.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/scanning/scanner.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/scanning/scanning_lexer.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/box.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/cache.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/caser.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/class_loader.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/code.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/config.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/config_exception.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/exceptions.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/file_info.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/file_readers.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/file_writers.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/hasher.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/last_line_stats.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/line_counter.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/line_monitor.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/line_spooler.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/log_utility.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/metadata_parser.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/nos.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/pandas_data_reader.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/printer.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/reference_parser.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/s3/s3_data_reader.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/s3/s3_data_writer.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/s3/s3_fingerprinter.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/s3/s3_nos.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/s3/s3_utils.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sftp/sftp_config.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sftp/sftp_data_writer.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sftp/sftp_nos.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sqliter.py +0 -0
- {csvpath-0.0.527 → csvpath-0.0.528}/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.528
|
|
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
|
|
@@ -1314,10 +1314,10 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
|
|
|
1314
1314
|
uc = self.csvpaths.config.get(section="cache", name="use_cache")
|
|
1315
1315
|
use_cache = uc is None or uc.strip().lower() != "no"
|
|
1316
1316
|
if self.csvpaths and use_cache is True:
|
|
1317
|
-
self.line_monitor = self.csvpaths.file_manager.
|
|
1317
|
+
self.line_monitor = self.csvpaths.file_manager.lines_and_headers_cacher.get_new_line_monitor(
|
|
1318
1318
|
self.scanner.filename
|
|
1319
1319
|
)
|
|
1320
|
-
self.headers = self.csvpaths.file_manager.
|
|
1320
|
+
self.headers = self.csvpaths.file_manager.lines_and_headers_cacher.get_original_headers(
|
|
1321
1321
|
self.scanner.filename
|
|
1322
1322
|
)
|
|
1323
1323
|
else:
|
|
@@ -10,7 +10,7 @@ from csvpath.util.exceptions import InputException, FileException
|
|
|
10
10
|
from csvpath.util.nos import Nos
|
|
11
11
|
from csvpath.util.box import Box
|
|
12
12
|
from .file_registrar import FileRegistrar
|
|
13
|
-
from .
|
|
13
|
+
from .lines_and_headers_cacher import LinesAndHeadersCacher
|
|
14
14
|
from .file_metadata import FileMetadata
|
|
15
15
|
|
|
16
16
|
NamedFileName = NewType("NamedFileName", str)
|
|
@@ -25,7 +25,10 @@ class FileManager:
|
|
|
25
25
|
self._csvpaths = csvpaths
|
|
26
26
|
self.registrar = FileRegistrar(csvpaths)
|
|
27
27
|
"""@private"""
|
|
28
|
-
|
|
28
|
+
#
|
|
29
|
+
# used by csvpath direct access
|
|
30
|
+
#
|
|
31
|
+
self.lines_and_headers_cacher = LinesAndHeadersCacher(csvpaths)
|
|
29
32
|
"""@private"""
|
|
30
33
|
self._nos = None
|
|
31
34
|
|
|
@@ -81,18 +84,27 @@ class FileManager:
|
|
|
81
84
|
nos = self.nos
|
|
82
85
|
nos.path = path
|
|
83
86
|
if nos.exists():
|
|
87
|
+
m = self.registrar.get_manifest(path)
|
|
88
|
+
return m["uuid"]
|
|
89
|
+
"""
|
|
84
90
|
with DataFileReader(path) as reader:
|
|
85
91
|
m = json.load(reader.source)
|
|
86
92
|
return m["uuid"]
|
|
93
|
+
"""
|
|
87
94
|
else:
|
|
88
95
|
path = self.named_file_home(name)
|
|
89
96
|
path = os.path.join(path, "manifest.json")
|
|
90
97
|
nos = self.nos
|
|
91
98
|
nos.path = path
|
|
92
99
|
if nos.exists():
|
|
100
|
+
m = self.registrar.get_manifest(path)
|
|
101
|
+
return m[len(m) - 1]["uuid"]
|
|
102
|
+
|
|
103
|
+
"""
|
|
93
104
|
with DataFileReader(path) as reader:
|
|
94
105
|
m = json.load(reader.source)
|
|
95
106
|
return m[len(m) - 1]["uuid"]
|
|
107
|
+
"""
|
|
96
108
|
raise ValueError(f"No manifest for file named {name}")
|
|
97
109
|
|
|
98
110
|
#
|
|
@@ -114,34 +126,11 @@ class FileManager:
|
|
|
114
126
|
# up in multiple ways.
|
|
115
127
|
#
|
|
116
128
|
return ""
|
|
117
|
-
#
|
|
118
|
-
# added
|
|
119
|
-
#
|
|
120
|
-
home = None
|
|
121
|
-
#
|
|
122
|
-
# this will never happen with the addition of the / test above. :/
|
|
123
|
-
#
|
|
124
|
-
"""
|
|
125
|
-
if name.startswith("/"):
|
|
126
|
-
home = name
|
|
127
|
-
else:
|
|
128
|
-
#
|
|
129
|
-
# done add
|
|
130
|
-
#
|
|
131
|
-
home = os.path.join(self.named_files_dir, name)
|
|
132
|
-
"""
|
|
133
129
|
home = os.path.join(self.named_files_dir, name)
|
|
134
|
-
#
|
|
135
|
-
# added
|
|
136
|
-
#
|
|
137
|
-
# nos = Nos(home)
|
|
138
130
|
nos = self.nos
|
|
139
131
|
nos.path = home
|
|
140
132
|
if nos.isfile():
|
|
141
133
|
home = home[0 : home.rfind(nos.sep)]
|
|
142
|
-
#
|
|
143
|
-
# done add
|
|
144
|
-
#
|
|
145
134
|
return home
|
|
146
135
|
|
|
147
136
|
def assure_named_file_home(self, name: str) -> str:
|
|
@@ -149,9 +138,7 @@ class FileManager:
|
|
|
149
138
|
home = self.named_file_home(name)
|
|
150
139
|
nos = self.nos
|
|
151
140
|
nos.path = home
|
|
152
|
-
# nos = Nos(home)
|
|
153
141
|
if not nos.exists():
|
|
154
|
-
# if not os.path.exists(home):
|
|
155
142
|
nos.makedirs()
|
|
156
143
|
return home
|
|
157
144
|
|
|
@@ -194,8 +181,6 @@ class FileManager:
|
|
|
194
181
|
nos.path = os.path.join(b, n)
|
|
195
182
|
if not nos.isfile():
|
|
196
183
|
ns.append(n)
|
|
197
|
-
|
|
198
|
-
# ns = [n for n in Nos(b).listdir() if not Nos(os.path.join(b, n)).isfile()]
|
|
199
184
|
return ns
|
|
200
185
|
|
|
201
186
|
def name_exists(self, name: NamedFileName) -> bool:
|
|
@@ -2,12 +2,14 @@ import os
|
|
|
2
2
|
import json
|
|
3
3
|
from datetime import datetime
|
|
4
4
|
from csvpath.util.exceptions import InputException, FileException
|
|
5
|
-
|
|
6
|
-
from csvpath.util.
|
|
5
|
+
|
|
6
|
+
# from csvpath.util.file_readers import DataFileReader
|
|
7
|
+
# from csvpath.util.file_writers import DataFileWriter
|
|
7
8
|
from csvpath.util.nos import Nos
|
|
8
9
|
from csvpath.managers.registrar import Registrar
|
|
9
10
|
from csvpath.managers.listener import Listener
|
|
10
11
|
from csvpath.managers.metadata import Metadata
|
|
12
|
+
from csvpath.util.intermediary import Intermediary
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
class FileRegistrar(Registrar, Listener):
|
|
@@ -21,6 +23,7 @@ class FileRegistrar(Registrar, Listener):
|
|
|
21
23
|
self.csvpaths = csvpaths
|
|
22
24
|
self.config = csvpaths.config
|
|
23
25
|
self.type_name = "file"
|
|
26
|
+
self.intermediary = Intermediary(csvpaths)
|
|
24
27
|
|
|
25
28
|
def get_fingerprint(self, home) -> str:
|
|
26
29
|
mpath = self.manifest_path(home)
|
|
@@ -38,16 +41,26 @@ class FileRegistrar(Registrar, Listener):
|
|
|
38
41
|
mf = os.path.join(home, "manifest.json")
|
|
39
42
|
nos.path = mf
|
|
40
43
|
if not nos.exists():
|
|
44
|
+
self.intermediary.put_json(mf, [])
|
|
45
|
+
"""
|
|
41
46
|
with DataFileWriter(path=mf, mode="w") as writer:
|
|
42
47
|
writer.append("[]")
|
|
48
|
+
"""
|
|
43
49
|
return mf
|
|
44
50
|
|
|
45
51
|
def get_manifest(self, mpath) -> list:
|
|
52
|
+
j = self.intermediary.get_json(mpath)
|
|
53
|
+
if j is None:
|
|
54
|
+
j = []
|
|
55
|
+
self.intermediary.put_json(mpath, j)
|
|
56
|
+
return j
|
|
57
|
+
"""
|
|
46
58
|
try:
|
|
47
59
|
with DataFileReader(mpath) as reader:
|
|
48
60
|
return json.load(reader.source)
|
|
49
61
|
except FileNotFoundError:
|
|
50
62
|
return []
|
|
63
|
+
"""
|
|
51
64
|
|
|
52
65
|
def metadata_update(self, mdata: Metadata) -> None:
|
|
53
66
|
path = mdata.origin_path
|
|
@@ -68,8 +81,12 @@ class FileRegistrar(Registrar, Listener):
|
|
|
68
81
|
mani["mark"] = mark
|
|
69
82
|
jdata = self.get_manifest(manifest_path)
|
|
70
83
|
jdata.append(mani)
|
|
84
|
+
# self.intermediary.clear(manifest_path)
|
|
85
|
+
self.intermediary.put_json(manifest_path, jdata)
|
|
86
|
+
"""
|
|
71
87
|
with DataFileWriter(path=manifest_path, mode="w") as writer:
|
|
72
88
|
json.dump(jdata, writer.sink, indent=2)
|
|
89
|
+
"""
|
|
73
90
|
#
|
|
74
91
|
# drop update into an all-inputs/files record here?
|
|
75
92
|
#
|
|
@@ -146,6 +163,22 @@ class FileRegistrar(Registrar, Listener):
|
|
|
146
163
|
|
|
147
164
|
def registered_file(self, home: str) -> str:
|
|
148
165
|
mpath = self.manifest_path(home)
|
|
166
|
+
mdata = self.get_manifest(mpath)
|
|
167
|
+
if mdata is None or len(mdata) == 0:
|
|
168
|
+
raise InputException(f"Manifest for {home} at {mpath} is empty")
|
|
169
|
+
m = mdata[len(mdata) - 1]
|
|
170
|
+
if "file" not in m:
|
|
171
|
+
raise ValueError(
|
|
172
|
+
"File path cannot be None. Check your config file and named-files."
|
|
173
|
+
)
|
|
174
|
+
path = m["file"]
|
|
175
|
+
mark = None
|
|
176
|
+
if "mark" in m:
|
|
177
|
+
mark = m["mark"]
|
|
178
|
+
if mark is not None:
|
|
179
|
+
path = f"{path}#{mark}"
|
|
180
|
+
return path
|
|
181
|
+
"""
|
|
149
182
|
with DataFileReader(mpath) as reader:
|
|
150
183
|
mdata = json.load(reader.source)
|
|
151
184
|
if mdata is None or len(mdata) == 0:
|
|
@@ -162,3 +195,4 @@ class FileRegistrar(Registrar, Listener):
|
|
|
162
195
|
if mark is not None:
|
|
163
196
|
path = f"{path}#{mark}"
|
|
164
197
|
return path
|
|
198
|
+
"""
|
|
@@ -2,12 +2,14 @@ import os
|
|
|
2
2
|
import json
|
|
3
3
|
from csvpath.util.exceptions import InputException
|
|
4
4
|
from csvpath.util.file_readers import DataFileReader
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
# from csvpath.util.file_writers import DataFileWriter
|
|
6
7
|
from csvpath.util.nos import Nos
|
|
7
8
|
from .paths_metadata import PathsMetadata
|
|
8
9
|
from ..listener import Listener
|
|
9
10
|
from ..metadata import Metadata
|
|
10
11
|
from ..registrar import Registrar
|
|
12
|
+
from csvpath.util.intermediary import Intermediary
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
class PathsRegistrar(Registrar, Listener):
|
|
@@ -19,6 +21,7 @@ class PathsRegistrar(Registrar, Listener):
|
|
|
19
21
|
Listener.__init__(self, csvpaths.config)
|
|
20
22
|
self._manager = None
|
|
21
23
|
self.type_name = "paths"
|
|
24
|
+
self.intermediary = Intermediary(csvpaths)
|
|
22
25
|
|
|
23
26
|
@property
|
|
24
27
|
def manager(self):
|
|
@@ -27,9 +30,13 @@ class PathsRegistrar(Registrar, Listener):
|
|
|
27
30
|
return self._manager
|
|
28
31
|
|
|
29
32
|
def get_manifest(self, mpath) -> list:
|
|
33
|
+
j = self.intermediary.get_json(mpath)
|
|
34
|
+
return j
|
|
35
|
+
"""
|
|
30
36
|
with DataFileReader(mpath) as file:
|
|
31
37
|
j = json.load(file.source)
|
|
32
38
|
return j
|
|
39
|
+
"""
|
|
33
40
|
|
|
34
41
|
def register_complete(self, mdata: Metadata) -> None:
|
|
35
42
|
mdata.manifest_path = self.manifest_path(name=mdata.named_paths_name)
|
|
@@ -102,8 +109,11 @@ class PathsRegistrar(Registrar, Listener):
|
|
|
102
109
|
m["uuid"] = mdata.uuid_string
|
|
103
110
|
m["manifest_path"] = mdata.manifest_path
|
|
104
111
|
jdata.append(m)
|
|
112
|
+
self.intermediary.put_json(mdata.manifest_path, jdata)
|
|
113
|
+
"""
|
|
105
114
|
with DataFileWriter(path=mdata.manifest_path) as file:
|
|
106
115
|
json.dump(jdata, file.sink, indent=2)
|
|
116
|
+
"""
|
|
107
117
|
else:
|
|
108
118
|
#
|
|
109
119
|
# leave as info so nobody has to dig to see why no update
|
|
@@ -117,8 +127,11 @@ class PathsRegistrar(Registrar, Listener):
|
|
|
117
127
|
nhome = self.manager.named_paths_home(name)
|
|
118
128
|
mf = os.path.join(nhome, "manifest.json")
|
|
119
129
|
if not Nos(mf).exists():
|
|
130
|
+
self.intermediary.put_json(mf, [])
|
|
131
|
+
"""
|
|
120
132
|
with DataFileWriter(path=mf) as file:
|
|
121
133
|
file.append("[]")
|
|
134
|
+
"""
|
|
122
135
|
return mf
|
|
123
136
|
|
|
124
137
|
def _most_recent_fingerprint(self, manifest_path: str) -> str:
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# pylint: disable=C0114
|
|
2
|
+
import os
|
|
3
|
+
import json
|
|
4
|
+
from csvpath.util.file_readers import DataFileReader
|
|
5
|
+
from csvpath.util.file_writers import DataFileWriter
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Intermediary:
|
|
9
|
+
HIT_COUNT = 0
|
|
10
|
+
MISS_COUNT = 0
|
|
11
|
+
WRITE_COUNT = 0
|
|
12
|
+
|
|
13
|
+
def __init__(self, csvpaths) -> None:
|
|
14
|
+
self._csvpaths = csvpaths
|
|
15
|
+
|
|
16
|
+
def get_json(self, path):
|
|
17
|
+
...
|
|
18
|
+
|
|
19
|
+
def put_json(self, path, j) -> None:
|
|
20
|
+
...
|
|
21
|
+
|
|
22
|
+
def clear(self, path) -> None:
|
|
23
|
+
...
|
|
24
|
+
|
|
25
|
+
def __new__(cls, csvpaths):
|
|
26
|
+
if cls == Intermediary:
|
|
27
|
+
uc = csvpaths.config.get(section="cache", name="use_cache")
|
|
28
|
+
if uc and uc.strip().lower() == "no":
|
|
29
|
+
return NoCacheIntermediary(csvpaths)
|
|
30
|
+
return CacheIntermediary(csvpaths)
|
|
31
|
+
else:
|
|
32
|
+
instance = super().__new__(cls)
|
|
33
|
+
return instance
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class CacheIntermediary:
|
|
37
|
+
def __init__(self, csvpaths) -> None:
|
|
38
|
+
self._csvpaths = csvpaths
|
|
39
|
+
self._cache = {}
|
|
40
|
+
|
|
41
|
+
def get_json(self, path):
|
|
42
|
+
if path in self._cache:
|
|
43
|
+
Intermediary.HIT_COUNT += 1
|
|
44
|
+
# print(f"Intermediary.hit: {path}: h: {Intermediary.HIT_COUNT}, m: {Intermediary.MISS_COUNT}, w: {Intermediary.WRITE_COUNT}")
|
|
45
|
+
return self._cache[path]
|
|
46
|
+
try:
|
|
47
|
+
Intermediary.MISS_COUNT += 1
|
|
48
|
+
# print(f"Intermediary.miss: {path}: h: {Intermediary.HIT_COUNT}, m: {Intermediary.MISS_COUNT}, w: {Intermediary.WRITE_COUNT}")
|
|
49
|
+
with DataFileReader(path) as reader:
|
|
50
|
+
j = json.load(reader.source)
|
|
51
|
+
self._cache[path] = j
|
|
52
|
+
return j
|
|
53
|
+
except FileNotFoundError:
|
|
54
|
+
self.put_json(path, [])
|
|
55
|
+
return []
|
|
56
|
+
|
|
57
|
+
def put_json(self, path, j) -> None:
|
|
58
|
+
self._cache[path] = j
|
|
59
|
+
Intermediary.WRITE_COUNT += 1
|
|
60
|
+
# print(f"Intermediary.write: {path}: h: {Intermediary.HIT_COUNT}, m: {Intermediary.MISS_COUNT}, w: {Intermediary.WRITE_COUNT}")
|
|
61
|
+
with DataFileWriter(path=path, mode="w") as writer:
|
|
62
|
+
json.dump(j, writer.sink, indent=2)
|
|
63
|
+
|
|
64
|
+
def clear(self, path) -> None:
|
|
65
|
+
del self._cache[path]
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class NoCacheIntermediary:
|
|
69
|
+
def __init__(self, csvpaths) -> None:
|
|
70
|
+
self._csvpaths = csvpaths
|
|
71
|
+
|
|
72
|
+
def get_json(self, path):
|
|
73
|
+
try:
|
|
74
|
+
with DataFileReader(path) as reader:
|
|
75
|
+
return json.load(reader.source)
|
|
76
|
+
except FileNotFoundError:
|
|
77
|
+
return []
|
|
78
|
+
|
|
79
|
+
def put_json(self, path, j) -> None:
|
|
80
|
+
with DataFileWriter(path=path, mode="w") as writer:
|
|
81
|
+
json.dump(j, writer.sink, indent=2)
|
|
82
|
+
|
|
83
|
+
def clear(self, path) -> None:
|
|
84
|
+
...
|
|
@@ -15,10 +15,17 @@ from .sftp_nos import SftpDo
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class SftpDataReader(CsvDataReader):
|
|
18
|
+
# LOAD = 0
|
|
19
|
+
|
|
18
20
|
def load_if(self) -> None:
|
|
19
21
|
if self.source is None:
|
|
20
22
|
config = Box.STUFF.get(Box.CSVPATHS_CONFIG)
|
|
21
23
|
c = SftpConfig(config)
|
|
24
|
+
# SftpDataReader.LOAD += 1
|
|
25
|
+
# print(f"SftpDataReader: load_if: loding: {SftpDataReader.LOAD}")
|
|
26
|
+
# from csvpath.util.log_utility import LogUtility
|
|
27
|
+
# LogUtility.log_brief_trace()
|
|
28
|
+
|
|
22
29
|
self.source = open(
|
|
23
30
|
self._path,
|
|
24
31
|
"r",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "csvpath"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.528"
|
|
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
|
{csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/otlp_error_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
{csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/otlp_result_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/otlp_results_listener.py
RENAMED
|
File without changes
|
|
File without changes
|
{csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftpplus/arrival_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
{csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftpplus/transfer_creator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sqlite/sqlite_results_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
|
{csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/readers/file_printouts_reader.py
RENAMED
|
File without changes
|
{csvpath-0.0.527 → csvpath-0.0.528}/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
|