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.
Files changed (271) hide show
  1. {csvpath-0.0.527 → csvpath-0.0.528}/PKG-INFO +1 -1
  2. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/csvpath.py +2 -2
  3. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/files/file_manager.py +14 -29
  4. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/files/file_registrar.py +36 -2
  5. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/files/files_listener.py +4 -0
  6. csvpath-0.0.527/csvpath/managers/files/file_cacher.py → csvpath-0.0.528/csvpath/managers/files/lines_and_headers_cacher.py +1 -1
  7. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/paths/paths_registrar.py +14 -1
  8. csvpath-0.0.528/csvpath/util/intermediary.py +84 -0
  9. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sftp/sftp_data_reader.py +7 -0
  10. {csvpath-0.0.527 → csvpath-0.0.528}/pyproject.toml +1 -1
  11. {csvpath-0.0.527 → csvpath-0.0.528}/LICENSE +0 -0
  12. {csvpath-0.0.527 → csvpath-0.0.528}/README.md +0 -0
  13. {csvpath-0.0.527 → csvpath-0.0.528}/assets/config/config.ini +0 -0
  14. {csvpath-0.0.527 → csvpath-0.0.528}/assets/config/function.imports +0 -0
  15. {csvpath-0.0.527 → csvpath-0.0.528}/assets/config/jenkins-local-sftp.ini +0 -0
  16. {csvpath-0.0.527 → csvpath-0.0.528}/assets/config/jenkins-s3.ini +0 -0
  17. {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
  18. {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
  19. {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
  20. {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
  21. {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
  22. {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
  23. {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sqlite/csvpath +0 -0
  24. {csvpath-0.0.527 → csvpath-0.0.528}/assets/integrations/sqlite/schema.sql +0 -0
  25. {csvpath-0.0.527 → csvpath-0.0.528}/config/config.ini +0 -0
  26. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/__init__.py +0 -0
  27. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/__init__.py +0 -0
  28. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/asker.py +0 -0
  29. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/cli.py +0 -0
  30. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/const.py +0 -0
  31. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/debug_config.py +0 -0
  32. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/drill_down.py +0 -0
  33. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/function_describer.py +0 -0
  34. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/function_lister.py +0 -0
  35. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/cli/selecter.py +0 -0
  36. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/csvpaths.py +0 -0
  37. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/__init__.py +0 -0
  38. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/errors/error.py +0 -0
  39. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/errors/error_collector.py +0 -0
  40. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/errors/error_comms.py +0 -0
  41. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/errors/error_manager.py +0 -0
  42. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/files/file_metadata.py +0 -0
  43. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ckan/ckan.py +0 -0
  44. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
  45. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ckan/datafile.py +0 -0
  46. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ckan/dataset.py +0 -0
  47. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/event.py +0 -0
  48. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/event_result.py +0 -0
  49. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
  50. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/job.py +0 -0
  51. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
  52. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
  53. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
  54. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
  55. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/run.py +0 -0
  56. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
  57. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/run_state.py +0 -0
  58. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/ol/sender.py +0 -0
  59. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
  60. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/metrics.py +0 -0
  61. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
  62. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
  63. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
  64. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
  65. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
  66. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
  67. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftpplus/rpc.py +0 -0
  68. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
  69. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
  70. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
  71. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/slack/event.py +0 -0
  72. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/slack/sender.py +0 -0
  73. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
  74. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
  75. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
  76. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/listener.py +0 -0
  77. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/metadata.py +0 -0
  78. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/paths/paths_listener.py +0 -0
  79. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/paths/paths_manager.py +0 -0
  80. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/paths/paths_metadata.py +0 -0
  81. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/registrar.py +0 -0
  82. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
  83. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
  84. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
  85. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
  86. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/readers/readers.py +0 -0
  87. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/result.py +0 -0
  88. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/result_file_reader.py +0 -0
  89. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/result_metadata.py +0 -0
  90. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/result_registrar.py +0 -0
  91. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/result_serializer.py +0 -0
  92. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/results_manager.py +0 -0
  93. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/results_metadata.py +0 -0
  94. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/results/results_registrar.py +0 -0
  95. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/run/run_listener_stdout.py +0 -0
  96. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/run/run_metadata.py +0 -0
  97. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/managers/run/run_registrar.py +0 -0
  98. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/__init__.py +0 -0
  99. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/__init__.py +0 -0
  100. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/args.py +0 -0
  101. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/args_helper.py +0 -0
  102. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/all.py +0 -0
  103. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/andf.py +0 -0
  104. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/any.py +0 -0
  105. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/between.py +0 -0
  106. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/empty.py +0 -0
  107. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/exists.py +0 -0
  108. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/inf.py +0 -0
  109. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/no.py +0 -0
  110. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/notf.py +0 -0
  111. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/orf.py +0 -0
  112. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/boolean/yes.py +0 -0
  113. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/count.py +0 -0
  114. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/count_bytes.py +0 -0
  115. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/count_headers.py +0 -0
  116. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/count_lines.py +0 -0
  117. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/count_scans.py +0 -0
  118. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/counter.py +0 -0
  119. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/every.py +0 -0
  120. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/has_matches.py +0 -0
  121. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/increment.py +0 -0
  122. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/tally.py +0 -0
  123. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/counting/total_lines.py +0 -0
  124. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/dates/now.py +0 -0
  125. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/function.py +0 -0
  126. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/function_factory.py +0 -0
  127. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/function_finder.py +0 -0
  128. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/function_focus.py +0 -0
  129. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/append.py +0 -0
  130. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/collect.py +0 -0
  131. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/empty_stack.py +0 -0
  132. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/end.py +0 -0
  133. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/header_name.py +0 -0
  134. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
  135. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/headers.py +0 -0
  136. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/insert.py +0 -0
  137. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/mismatch.py +0 -0
  138. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/replace.py +0 -0
  139. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/headers/reset_headers.py +0 -0
  140. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/advance.py +0 -0
  141. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/after_blank.py +0 -0
  142. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/dups.py +0 -0
  143. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/first.py +0 -0
  144. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/first_line.py +0 -0
  145. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/last.py +0 -0
  146. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/lines/stop.py +0 -0
  147. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/above.py +0 -0
  148. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/add.py +0 -0
  149. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/divide.py +0 -0
  150. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/equals.py +0 -0
  151. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/intf.py +0 -0
  152. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/mod.py +0 -0
  153. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/multiply.py +0 -0
  154. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/odd.py +0 -0
  155. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/round.py +0 -0
  156. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/subtotal.py +0 -0
  157. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/subtract.py +0 -0
  158. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/math/sum.py +0 -0
  159. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/misc/fingerprint.py +0 -0
  160. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/misc/importf.py +0 -0
  161. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/misc/random.py +0 -0
  162. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/print/jinjaf.py +0 -0
  163. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/print/print_line.py +0 -0
  164. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/print/print_queue.py +0 -0
  165. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/print/printf.py +0 -0
  166. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/print/table.py +0 -0
  167. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/stats/minf.py +0 -0
  168. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/stats/percent.py +0 -0
  169. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/stats/percent_unique.py +0 -0
  170. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/stats/stdev.py +0 -0
  171. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/alter.py +0 -0
  172. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/caps.py +0 -0
  173. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/concat.py +0 -0
  174. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/contains.py +0 -0
  175. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/length.py +0 -0
  176. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/lower.py +0 -0
  177. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/metaphone.py +0 -0
  178. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/regex.py +0 -0
  179. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/starts_with.py +0 -0
  180. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/strip.py +0 -0
  181. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/substring.py +0 -0
  182. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/strings/upper.py +0 -0
  183. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/testing/debug.py +0 -0
  184. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/__init__.py +0 -0
  185. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/boolean.py +0 -0
  186. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/datef.py +0 -0
  187. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/decimal.py +0 -0
  188. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/email.py +0 -0
  189. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/nonef.py +0 -0
  190. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/string.py +0 -0
  191. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/type.py +0 -0
  192. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/types/url.py +0 -0
  193. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/validity/fail.py +0 -0
  194. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/validity/failed.py +0 -0
  195. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/validity/line.py +0 -0
  196. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/variables/get.py +0 -0
  197. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/variables/pushpop.py +0 -0
  198. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/variables/put.py +0 -0
  199. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/variables/track.py +0 -0
  200. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/functions/variables/variables.py +0 -0
  201. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/lark_parser.py +0 -0
  202. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/lark_transformer.py +0 -0
  203. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/matcher.py +0 -0
  204. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/__init__.py +0 -0
  205. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/equality.py +0 -0
  206. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/expression.py +0 -0
  207. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/header.py +0 -0
  208. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/matchable.py +0 -0
  209. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/qualified.py +0 -0
  210. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/reference.py +0 -0
  211. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/term.py +0 -0
  212. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/productions/variable.py +0 -0
  213. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/util/exceptions.py +0 -0
  214. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/util/expression_encoder.py +0 -0
  215. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/util/expression_utility.py +0 -0
  216. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/util/lark_print_parser.py +0 -0
  217. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/util/print_parser.py +0 -0
  218. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/matching/util/runtime_data_collector.py +0 -0
  219. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/error_mode.py +0 -0
  220. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/explain_mode.py +0 -0
  221. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/files_mode.py +0 -0
  222. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/logic_mode.py +0 -0
  223. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/mode_controller.py +0 -0
  224. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/print_mode.py +0 -0
  225. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/return_mode.py +0 -0
  226. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/run_mode.py +0 -0
  227. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/source_mode.py +0 -0
  228. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/transfer_mode.py +0 -0
  229. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/unmatched_mode.py +0 -0
  230. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/modes/validation_mode.py +0 -0
  231. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/scanning/__init__.py +0 -0
  232. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/scanning/exceptions.py +0 -0
  233. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/scanning/parser.out +0 -0
  234. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/scanning/parsetab.py +0 -0
  235. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/scanning/scanner.py +0 -0
  236. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/scanning/scanning_lexer.py +0 -0
  237. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/box.py +0 -0
  238. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/cache.py +0 -0
  239. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/caser.py +0 -0
  240. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/class_loader.py +0 -0
  241. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/code.py +0 -0
  242. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/config.py +0 -0
  243. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/config_exception.py +0 -0
  244. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/exceptions.py +0 -0
  245. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/file_info.py +0 -0
  246. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/file_readers.py +0 -0
  247. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/file_writers.py +0 -0
  248. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/hasher.py +0 -0
  249. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/last_line_stats.py +0 -0
  250. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/line_counter.py +0 -0
  251. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/line_monitor.py +0 -0
  252. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/line_spooler.py +0 -0
  253. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/log_utility.py +0 -0
  254. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/metadata_parser.py +0 -0
  255. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/nos.py +0 -0
  256. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/pandas_data_reader.py +0 -0
  257. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/printer.py +0 -0
  258. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/reference_parser.py +0 -0
  259. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/s3/s3_data_reader.py +0 -0
  260. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/s3/s3_data_writer.py +0 -0
  261. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/s3/s3_fingerprinter.py +0 -0
  262. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/s3/s3_nos.py +0 -0
  263. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/s3/s3_utils.py +0 -0
  264. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
  265. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sftp/sftp_config.py +0 -0
  266. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sftp/sftp_data_writer.py +0 -0
  267. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
  268. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sftp/sftp_nos.py +0 -0
  269. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
  270. {csvpath-0.0.527 → csvpath-0.0.528}/csvpath/util/sqliter.py +0 -0
  271. {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.527
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.cacher.get_new_line_monitor(
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.cacher.get_original_headers(
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 .file_cacher import FileCacher
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
- self.cacher = FileCacher(csvpaths)
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
- from csvpath.util.file_readers import DataFileReader
6
- from csvpath.util.file_writers import DataFileWriter
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
+ """
@@ -8,6 +8,10 @@ from csvpath.util.nos import Nos
8
8
  from csvpath.managers.listener import Listener
9
9
  from csvpath.managers.metadata import Metadata
10
10
 
11
+ #
12
+ # TODO: not using intermediary
13
+ #
14
+
11
15
 
12
16
  class FilesListener(Listener): # Registrar,
13
17
  """@private
@@ -6,7 +6,7 @@ from csvpath.util.cache import Cache
6
6
  from csvpath.util.exceptions import InputException, FileException
7
7
 
8
8
 
9
- class FileCacher:
9
+ class LinesAndHeadersCacher:
10
10
  """@private"""
11
11
 
12
12
  def __init__(self, csvpaths=None):
@@ -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
- from csvpath.util.file_writers import DataFileWriter
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.527"
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