csvpath 0.0.508__tar.gz → 0.0.509__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.508 → csvpath-0.0.509}/PKG-INFO +1 -1
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/files/file_manager.py +31 -1
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/sftp/sftp_sender.py +17 -2
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/result_serializer.py +3 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/results_registrar.py +2 -4
- csvpath-0.0.509/csvpath/util/file_info.py +49 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/nos.py +6 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/s3/s3_data_reader.py +3 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/s3/s3_data_writer.py +7 -1
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/s3/s3_utils.py +13 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/s3/s3_xlsx_data_reader.py +4 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/pyproject.toml +1 -1
- csvpath-0.0.508/csvpath/util/file_info.py +0 -29
- {csvpath-0.0.508 → csvpath-0.0.509}/LICENSE +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/README.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/config/config.ini +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/__init__.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/cli/__init__.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/cli/cli.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/cli/drill_down.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/csvpath.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/csvpaths.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/__init__.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/files/file_cacher.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/files/file_metadata.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/files/file_registrar.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ckan/ckan.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ckan/datafile.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ckan/dataset.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ol/event.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ol/event_result.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ol/job.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ol/run.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ol/run_state.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/ol/sender.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/slack/event.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/slack/sender.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/listener.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/metadata.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/paths/paths_manager.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/paths/paths_metadata.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/paths/paths_registrar.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/registrar.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/readers/readers.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/result.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/result_file_reader.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/result_metadata.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/result_registrar.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/results_manager.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/results_metadata.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/run/run_listener_stdout.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/run/run_metadata.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/run/run_registrar.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/__init__.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/__init__.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/args.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/boolean/all.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/boolean/andf.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/boolean/any.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/boolean/between.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/boolean/empty.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/boolean/exists.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/boolean/inf.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/boolean/no.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/boolean/notf.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/boolean/orf.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/boolean/yes.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/counting/count.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/counting/count_bytes.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/counting/count_headers.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/counting/count_lines.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/counting/count_scans.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/counting/counter.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/counting/every.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/counting/has_matches.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/counting/increment.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/counting/tally.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/counting/total_lines.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/dates/now.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/function.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/function_factory.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/function_finder.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/function_focus.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/headers/append.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/headers/collect.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/headers/empty_stack.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/headers/end.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/headers/header_name.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/headers/headers.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/headers/mismatch.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/headers/replace.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/headers/reset_headers.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/lines/advance.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/lines/after_blank.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/lines/dups.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/lines/first.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/lines/first_line.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/lines/last.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/lines/stop.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/math/above.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/math/add.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/math/divide.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/math/equals.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/math/intf.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/math/mod.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/math/multiply.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/math/round.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/math/subtotal.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/math/subtract.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/math/sum.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/misc/fingerprint.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/misc/importf.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/misc/random.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/print/jinjaf.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/print/print_line.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/print/print_queue.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/print/printf.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/print/table.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/stats/minf.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/stats/percent.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/stats/percent_unique.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/stats/stdev.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/strings/concat.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/strings/length.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/strings/lower.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/strings/metaphone.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/strings/regex.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/strings/starts_with.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/strings/strip.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/strings/substring.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/strings/upper.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/testing/debug.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/types/__init__.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/types/boolean.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/types/datef.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/types/decimal.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/types/nonef.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/types/string.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/types/type.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/validity/fail.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/validity/failed.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/validity/line.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/variables/get.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/variables/pushpop.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/variables/put.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/variables/track.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/functions/variables/variables.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/lark_parser.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/lark_transformer.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/matcher.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/productions/__init__.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/productions/equality.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/productions/expression.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/productions/header.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/productions/matchable.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/productions/qualified.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/productions/reference.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/productions/term.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/productions/variable.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/util/exceptions.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/util/expression_encoder.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/util/expression_utility.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/util/lark_print_parser.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/util/print_parser.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/matching/util/runtime_data_collector.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/modes/explain_mode.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/modes/files_mode.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/modes/logic_mode.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/modes/mode_controller.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/modes/print_mode.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/modes/return_mode.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/modes/run_mode.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/modes/source_mode.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/modes/transfer_mode.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/modes/unmatched_mode.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/modes/validation_mode.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/scanning/__init__.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/scanning/exceptions.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/scanning/parser.out +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/scanning/parsetab.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/scanning/scanner.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/scanning/scanning_lexer.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/box.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/cache.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/class_loader.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/config.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/config_exception.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/error.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/exceptions.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/file_readers.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/file_writers.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/last_line_stats.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/line_counter.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/line_monitor.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/line_spooler.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/log_utility.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/metadata_parser.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/pandas_data_reader.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/printer.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/reference_parser.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/s3/s3_fingerprinter.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/csvpath/util/var_utility.py +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/asbool.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/assignment.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/comments.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/config.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/examples.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/files.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/above.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/advance.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/after_blank.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/all.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/andor.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/any.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/average.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/between.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/collect.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/correlate.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/count.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/count_bytes.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/count_headers.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/counter.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/date.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/empty.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/empty_stack.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/end.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/every.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/fail.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/fingerprint.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/first.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/get.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/has_dups.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/has_matches.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/header.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/header_name.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/header_names_mismatch.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/implementing_functions.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/import.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/in.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/increment.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/intf.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/jinja.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/last.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/line.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/line_number.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/max.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/metaphone.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/mismatch.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/no.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/not.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/now.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/percent_unique.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/pop.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/print.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/print_line.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/print_queue.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/random.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/regex.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/replace.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/reset_headers.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/stdev.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/stop.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/string_functions.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/subtotal.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/subtract.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/sum.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/tally.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/total_lines.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/track.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/types.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/variables.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions/variables_and_headers.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/functions.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/grammar.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/headers.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/images/ckan-logo-sm.png +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/images/csvpath-icon-sm.png +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/images/csvpath-logo-wordmark-tight-2.svg +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/images/logo-wordmark-3.svg +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/images/logo-wordmark-4.svg +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/images/logo-wordmark-white-on-black-trimmed-padded.png +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/images/logo-wordmark-white-trimmed.png +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/images/marquez-logo-sm.png +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/images/openlineage-logo-sm.png +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/paths.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/printing.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/qualifiers.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/references.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/terms.md +0 -0
- {csvpath-0.0.508 → csvpath-0.0.509}/docs/variables.md +0 -0
|
@@ -36,7 +36,37 @@ class FileManager:
|
|
|
36
36
|
# named-file homes are a dir like: inputs/named_files/March-2024/March-2024.csv
|
|
37
37
|
#
|
|
38
38
|
def named_file_home(self, name: str) -> str:
|
|
39
|
-
|
|
39
|
+
#
|
|
40
|
+
# not a named-file name
|
|
41
|
+
#
|
|
42
|
+
if name.find("/") > -1:
|
|
43
|
+
#
|
|
44
|
+
# this is definitely not what we should be returning. but it is what
|
|
45
|
+
# works in the new world of remote and fully-qualified local paths.
|
|
46
|
+
# for now, going with it. the previous implementation was wonky too,
|
|
47
|
+
# in a different and not visible way, but not good, so this is a step
|
|
48
|
+
# up in multiple ways.
|
|
49
|
+
#
|
|
50
|
+
return ""
|
|
51
|
+
#
|
|
52
|
+
# added
|
|
53
|
+
#
|
|
54
|
+
home = None
|
|
55
|
+
if name.startswith("/"):
|
|
56
|
+
home = name
|
|
57
|
+
else:
|
|
58
|
+
#
|
|
59
|
+
# done add
|
|
60
|
+
#
|
|
61
|
+
home = os.path.join(self.named_files_dir, name)
|
|
62
|
+
#
|
|
63
|
+
# added
|
|
64
|
+
#
|
|
65
|
+
if Nos(home).isfile():
|
|
66
|
+
home = home[0 : home.rfind(Nos(home).sep)]
|
|
67
|
+
#
|
|
68
|
+
# done add
|
|
69
|
+
#
|
|
40
70
|
return home
|
|
41
71
|
|
|
42
72
|
def assure_named_file_home(self, name: str) -> str:
|
|
@@ -7,6 +7,7 @@ from csvpath.managers.results.result import Result
|
|
|
7
7
|
from csvpath.managers.listener import Listener
|
|
8
8
|
from csvpath.util.nos import Nos
|
|
9
9
|
from csvpath.util.var_utility import VarUtility
|
|
10
|
+
from csvpath.util.file_readers import DataFileReader
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
#
|
|
@@ -105,10 +106,24 @@ class SftpSender(Listener, threading.Thread):
|
|
|
105
106
|
raise ValueError("File name {file} is not in {files}")
|
|
106
107
|
if to is None:
|
|
107
108
|
raise ValueError("File name {file} has no destination")
|
|
108
|
-
path = f"
|
|
109
|
+
path = f"{self.metadata.run_home}{sep}{self.result.identity_or_index}{sep}{file}"
|
|
109
110
|
remote_path = f"{self._target_path}/{to}"
|
|
110
111
|
self.csvpaths.logger.info("Putting %s to %s", path, remote_path)
|
|
111
|
-
|
|
112
|
+
#
|
|
113
|
+
# need to use data reader and stream. if we're
|
|
114
|
+
# sftping from s3 or something this is going to
|
|
115
|
+
# be slow
|
|
116
|
+
#
|
|
117
|
+
# sftp.put(path, remote_path)
|
|
118
|
+
try:
|
|
119
|
+
sftp.stat(self._target_path)
|
|
120
|
+
except FileNotFoundError:
|
|
121
|
+
sftp.mkdir(self._target_path)
|
|
122
|
+
with DataFileReader(path) as reader:
|
|
123
|
+
flo = reader.source
|
|
124
|
+
f = sftp.open(remote_path, "wb")
|
|
125
|
+
f.write(flo.read())
|
|
126
|
+
f.close()
|
|
112
127
|
#
|
|
113
128
|
# send the original file if we need to. this will always be the normative
|
|
114
129
|
# original, w/o regard to source-mode or by_line chaining or to rewind.
|
|
@@ -24,6 +24,9 @@ class ResultSerializer:
|
|
|
24
24
|
def save_result(self, result) -> None:
|
|
25
25
|
self.result = result
|
|
26
26
|
runtime_data = {}
|
|
27
|
+
result.csvpath.csvpaths.logger.debug(
|
|
28
|
+
"Saving result of %s.%s", result.paths_name, result.identity_or_index
|
|
29
|
+
)
|
|
27
30
|
RuntimeDataCollector.collect(result.csvpath, runtime_data, local=True)
|
|
28
31
|
runtime_data["run_index"] = result.run_index
|
|
29
32
|
es = []
|
|
@@ -119,16 +119,14 @@ class ResultsRegistrar(Registrar, Listener):
|
|
|
119
119
|
def _size(self, path) -> str:
|
|
120
120
|
try:
|
|
121
121
|
fi = FileInfo.info(path)
|
|
122
|
-
return fi["bytes"]
|
|
122
|
+
return fi["bytes"]
|
|
123
123
|
except FileNotFoundError:
|
|
124
124
|
return 0
|
|
125
125
|
|
|
126
126
|
def _last_change(self, path) -> str:
|
|
127
127
|
try:
|
|
128
128
|
fi = FileInfo.info(path)
|
|
129
|
-
|
|
130
|
-
return fi["last_mod"]
|
|
131
|
-
return None
|
|
129
|
+
return fi["last_mod"]
|
|
132
130
|
except FileNotFoundError:
|
|
133
131
|
return -1
|
|
134
132
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class FileInfo:
|
|
5
|
+
@classmethod
|
|
6
|
+
def info(cls, path) -> dict[str, str | int | float]:
|
|
7
|
+
if path is None:
|
|
8
|
+
raise ValueError("Path cannot be None")
|
|
9
|
+
try:
|
|
10
|
+
if path.find("://") > -1:
|
|
11
|
+
return cls._remote(path)
|
|
12
|
+
return cls._local(path)
|
|
13
|
+
except Exception:
|
|
14
|
+
# this shouldn't happen, but it also shouldn't be the
|
|
15
|
+
# main source of friction. If we have a wrong path or
|
|
16
|
+
# an asset we don't know how to get info on, we'll know it
|
|
17
|
+
# above and can handle it there in a more meaningful
|
|
18
|
+
# context.
|
|
19
|
+
return cls._empty()
|
|
20
|
+
|
|
21
|
+
@classmethod
|
|
22
|
+
def _remote(cls, path):
|
|
23
|
+
return cls._empty()
|
|
24
|
+
|
|
25
|
+
@classmethod
|
|
26
|
+
def _empty(cls) -> dict:
|
|
27
|
+
return {
|
|
28
|
+
"mode": "",
|
|
29
|
+
"device": "",
|
|
30
|
+
"bytes": -1,
|
|
31
|
+
"created": None,
|
|
32
|
+
"last_read": None,
|
|
33
|
+
"last_mod": None,
|
|
34
|
+
"flags": None,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@classmethod
|
|
38
|
+
def _local(cls, path):
|
|
39
|
+
s = os.stat(path)
|
|
40
|
+
meta = {
|
|
41
|
+
"mode": s.st_mode,
|
|
42
|
+
"device": s.st_dev,
|
|
43
|
+
"bytes": s.st_size,
|
|
44
|
+
"created": s.st_ctime,
|
|
45
|
+
"last_read": s.st_atime,
|
|
46
|
+
"last_mod": s.st_mtime,
|
|
47
|
+
"flags": s.st_flags,
|
|
48
|
+
}
|
|
49
|
+
return meta
|
|
@@ -139,6 +139,12 @@ class S3Do:
|
|
|
139
139
|
def isfile(self) -> bool:
|
|
140
140
|
bucket, key = S3Utils.path_to_parts(self.path)
|
|
141
141
|
client = boto3.client("s3")
|
|
142
|
+
#
|
|
143
|
+
# boto3 uses a deprecated feature. pytest doesn't like it. this is a quick fix.
|
|
144
|
+
#
|
|
145
|
+
import warnings
|
|
146
|
+
|
|
147
|
+
warnings.filterwarnings(action="ignore", message=r"datetime.datetime.utcnow")
|
|
142
148
|
try:
|
|
143
149
|
client.head_object(Bucket=bucket, Key=key)
|
|
144
150
|
except ClientError as e:
|
|
@@ -18,11 +18,14 @@ class S3DataReader(CsvDataReader):
|
|
|
18
18
|
if self.source is None:
|
|
19
19
|
client = Box.STUFF.get("boto_client")
|
|
20
20
|
if client is None:
|
|
21
|
+
client = S3Utils.make_client()
|
|
22
|
+
"""
|
|
21
23
|
session = boto3.Session(
|
|
22
24
|
aws_access_key_id=os.environ["AWS_ACCESS_KEY_ID"],
|
|
23
25
|
aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"],
|
|
24
26
|
)
|
|
25
27
|
client = session.client("s3")
|
|
28
|
+
"""
|
|
26
29
|
try:
|
|
27
30
|
self.source = open(self._path, "r", transport_params={"client": client})
|
|
28
31
|
except DeprecationWarning:
|
|
@@ -5,6 +5,7 @@ import boto3
|
|
|
5
5
|
from smart_open import open
|
|
6
6
|
from ..file_writers import DataFileWriter
|
|
7
7
|
from csvpath.util.box import Box
|
|
8
|
+
from csvpath.util.s3.s3_utils import S3Utils
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
class S3DataWriter(DataFileWriter):
|
|
@@ -12,16 +13,18 @@ class S3DataWriter(DataFileWriter):
|
|
|
12
13
|
if self.sink is None:
|
|
13
14
|
client = Box.STUFF.get("boto_client")
|
|
14
15
|
if client is None:
|
|
16
|
+
client = S3Utils.make_client()
|
|
17
|
+
"""
|
|
15
18
|
session = boto3.Session(
|
|
16
19
|
aws_access_key_id=os.environ["AWS_ACCESS_KEY_ID"],
|
|
17
20
|
aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"],
|
|
18
21
|
)
|
|
19
22
|
import warnings
|
|
20
|
-
|
|
21
23
|
warnings.filterwarnings(
|
|
22
24
|
action="ignore", message=r"datetime.datetime.utcnow"
|
|
23
25
|
)
|
|
24
26
|
client = session.client("s3")
|
|
27
|
+
"""
|
|
25
28
|
self.sink = open(
|
|
26
29
|
self._path,
|
|
27
30
|
self._mode,
|
|
@@ -35,11 +38,14 @@ class S3DataWriter(DataFileWriter):
|
|
|
35
38
|
"""
|
|
36
39
|
client = Box.STUFF.get("boto_client")
|
|
37
40
|
if client is None:
|
|
41
|
+
client = S3Utils.make_client()
|
|
42
|
+
"""
|
|
38
43
|
session = boto3.Session(
|
|
39
44
|
aws_access_key_id=os.environ["AWS_ACCESS_KEY_ID"],
|
|
40
45
|
aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"],
|
|
41
46
|
)
|
|
42
47
|
client = session.client("s3")
|
|
48
|
+
"""
|
|
43
49
|
with open(self._path, "wb", transport_params={"client": client}) as file:
|
|
44
50
|
file.write(data.encode("utf-8"))
|
|
45
51
|
|
|
@@ -1,9 +1,22 @@
|
|
|
1
|
+
import os
|
|
1
2
|
import boto3
|
|
2
3
|
import uuid
|
|
3
4
|
from botocore.exceptions import ClientError
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
class S3Utils:
|
|
8
|
+
@classmethod
|
|
9
|
+
def make_client(cls):
|
|
10
|
+
import warnings
|
|
11
|
+
|
|
12
|
+
warnings.filterwarnings(action="ignore", message=r"datetime.datetime.utcnow")
|
|
13
|
+
session = boto3.Session(
|
|
14
|
+
aws_access_key_id=os.environ["AWS_ACCESS_KEY_ID"],
|
|
15
|
+
aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"],
|
|
16
|
+
)
|
|
17
|
+
client = session.client("s3")
|
|
18
|
+
return client
|
|
19
|
+
|
|
7
20
|
@classmethod
|
|
8
21
|
def path_to_parts(self, path) -> tuple[str, str]:
|
|
9
22
|
if path.startswith("s3://"):
|
|
@@ -6,6 +6,7 @@ from smart_open import open
|
|
|
6
6
|
from ..file_readers import XlsxDataReader
|
|
7
7
|
from .s3_fingerprinter import S3Fingerprinter
|
|
8
8
|
from csvpath.util.box import Box
|
|
9
|
+
from csvpath.util.s3.s3_utils import S3Utils
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
class S3XlsxDataReader(XlsxDataReader):
|
|
@@ -21,11 +22,14 @@ class S3XlsxDataReader(XlsxDataReader):
|
|
|
21
22
|
if self.source is None:
|
|
22
23
|
client = Box.STUFF.get("boto_client")
|
|
23
24
|
if client is None:
|
|
25
|
+
client = S3Utils.make_client()
|
|
26
|
+
"""
|
|
24
27
|
session = boto3.Session(
|
|
25
28
|
aws_access_key_id=os.environ["AWS_ACCESS_KEY_ID"],
|
|
26
29
|
aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"],
|
|
27
30
|
)
|
|
28
31
|
client = session.client("s3")
|
|
32
|
+
"""
|
|
29
33
|
try:
|
|
30
34
|
self.source = open(
|
|
31
35
|
self._path, "rb", transport_params={"client": client}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class FileInfo:
|
|
5
|
-
@classmethod
|
|
6
|
-
def info(cls, path) -> dict[str, str | int | float]:
|
|
7
|
-
if path is None:
|
|
8
|
-
raise ValueError("Path cannot be None")
|
|
9
|
-
if path.find("://") > -1:
|
|
10
|
-
return cls._remote(path)
|
|
11
|
-
return cls._local(path)
|
|
12
|
-
|
|
13
|
-
@classmethod
|
|
14
|
-
def _remote(cls, path):
|
|
15
|
-
return {}
|
|
16
|
-
|
|
17
|
-
@classmethod
|
|
18
|
-
def _local(cls, path):
|
|
19
|
-
s = os.stat(path)
|
|
20
|
-
meta = {
|
|
21
|
-
"mode": s.st_mode,
|
|
22
|
-
"device": s.st_dev,
|
|
23
|
-
"bytes": s.st_size,
|
|
24
|
-
"created": s.st_ctime,
|
|
25
|
-
"last_read": s.st_atime,
|
|
26
|
-
"last_mod": s.st_mtime,
|
|
27
|
-
"flags": s.st_flags,
|
|
28
|
-
}
|
|
29
|
-
return meta
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.508 → csvpath-0.0.509}/csvpath/managers/integrations/sftpplus/arrival_handler.py
RENAMED
|
File without changes
|
{csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py
RENAMED
|
File without changes
|
{csvpath-0.0.508 → csvpath-0.0.509}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csvpath-0.0.508 → csvpath-0.0.509}/csvpath/managers/results/readers/file_printouts_reader.py
RENAMED
|
File without changes
|
{csvpath-0.0.508 → csvpath-0.0.509}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.508 → csvpath-0.0.509}/csvpath/matching/functions/headers/header_names_mismatch.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
|