csvpath 0.0.558__tar.gz → 0.0.560__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 (353) hide show
  1. {csvpath-0.0.558 → csvpath-0.0.560}/PKG-INFO +1 -1
  2. {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-local-azure.ini +3 -3
  3. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/csvpath.py +2 -2
  4. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/csvpaths.py +29 -5
  5. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/result.py +6 -0
  6. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/result_metadata.py +3 -3
  7. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/results_manager.py +34 -2
  8. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/results_metadata.py +10 -0
  9. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/results_registrar.py +1 -0
  10. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/run/run_metadata.py +9 -0
  11. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/reference.py +1 -1
  12. {csvpath-0.0.558 → csvpath-0.0.560}/pyproject.toml +1 -1
  13. {csvpath-0.0.558 → csvpath-0.0.560}/LICENSE +0 -0
  14. {csvpath-0.0.558 → csvpath-0.0.560}/README.md +0 -0
  15. {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/config.ini +0 -0
  16. {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/function.imports +0 -0
  17. {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
  18. {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-local-gcs.ini +0 -0
  19. {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-local-s3.ini +0 -0
  20. {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-local-sftp.ini +0 -0
  21. {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-windows-azure.ini +0 -0
  22. {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-windows-gcs.ini +0 -0
  23. {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-windows-local.ini +0 -0
  24. {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-windows-s3.ini +0 -0
  25. {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/jenkins-windows-sftp.ini +0 -0
  26. {csvpath-0.0.558 → csvpath-0.0.560}/assets/config/local-localhost-sftp.ini +0 -0
  27. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
  28. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/azure.sh +0 -0
  29. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/gcs-pipeline.gopipeline.json +0 -0
  30. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/gcs.sh +0 -0
  31. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
  32. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/local.sh +0 -0
  33. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
  34. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/s3.sh +0 -0
  35. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
  36. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/mac/sftp.sh +0 -0
  37. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/azure.bat +0 -0
  38. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/gcs.bat +0 -0
  39. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/local.bat +0 -0
  40. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/s3.bat +0 -0
  41. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/sftp.bat +0 -0
  42. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
  43. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
  44. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
  45. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
  46. {csvpath-0.0.558 → csvpath-0.0.560}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
  47. {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
  48. {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
  49. {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
  50. {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
  51. {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
  52. {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
  53. {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sqlite/csvpath +0 -0
  54. {csvpath-0.0.558 → csvpath-0.0.560}/assets/integrations/sqlite/schema.sql +0 -0
  55. {csvpath-0.0.558 → csvpath-0.0.560}/config/config.ini +0 -0
  56. {csvpath-0.0.558 → csvpath-0.0.560}/config/env.json +0 -0
  57. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/__init__.py +0 -0
  58. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/__init__.py +0 -0
  59. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/asker.py +0 -0
  60. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/cli.py +0 -0
  61. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/const.py +0 -0
  62. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/debug_config.py +0 -0
  63. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/drill_down.py +0 -0
  64. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/function_describer.py +0 -0
  65. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/function_lister.py +0 -0
  66. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/cli/selecter.py +0 -0
  67. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/__init__.py +0 -0
  68. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/errors/error.py +0 -0
  69. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/errors/error_collector.py +0 -0
  70. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/errors/error_comms.py +0 -0
  71. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/errors/error_manager.py +0 -0
  72. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/files/file_manager.py +0 -0
  73. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/files/file_metadata.py +0 -0
  74. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/files/file_registrar.py +0 -0
  75. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/files/files_listener.py +0 -0
  76. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
  77. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ckan/ckan.py +0 -0
  78. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
  79. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ckan/datafile.py +0 -0
  80. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ckan/dataset.py +0 -0
  81. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/event.py +0 -0
  82. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/event_result.py +0 -0
  83. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
  84. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/job.py +0 -0
  85. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
  86. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
  87. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
  88. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
  89. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/run.py +0 -0
  90. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
  91. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/run_state.py +0 -0
  92. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/ol/sender.py +0 -0
  93. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
  94. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/metrics.py +0 -0
  95. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
  96. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
  97. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
  98. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
  99. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
  100. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
  101. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
  102. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
  103. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
  104. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftpplus/rpc.py +0 -0
  105. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
  106. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
  107. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
  108. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/slack/event.py +0 -0
  109. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/slack/sender.py +0 -0
  110. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/engine.py +0 -0
  111. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
  112. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
  113. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
  114. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
  115. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
  116. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/tables.py +0 -0
  117. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sql/updates.py +0 -0
  118. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
  119. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
  120. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
  121. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/webhook/webhook_listener.py +0 -0
  122. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/integrations/webhook/webhook_results_listener.py +0 -0
  123. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/listener.py +0 -0
  124. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/metadata.py +0 -0
  125. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/paths/paths_listener.py +0 -0
  126. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/paths/paths_manager.py +0 -0
  127. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/paths/paths_metadata.py +0 -0
  128. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/paths/paths_registrar.py +0 -0
  129. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/registrar.py +0 -0
  130. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
  131. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
  132. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
  133. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
  134. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/readers/readers.py +0 -0
  135. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/result_file_reader.py +0 -0
  136. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/result_registrar.py +0 -0
  137. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/results/result_serializer.py +0 -0
  138. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/run/run_listener_stdout.py +0 -0
  139. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/run/run_registrar.py +0 -0
  140. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/managers/test_listener.py +0 -0
  141. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/__init__.py +0 -0
  142. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/__init__.py +0 -0
  143. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/args.py +0 -0
  144. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/args_helper.py +0 -0
  145. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/all.py +0 -0
  146. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/andf.py +0 -0
  147. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/any.py +0 -0
  148. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/between.py +0 -0
  149. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/empty.py +0 -0
  150. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/exists.py +0 -0
  151. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/inf.py +0 -0
  152. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/no.py +0 -0
  153. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/notf.py +0 -0
  154. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/orf.py +0 -0
  155. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/boolean/yes.py +0 -0
  156. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/count.py +0 -0
  157. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/count_bytes.py +0 -0
  158. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/count_headers.py +0 -0
  159. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/count_lines.py +0 -0
  160. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/count_scans.py +0 -0
  161. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/counter.py +0 -0
  162. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/every.py +0 -0
  163. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/has_matches.py +0 -0
  164. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/increment.py +0 -0
  165. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/tally.py +0 -0
  166. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/counting/total_lines.py +0 -0
  167. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/dates/now.py +0 -0
  168. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/function.py +0 -0
  169. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/function_factory.py +0 -0
  170. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/function_finder.py +0 -0
  171. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/function_focus.py +0 -0
  172. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/append.py +0 -0
  173. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/collect.py +0 -0
  174. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/empty_stack.py +0 -0
  175. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/end.py +0 -0
  176. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/header_name.py +0 -0
  177. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
  178. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/headers.py +0 -0
  179. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/insert.py +0 -0
  180. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/mismatch.py +0 -0
  181. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/replace.py +0 -0
  182. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/headers/reset_headers.py +0 -0
  183. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/advance.py +0 -0
  184. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/after_blank.py +0 -0
  185. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/dups.py +0 -0
  186. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/first.py +0 -0
  187. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/first_line.py +0 -0
  188. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/last.py +0 -0
  189. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/lines/stop.py +0 -0
  190. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/above.py +0 -0
  191. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/add.py +0 -0
  192. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/divide.py +0 -0
  193. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/equals.py +0 -0
  194. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/intf.py +0 -0
  195. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/mod.py +0 -0
  196. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/multiply.py +0 -0
  197. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/odd.py +0 -0
  198. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/round.py +0 -0
  199. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/subtotal.py +0 -0
  200. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/subtract.py +0 -0
  201. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/math/sum.py +0 -0
  202. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/misc/fingerprint.py +0 -0
  203. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/misc/importf.py +0 -0
  204. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/misc/random.py +0 -0
  205. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/print/jinjaf.py +0 -0
  206. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/print/print_line.py +0 -0
  207. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/print/print_queue.py +0 -0
  208. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/print/printf.py +0 -0
  209. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/print/table.py +0 -0
  210. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/stats/minf.py +0 -0
  211. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/stats/nminmax.py +0 -0
  212. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/stats/percent.py +0 -0
  213. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/stats/percent_unique.py +0 -0
  214. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/stats/stdev.py +0 -0
  215. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/alter.py +0 -0
  216. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/caps.py +0 -0
  217. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/concat.py +0 -0
  218. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/contains.py +0 -0
  219. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/length.py +0 -0
  220. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/lower.py +0 -0
  221. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/metaphone.py +0 -0
  222. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/regex.py +0 -0
  223. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/starts_with.py +0 -0
  224. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/strip.py +0 -0
  225. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/substring.py +0 -0
  226. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/strings/upper.py +0 -0
  227. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/testing/debug.py +0 -0
  228. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/__init__.py +0 -0
  229. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/boolean.py +0 -0
  230. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/datatype.py +0 -0
  231. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/datef.py +0 -0
  232. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/decimal.py +0 -0
  233. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/email.py +0 -0
  234. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/nonef.py +0 -0
  235. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/string.py +0 -0
  236. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/type.py +0 -0
  237. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/types/url.py +0 -0
  238. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/validity/fail.py +0 -0
  239. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/validity/failed.py +0 -0
  240. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/validity/line.py +0 -0
  241. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/variables/get.py +0 -0
  242. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/variables/pushpop.py +0 -0
  243. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/variables/put.py +0 -0
  244. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/variables/track.py +0 -0
  245. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/functions/variables/variables.py +0 -0
  246. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/lark_parser.py +0 -0
  247. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/lark_transformer.py +0 -0
  248. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/matcher.py +0 -0
  249. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/__init__.py +0 -0
  250. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/equality.py +0 -0
  251. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/expression.py +0 -0
  252. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/header.py +0 -0
  253. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/matchable.py +0 -0
  254. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/qualified.py +0 -0
  255. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/term.py +0 -0
  256. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/productions/variable.py +0 -0
  257. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/util/exceptions.py +0 -0
  258. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/util/expression_encoder.py +0 -0
  259. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/util/expression_utility.py +0 -0
  260. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/util/lark_print_parser.py +0 -0
  261. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/util/print_parser.py +0 -0
  262. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/matching/util/runtime_data_collector.py +0 -0
  263. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/error_mode.py +0 -0
  264. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/explain_mode.py +0 -0
  265. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/files_mode.py +0 -0
  266. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/logic_mode.py +0 -0
  267. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/mode_controller.py +0 -0
  268. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/print_mode.py +0 -0
  269. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/return_mode.py +0 -0
  270. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/run_mode.py +0 -0
  271. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/source_mode.py +0 -0
  272. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/transfer_mode.py +0 -0
  273. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/unmatched_mode.py +0 -0
  274. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/modes/validation_mode.py +0 -0
  275. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/scanning/__init__.py +0 -0
  276. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/scanning/scanner2.py +0 -0
  277. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/scanning/scanner2_parser.py +0 -0
  278. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/scanning/scanner2_transformer.py +0 -0
  279. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/azure/azure_data_reader.py +0 -0
  280. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/azure/azure_data_writer.py +0 -0
  281. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/azure/azure_fingerprinter.py +0 -0
  282. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/azure/azure_nos.py +0 -0
  283. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/azure/azure_utils.py +0 -0
  284. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
  285. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/backend_check.py +0 -0
  286. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/box.py +0 -0
  287. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/cache.py +0 -0
  288. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/caser.py +0 -0
  289. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/class_loader.py +0 -0
  290. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/code.py +0 -0
  291. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/config.py +0 -0
  292. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/config_env.py +0 -0
  293. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/config_exception.py +0 -0
  294. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/date_util.py +0 -0
  295. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/exceptions.py +0 -0
  296. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/file_info.py +0 -0
  297. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/file_readers.py +0 -0
  298. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/file_writers.py +0 -0
  299. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/gcs/gcs_data_reader.py +0 -0
  300. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/gcs/gcs_data_writer.py +0 -0
  301. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
  302. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/gcs/gcs_nos.py +0 -0
  303. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/gcs/gcs_utils.py +0 -0
  304. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
  305. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/hasher.py +0 -0
  306. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/http/http_data_reader.py +0 -0
  307. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/intermediary.py +0 -0
  308. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/last_line_stats.py +0 -0
  309. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/line_counter.py +0 -0
  310. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/line_monitor.py +0 -0
  311. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/line_spooler.py +0 -0
  312. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/log_utility.py +0 -0
  313. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/metadata_parser.py +0 -0
  314. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/nos.py +0 -0
  315. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/pandas_data_reader.py +0 -0
  316. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/path_util.py +0 -0
  317. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/printer.py +0 -0
  318. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/files_reference_finder_2.py +0 -0
  319. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
  320. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/files_tools/range_finder.py +0 -0
  321. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/ref_utils.py +0 -0
  322. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/reference_exceptions.py +0 -0
  323. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/reference_grammar.py +0 -0
  324. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
  325. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/reference_parser.py +0 -0
  326. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/reference_results.py +0 -0
  327. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/reference_transformer.py +0 -0
  328. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_reference_finder_2.py +0 -0
  329. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/data_finder.py +0 -0
  330. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/date_filter.py +0 -0
  331. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/identity_finder.py +0 -0
  332. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/path_filter.py +0 -0
  333. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
  334. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/token_filters.py +0 -0
  335. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
  336. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/references/tools/date_completer.py +0 -0
  337. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/run_home_maker.py +0 -0
  338. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/s3/s3_data_reader.py +0 -0
  339. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/s3/s3_data_writer.py +0 -0
  340. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/s3/s3_fingerprinter.py +0 -0
  341. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/s3/s3_nos.py +0 -0
  342. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/s3/s3_utils.py +0 -0
  343. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
  344. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_config.py +0 -0
  345. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_data_reader.py +0 -0
  346. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_data_writer.py +0 -0
  347. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
  348. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_nos.py +0 -0
  349. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_walk.py +0 -0
  350. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
  351. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/sqliter.py +0 -0
  352. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/template_util.py +0 -0
  353. {csvpath-0.0.558 → csvpath-0.0.560}/csvpath/util/var_utility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: csvpath
3
- Version: 0.0.558
3
+ Version: 0.0.560
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
@@ -11,8 +11,8 @@ extensions = csvpath, csvpaths
11
11
  extensions = csv, tsv, dat, tab, psv, ssv
12
12
 
13
13
  [errors]
14
- csvpath = raise, collect, print
15
- csvpaths = raise, collect, print
14
+ csvpath = print,fail,collect
15
+ csvpaths = print,collect
16
16
  use_format = full
17
17
  pattern = {time}:{file}:{line}:{paths}:{instance}:{chain}: {message}
18
18
 
@@ -46,7 +46,7 @@ allow_http_files = True
46
46
  allow_local_files = True
47
47
 
48
48
  [listeners]
49
- groups =
49
+ groups = default
50
50
  sqlite.result = from csvpath.managers.integrations.sqlite.sqlite_result_listener import SqliteResultListener
51
51
  sqlite.results = from csvpath.managers.integrations.sqlite.sqlite_results_listener import SqliteResultsListener
52
52
  default.file = from csvpath.managers.files.files_listener import FilesListener
@@ -1338,7 +1338,7 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
1338
1338
  self.identity,
1339
1339
  )
1340
1340
  return
1341
- if self.scanner or self.scanner.filename:
1341
+ if self.scanner and self.scanner.filename:
1342
1342
  filename = self.scanner.filename
1343
1343
  #
1344
1344
  # there are times, e.g. when using Lambda, when it may be better to
@@ -1365,7 +1365,7 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
1365
1365
  f"Not using cache to get total lines and headers for {filename}"
1366
1366
  )
1367
1367
  lc = LineCounter(self)
1368
- lm, headers = lc.get_lines_and_headers(self.scanner.filename)
1368
+ lm, headers = lc.get_lines_and_headers(filename)
1369
1369
  self.line_monitor = lm
1370
1370
  self.headers = headers
1371
1371
 
@@ -200,7 +200,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
200
200
  """ @private """
201
201
 
202
202
  self.logger.info(
203
- "Initialized CsvPaths: {self} in thread: {threading.currentThread()}"
203
+ f"Initialized CsvPaths: {self} in thread: {threading.current_thread()}"
204
204
  )
205
205
 
206
206
  def _set_managers(self) -> None:
@@ -670,6 +670,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
670
670
  filename=filename,
671
671
  file=file,
672
672
  run_uuid=run_uuid,
673
+ method="collect_paths",
673
674
  )
674
675
  #
675
676
  #
@@ -686,6 +687,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
686
687
  run_time=self.current_run_time,
687
688
  run_dir=crt,
688
689
  run_uuid=run_uuid,
690
+ method="collect_paths",
689
691
  )
690
692
  # casting a broad net because if "raise" not in the error policy we
691
693
  # want to never fail during a run
@@ -813,7 +815,11 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
813
815
  # run starts here
814
816
  #
815
817
  self.run_metadata = self.results_manager.start_run(
816
- run_dir=crt, pathsname=pathsname, filename=filename, run_uuid=run_uuid
818
+ run_dir=crt,
819
+ pathsname=pathsname,
820
+ filename=filename,
821
+ run_uuid=run_uuid,
822
+ method="fast_forward_paths",
817
823
  )
818
824
  #
819
825
  #
@@ -830,6 +836,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
830
836
  run_time=self.current_run_time,
831
837
  run_dir=crt,
832
838
  run_uuid=run_uuid,
839
+ method="fast_forward_paths",
833
840
  )
834
841
  try:
835
842
  self._load_csvpath(
@@ -923,7 +930,11 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
923
930
  # run starts here
924
931
  #
925
932
  self.run_metadata = self.results_manager.start_run(
926
- run_dir=crt, pathsname=pathsname, filename=filename, run_uuid=run_uuid
933
+ run_dir=crt,
934
+ pathsname=pathsname,
935
+ filename=filename,
936
+ run_uuid=run_uuid,
937
+ method="next_paths",
927
938
  )
928
939
  #
929
940
  #
@@ -956,6 +967,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
956
967
  run_time=self.current_run_time,
957
968
  run_dir=crt,
958
969
  run_uuid=run_uuid,
970
+ method="next_paths",
959
971
  )
960
972
  if self._fail_all:
961
973
  self.logger.warning(
@@ -1043,6 +1055,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
1043
1055
  collect_when_not_matched=collect_when_not_matched,
1044
1056
  file=file,
1045
1057
  template=template,
1058
+ method="collect_by_line",
1046
1059
  ):
1047
1060
  # re: W0612: we need 'line' in order to do the iteration. we have to iterate.
1048
1061
  lines.append(line)
@@ -1091,6 +1104,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
1091
1104
  collect_when_not_matched=collect_when_not_matched,
1092
1105
  file=file,
1093
1106
  template=template,
1107
+ method="fast_forward_by_line",
1094
1108
  ):
1095
1109
  # re: W0612: we need 'line' in order to do the iteration. we have to iterate.
1096
1110
  pass
@@ -1117,6 +1131,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
1117
1131
  if_all_agree=False,
1118
1132
  collect_when_not_matched=False,
1119
1133
  template: str = None,
1134
+ method: str = None,
1120
1135
  ) -> List[Any]:
1121
1136
  #
1122
1137
  # we're doing a programmatic use when we use next_by_line() so we don't allow
@@ -1147,6 +1162,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
1147
1162
  collect_when_not_matched=False,
1148
1163
  template: str = None,
1149
1164
  file: str,
1165
+ method: str = "next_by_line",
1150
1166
  ) -> List[Any]:
1151
1167
  """Does a CsvPath.next() on filename where each row is considered
1152
1168
  by every named path before the next row starts.
@@ -1200,6 +1216,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
1200
1216
  filename=filename,
1201
1217
  pathsname=pathsname,
1202
1218
  crt=crt,
1219
+ method=method,
1203
1220
  )
1204
1221
  #
1205
1222
  # setting file into the csvpath is less obviously useful at CsvPaths
@@ -1370,7 +1387,9 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
1370
1387
  self.error_manager.handle_error(source=self, msg=f"{ex}")
1371
1388
  return csvpath_objects
1372
1389
 
1373
- def _prep_csvpath_results(self, *, csvpath_objects, filename, pathsname, crt: str):
1390
+ def _prep_csvpath_results(
1391
+ self, *, csvpath_objects, filename, pathsname, crt: str, method: str
1392
+ ):
1374
1393
  """@private"""
1375
1394
  #
1376
1395
  #
@@ -1380,7 +1399,11 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
1380
1399
  # run starts here
1381
1400
  #
1382
1401
  self.run_metadata = self.results_manager.start_run(
1383
- run_dir=crt, pathsname=pathsname, filename=filename, run_uuid=run_uuid
1402
+ run_dir=crt,
1403
+ pathsname=pathsname,
1404
+ filename=filename,
1405
+ run_uuid=run_uuid,
1406
+ method="next_paths",
1384
1407
  )
1385
1408
  #
1386
1409
  #
@@ -1400,6 +1423,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
1400
1423
  run_dir=crt,
1401
1424
  by_line=True,
1402
1425
  run_uuid=run_uuid,
1426
+ method=method,
1403
1427
  )
1404
1428
  csvpath[1] = result
1405
1429
  #
@@ -39,6 +39,7 @@ class Result(ErrorCollector, Printer, Listener): # pylint: disable=R0902
39
39
  runtime_data: dict = None,
40
40
  by_line: bool = False,
41
41
  run_uuid: UUID,
42
+ method: str = None,
42
43
  ):
43
44
  """@private"""
44
45
  ErrorCollector.__init__(self)
@@ -63,6 +64,7 @@ class Result(ErrorCollector, Printer, Listener): # pylint: disable=R0902
63
64
  self._actual_data_file = None
64
65
  self._origin_data_file = None
65
66
  self._by_line = by_line
67
+ self._method = method
66
68
  #
67
69
  # data_file_path is the path to data.csv of this result
68
70
  #
@@ -167,6 +169,10 @@ class Result(ErrorCollector, Printer, Listener): # pylint: disable=R0902
167
169
  def by_line(self) -> bool:
168
170
  return self._by_line
169
171
 
172
+ @property
173
+ def method(self) -> bool:
174
+ return self._method
175
+
170
176
  @property
171
177
  def source_mode_preceding(self) -> bool:
172
178
  if self._preceding is None:
@@ -58,10 +58,8 @@ class ResultMetadata(Metadata):
58
58
  self.lines_scanned: int = 0
59
59
  self.lines_total: int = 0
60
60
  self.lines_matched: int = 0
61
- #
62
- # why do we need this here? the run knows.
63
- #
64
61
  self.by_line: bool = False
62
+ self.method: str = None
65
63
  #
66
64
  # transfer tuples:
67
65
  # 1: filename, no extension needed: data | unmatched
@@ -79,6 +77,7 @@ ResultMetadata(
79
77
  {self.run_home},{self.instance_home},
80
78
  {self.input_data_file},
81
79
  {self.file_fingerprints},
80
+ {self.method},
82
81
  {self.valid},{self.completed},{self.files_expected},{self.error_count},
83
82
  {self.transfers}
84
83
  )""" # {self.file_count},
@@ -98,6 +97,7 @@ ResultMetadata(
98
97
  #
99
98
  #
100
99
  self.run = m.get("run")
100
+ self.method = m.get("method")
101
101
  self.run_uuid_string = m.get("run_uuid")
102
102
  self.run_home = m.get("run_home")
103
103
  self.instance_home = m.get("instance_home")
@@ -88,7 +88,14 @@ class ResultsManager: # pylint: disable=C0115
88
88
  # and return that uuid.
89
89
  #
90
90
  def start_run(
91
- self, *, run_dir, pathsname, filename, file: str = None, run_uuid: UUID
91
+ self,
92
+ *,
93
+ run_dir: str,
94
+ pathsname: str,
95
+ filename: str,
96
+ file: str = None,
97
+ run_uuid: UUID,
98
+ method: str,
92
99
  ) -> ResultsMetadata:
93
100
  """@private"""
94
101
  rr = ResultsRegistrar(
@@ -121,6 +128,7 @@ class ResultsManager: # pylint: disable=C0115
121
128
  mdata.named_paths_name = pathsname
122
129
  mdata.named_paths_uuid_string = np_uuid
123
130
  mdata.named_results_name = pathsname
131
+ mdata.method = method
124
132
  rr.register_start(mdata)
125
133
  return mdata
126
134
 
@@ -217,7 +225,7 @@ class ResultsManager: # pylint: disable=C0115
217
225
  # it doesn't separate printouts from different Result objects. a better way
218
226
  # to go might be to iterate the results and pull the printouts you need.
219
227
  #
220
- def get_printouts(self, name: str, printstream: str = "default") -> dict:
228
+ def get_printouts(self, name: str, printstream: str = "default") -> list[str]:
221
229
  results = self._get_results_list(name)
222
230
  ps = []
223
231
  for r in results:
@@ -323,6 +331,7 @@ class ResultsManager: # pylint: disable=C0115
323
331
  mdata.identity = result.identity_or_index
324
332
  mdata.named_paths_name = result.paths_name
325
333
  mdata.named_file_name = result.file_name
334
+ mdata.method = result.method
326
335
  rr = RunRegistrar(self.csvpaths)
327
336
  rr.register_start(mdata)
328
337
  #
@@ -331,6 +340,10 @@ class ResultsManager: # pylint: disable=C0115
331
340
  # we use the same UUID for both metadata updates because the
332
341
  # UUID represents the run, not the metadata object
333
342
  #
343
+ #
344
+ # collect_paths and collect_by_line expect a data.csv file, even if it has 0-bytes.
345
+ # we make sure of that here.
346
+ #
334
347
  mdata = ResultMetadata(self.csvpaths.config)
335
348
  mdata.uuid = result.uuid
336
349
  mdata.run_uuid = result.run_uuid
@@ -341,6 +354,18 @@ class ResultsManager: # pylint: disable=C0115
341
354
  mdata.run = result.run_dir[result.run_dir.rfind(sep) + 1 :]
342
355
  mdata.run_home = result.run_dir
343
356
  mdata.instance_home = result.instance_dir
357
+ mdata.method = result.method
358
+ #
359
+ # for the two CsvPaths methods that result in data.csv we want to make
360
+ # sure there is a data.csv, even if it ends up empty. we don't make this
361
+ # effort for unmatched.csv. perhaps we should but atm seems ok to pass.
362
+ #
363
+ if mdata.method in ["collect_paths", "collect_by_line"]:
364
+ path = Nos(mdata.instance_home).join("data.csv")
365
+ nos = Nos(path)
366
+ if not nos.exists():
367
+ with DataFileWriter(path=path) as file:
368
+ file.write("")
344
369
  mdata.instance_identity = result.identity_or_index
345
370
  mdata.input_data_file = result.file_name
346
371
  rs = ResultSerializer(self._csvpaths.config.archive_path)
@@ -534,6 +559,13 @@ class ResultsManager: # pylint: disable=C0115
534
559
  self.csvpaths.logger.error(msg)
535
560
  if self.csvpaths.ecoms.do_i_raise():
536
561
  raise InputException(msg)
562
+ return []
563
+ if len(results.files) > 1:
564
+ self.csvpaths.logger.warning(
565
+ "Referance found multiple runs (%s) when only one was expected and only one will be used: %s",
566
+ len(results.files),
567
+ name,
568
+ )
537
569
  path = results.files[0]
538
570
  run = path[len(self.csvpaths.config.archive_name) :]
539
571
  nos = Nos(path)
@@ -26,6 +26,15 @@ class ResultsMetadata(Metadata):
26
26
  self.all_expected_files: bool = None
27
27
  self.by_line: bool = False
28
28
  self._run_uuid: UUID = None
29
+ self._method: str = None
30
+
31
+ @property
32
+ def method(self) -> str:
33
+ return self._method
34
+
35
+ @method.setter
36
+ def method(self, m: str) -> None:
37
+ self._method = m
29
38
 
30
39
  @property
31
40
  def run_uuid(self) -> UUID:
@@ -101,3 +110,4 @@ class ResultsMetadata(Metadata):
101
110
  self.all_valid = m.get("all_valid")
102
111
  self.error_count = m.get("error_count")
103
112
  self.all_expected_files = m.get("all_expected_files")
113
+ self.method = m.get("method")
@@ -122,6 +122,7 @@ class ResultsRegistrar(Registrar, Listener):
122
122
  m["hostname"] = mdata.hostname
123
123
  m["username"] = mdata.username
124
124
  m["ip_address"] = mdata.ip_address
125
+ m["method"] = mdata.method
125
126
  mp = mdata.manifest_path
126
127
  m["manifest_path"] = mp
127
128
  with DataFileWriter(path=mp) as file:
@@ -11,6 +11,7 @@ class RunMetadata(Metadata):
11
11
  self.named_file_name: str = None
12
12
  self.identity: str = None
13
13
  self._run_uuid: UUID = None
14
+ self._method: str = None
14
15
 
15
16
  @property
16
17
  def run_uuid(self) -> UUID:
@@ -29,3 +30,11 @@ class RunMetadata(Metadata):
29
30
  @run_uuid_string.setter
30
31
  def run_uuid_string(self, u: str) -> None:
31
32
  self._run_uuid = UUID(u)
33
+
34
+ @property
35
+ def method(self) -> str:
36
+ return self._method
37
+
38
+ @method.setter
39
+ def method(self, m: str) -> None:
40
+ self._method = m
@@ -198,7 +198,7 @@ class Reference(Matchable):
198
198
  else:
199
199
  ret = v
200
200
  else:
201
- msg = f"Results exist but the {ref['name']} variable is unknown: {self.my_chain}"
201
+ msg = f"The {ref['name']} variable is unknown: {self.my_chain}"
202
202
  self.matcher.csvpath.error_manager.handle_error(source=self, msg=msg)
203
203
  if self.matcher.csvpath.do_i_raise():
204
204
  raise DataException(msg)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "csvpath"
3
- version = "0.0.558"
3
+ version = "0.0.560"
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