csvpath 0.0.612__tar.gz → 0.0.614__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 (412) hide show
  1. {csvpath-0.0.612 → csvpath-0.0.614}/PKG-INFO +1 -1
  2. csvpath-0.0.614/assets/config/jenkins-windows-sftp.ini +114 -0
  3. csvpath-0.0.614/assets/libs/release_candidate_maker-0.0.36.tar.gz +0 -0
  4. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/csvpaths.py +79 -17
  5. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/files/file_manager.py +27 -40
  6. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/files/files_listener.py +3 -4
  7. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/paths/paths_listener.py +4 -6
  8. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/paths/paths_manager.py +2 -1
  9. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/result_registrar.py +0 -1
  10. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/results_manager.py +13 -6
  11. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/results_metadata.py +17 -1
  12. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/results_registrar.py +32 -6
  13. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/nos.py +2 -0
  14. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/run_home_maker.py +2 -0
  15. {csvpath-0.0.612 → csvpath-0.0.614}/pyproject.toml +1 -1
  16. csvpath-0.0.612/assets/config/jenkins-windows-sftp.ini +0 -158
  17. {csvpath-0.0.612 → csvpath-0.0.614}/LICENSE +0 -0
  18. {csvpath-0.0.612 → csvpath-0.0.614}/README.md +0 -0
  19. {csvpath-0.0.612 → csvpath-0.0.614}/assets/.DS_Store +0 -0
  20. {csvpath-0.0.612 → csvpath-0.0.614}/assets/config/config.ini +0 -0
  21. {csvpath-0.0.612 → csvpath-0.0.614}/assets/config/extra-functions.imports +0 -0
  22. {csvpath-0.0.612 → csvpath-0.0.614}/assets/config/function.imports +0 -0
  23. {csvpath-0.0.612 → csvpath-0.0.614}/assets/config/jenkins-local-azure.ini +0 -0
  24. {csvpath-0.0.612 → csvpath-0.0.614}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
  25. {csvpath-0.0.612 → csvpath-0.0.614}/assets/config/jenkins-local-gcs.ini +0 -0
  26. {csvpath-0.0.612 → csvpath-0.0.614}/assets/config/jenkins-local-s3.ini +0 -0
  27. {csvpath-0.0.612 → csvpath-0.0.614}/assets/config/jenkins-local-sftp.ini +0 -0
  28. {csvpath-0.0.612 → csvpath-0.0.614}/assets/config/jenkins-windows-azure.ini +0 -0
  29. {csvpath-0.0.612 → csvpath-0.0.614}/assets/config/jenkins-windows-gcs.ini +0 -0
  30. {csvpath-0.0.612 → csvpath-0.0.614}/assets/config/jenkins-windows-local.ini +0 -0
  31. {csvpath-0.0.612 → csvpath-0.0.614}/assets/config/jenkins-windows-s3.ini +0 -0
  32. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/.DS_Store +0 -0
  33. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/Mac.goenvironment.json +0 -0
  34. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/Windows.goenvironment.json +0 -0
  35. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
  36. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/mac/azure.sh +0 -0
  37. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/mac/gcs.sh +0 -0
  38. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/mac/google-pipeline.gopipeline.json +0 -0
  39. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
  40. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/mac/local.sh +0 -0
  41. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
  42. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/mac/s3.sh +0 -0
  43. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
  44. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/mac/sftp.sh +0 -0
  45. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/windows/azure.bat +0 -0
  46. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/windows/gcs.bat +0 -0
  47. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/windows/local.bat +0 -0
  48. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/windows/s3.bat +0 -0
  49. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/windows/sftp.bat +0 -0
  50. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
  51. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
  52. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
  53. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
  54. {csvpath-0.0.612 → csvpath-0.0.614}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
  55. {csvpath-0.0.612 → csvpath-0.0.614}/assets/integrations/.DS_Store +0 -0
  56. {csvpath-0.0.612 → csvpath-0.0.614}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
  57. {csvpath-0.0.612 → csvpath-0.0.614}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
  58. {csvpath-0.0.612 → csvpath-0.0.614}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
  59. {csvpath-0.0.612 → csvpath-0.0.614}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
  60. {csvpath-0.0.612 → csvpath-0.0.614}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
  61. {csvpath-0.0.612 → csvpath-0.0.614}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
  62. {csvpath-0.0.612 → csvpath-0.0.614}/assets/integrations/sqlite/csvpath +0 -0
  63. {csvpath-0.0.612 → csvpath-0.0.614}/assets/integrations/sqlite/schema.sql +0 -0
  64. {csvpath-0.0.612 → csvpath-0.0.614}/assets/libs/release_candidate_maker-0.0.25-py3-none-any.whl +0 -0
  65. {csvpath-0.0.612 → csvpath-0.0.614}/assets/libs/release_candidate_maker-0.0.27-py3-none-any.whl +0 -0
  66. {csvpath-0.0.612 → csvpath-0.0.614}/assets/libs/release_candidate_maker-0.0.28-py3-none-any.whl +0 -0
  67. {csvpath-0.0.612 → csvpath-0.0.614}/assets/libs/release_candidate_maker-0.0.29-py3-none-any.whl +0 -0
  68. {csvpath-0.0.612 → csvpath-0.0.614}/assets/libs/release_candidate_maker-0.0.30.tar.gz +0 -0
  69. {csvpath-0.0.612 → csvpath-0.0.614}/assets/libs/release_candidate_maker-0.0.31.tar.gz +0 -0
  70. {csvpath-0.0.612 → csvpath-0.0.614}/assets/libs/release_candidate_maker-0.0.33.tar.gz +0 -0
  71. {csvpath-0.0.612 → csvpath-0.0.614}/assets/libs/release_candidate_maker-0.0.34.tar.gz +0 -0
  72. {csvpath-0.0.612 → csvpath-0.0.614}/assets/libs/release_candidate_maker-0.0.35.tar.gz +0 -0
  73. {csvpath-0.0.612 → csvpath-0.0.614}/config/config.ini +0 -0
  74. {csvpath-0.0.612 → csvpath-0.0.614}/config/env.json +0 -0
  75. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/__init__.py +0 -0
  76. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/cli/__init__.py +0 -0
  77. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/cli/asker.py +0 -0
  78. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/cli/cli.py +0 -0
  79. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/cli/const.py +0 -0
  80. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/cli/debug_config.py +0 -0
  81. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/cli/drill_down.py +0 -0
  82. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/cli/function_describer.py +0 -0
  83. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/cli/function_lister.py +0 -0
  84. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/cli/selecter.py +0 -0
  85. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/csvpath.py +0 -0
  86. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/__init__.py +0 -0
  87. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/errors/error.py +0 -0
  88. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/errors/error_collector.py +0 -0
  89. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/errors/error_comms.py +0 -0
  90. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/errors/error_manager.py +0 -0
  91. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/files/file_activator.py +0 -0
  92. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/files/file_describer.py +0 -0
  93. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/files/file_descriptor.py +0 -0
  94. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/files/file_metadata.py +0 -0
  95. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/files/file_names_rules.py +0 -0
  96. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/files/file_registrar.py +0 -0
  97. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/files/files_activation_listener.py +0 -0
  98. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
  99. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ckan/ckan.py +0 -0
  100. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
  101. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ckan/datafile.py +0 -0
  102. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ckan/dataset.py +0 -0
  103. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ol/event.py +0 -0
  104. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ol/event_result.py +0 -0
  105. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
  106. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ol/job.py +0 -0
  107. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
  108. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
  109. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
  110. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
  111. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ol/run.py +0 -0
  112. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
  113. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ol/run_state.py +0 -0
  114. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/ol/sender.py +0 -0
  115. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
  116. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/otlp/metrics.py +0 -0
  117. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
  118. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
  119. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
  120. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
  121. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
  122. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
  123. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
  124. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
  125. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/slack/event.py +0 -0
  126. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/slack/sender.py +0 -0
  127. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/sql/engine.py +0 -0
  128. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
  129. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
  130. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
  131. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
  132. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
  133. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/sql/tables.py +0 -0
  134. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/sql/updates.py +0 -0
  135. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
  136. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
  137. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
  138. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/webhook/webhook_listener.py +0 -0
  139. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/integrations/webhook/webhook_results_listener.py +0 -0
  140. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/listener.py +0 -0
  141. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/metadata.py +0 -0
  142. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/paths/paths_describer.py +0 -0
  143. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/paths/paths_descriptor.py +0 -0
  144. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/paths/paths_metadata.py +0 -0
  145. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/paths/paths_registrar.py +0 -0
  146. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/registrar.py +0 -0
  147. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
  148. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
  149. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
  150. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
  151. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/readers/readers.py +0 -0
  152. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/result.py +0 -0
  153. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/result_file_reader.py +0 -0
  154. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/result_metadata.py +0 -0
  155. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/result_serializer.py +0 -0
  156. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/results/transfers_manager.py +0 -0
  157. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/run/run_listener_stdout.py +0 -0
  158. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/run/run_metadata.py +0 -0
  159. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/run/run_registrar.py +0 -0
  160. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/server_config.py +0 -0
  161. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/managers/test_listener.py +0 -0
  162. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/__init__.py +0 -0
  163. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/__init__.py +0 -0
  164. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/args.py +0 -0
  165. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/args_helper.py +0 -0
  166. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/boolean/all.py +0 -0
  167. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/boolean/andf.py +0 -0
  168. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/boolean/any.py +0 -0
  169. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/boolean/between.py +0 -0
  170. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/boolean/empty.py +0 -0
  171. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/boolean/exists.py +0 -0
  172. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/boolean/inf.py +0 -0
  173. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/boolean/no.py +0 -0
  174. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/boolean/notf.py +0 -0
  175. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/boolean/orf.py +0 -0
  176. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/boolean/yes.py +0 -0
  177. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/counting/count.py +0 -0
  178. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/counting/count_bytes.py +0 -0
  179. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/counting/count_headers.py +0 -0
  180. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/counting/count_lines.py +0 -0
  181. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/counting/count_scans.py +0 -0
  182. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/counting/counter.py +0 -0
  183. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/counting/every.py +0 -0
  184. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/counting/has_matches.py +0 -0
  185. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/counting/increment.py +0 -0
  186. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/counting/tally.py +0 -0
  187. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/counting/total_lines.py +0 -0
  188. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/dates/now.py +0 -0
  189. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/dates/part.py +0 -0
  190. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/dates/roll.py +0 -0
  191. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/function.py +0 -0
  192. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/function_factory.py +0 -0
  193. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/function_finder.py +0 -0
  194. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/function_focus.py +0 -0
  195. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/append.py +0 -0
  196. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/collect.py +0 -0
  197. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/empty_stack.py +0 -0
  198. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/end.py +0 -0
  199. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/header_name.py +0 -0
  200. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
  201. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/headers.py +0 -0
  202. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/headers_stack.py +0 -0
  203. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/insert.py +0 -0
  204. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/line_before.py +0 -0
  205. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/mismatch.py +0 -0
  206. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/remove.py +0 -0
  207. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/rename.py +0 -0
  208. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/replace.py +0 -0
  209. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/headers/reset_headers.py +0 -0
  210. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/json/jsonpath.py +0 -0
  211. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/lines/advance.py +0 -0
  212. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/lines/after_blank.py +0 -0
  213. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/lines/dups.py +0 -0
  214. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/lines/first.py +0 -0
  215. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/lines/first_line.py +0 -0
  216. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/lines/last.py +0 -0
  217. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/lines/stop.py +0 -0
  218. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/math/above.py +0 -0
  219. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/math/add.py +0 -0
  220. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/math/divide.py +0 -0
  221. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/math/equals.py +0 -0
  222. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/math/intf.py +0 -0
  223. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/math/mod.py +0 -0
  224. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/math/multiply.py +0 -0
  225. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/math/odd.py +0 -0
  226. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/math/round.py +0 -0
  227. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/math/subtotal.py +0 -0
  228. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/math/subtract.py +0 -0
  229. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/math/sum.py +0 -0
  230. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/misc/env.py +0 -0
  231. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/misc/fingerprint.py +0 -0
  232. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/misc/importf.py +0 -0
  233. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/misc/metadata.py +0 -0
  234. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/misc/parquet.py +0 -0
  235. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/misc/random.py +0 -0
  236. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/misc/runtime.py +0 -0
  237. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/print/jinjaf.py +0 -0
  238. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/print/print_line.py +0 -0
  239. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/print/print_queue.py +0 -0
  240. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/print/printf.py +0 -0
  241. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/print/table.py +0 -0
  242. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/sql/select.py +0 -0
  243. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/sql/sql_in.py +0 -0
  244. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/stats/minf.py +0 -0
  245. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/stats/nminmax.py +0 -0
  246. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/stats/percent.py +0 -0
  247. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/stats/percent_unique.py +0 -0
  248. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/stats/stdev.py +0 -0
  249. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/strings/alter.py +0 -0
  250. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/strings/caps.py +0 -0
  251. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/strings/concat.py +0 -0
  252. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/strings/contains.py +0 -0
  253. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/strings/format.py +0 -0
  254. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/strings/length.py +0 -0
  255. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/strings/lower.py +0 -0
  256. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/strings/metaphone.py +0 -0
  257. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/strings/regex.py +0 -0
  258. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/strings/starts_with.py +0 -0
  259. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/strings/strip.py +0 -0
  260. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/strings/substring.py +0 -0
  261. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/strings/upper.py +0 -0
  262. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/testing/debug.py +0 -0
  263. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/types/__init__.py +0 -0
  264. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/types/blank.py +0 -0
  265. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/types/boolean.py +0 -0
  266. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/types/datatype.py +0 -0
  267. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/types/datef.py +0 -0
  268. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/types/decimal.py +0 -0
  269. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/types/email.py +0 -0
  270. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/types/nonef.py +0 -0
  271. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/types/string.py +0 -0
  272. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/types/type.py +0 -0
  273. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/types/url.py +0 -0
  274. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/types/uuid.py +0 -0
  275. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/types/wildcard.py +0 -0
  276. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/validity/fail.py +0 -0
  277. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/validity/failed.py +0 -0
  278. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/validity/line.py +0 -0
  279. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/validity/matches.py +0 -0
  280. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/validity/percent_matching.py +0 -0
  281. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/variables/clear.py +0 -0
  282. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/variables/get.py +0 -0
  283. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/variables/index_of.py +0 -0
  284. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/variables/pushpop.py +0 -0
  285. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/variables/put.py +0 -0
  286. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/variables/slice.py +0 -0
  287. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/variables/sort.py +0 -0
  288. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/variables/track.py +0 -0
  289. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/variables/variables.py +0 -0
  290. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/functions/xml/xpath.py +0 -0
  291. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/lark_parser.py +0 -0
  292. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/lark_transformer.py +0 -0
  293. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/matcher.py +0 -0
  294. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/productions/__init__.py +0 -0
  295. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/productions/equality.py +0 -0
  296. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/productions/expression.py +0 -0
  297. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/productions/header.py +0 -0
  298. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/productions/matchable.py +0 -0
  299. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/productions/qualified.py +0 -0
  300. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/productions/reference.py +0 -0
  301. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/productions/term.py +0 -0
  302. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/productions/variable.py +0 -0
  303. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/util/exceptions.py +0 -0
  304. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/util/expression_encoder.py +0 -0
  305. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/util/expression_utility.py +0 -0
  306. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/util/lark_print_parser.py +0 -0
  307. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/util/parquet_utility.py +0 -0
  308. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/util/print_parser.py +0 -0
  309. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/matching/util/runtime_data_collector.py +0 -0
  310. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/modes/error_mode.py +0 -0
  311. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/modes/explain_mode.py +0 -0
  312. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/modes/files_mode.py +0 -0
  313. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/modes/logic_mode.py +0 -0
  314. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/modes/mode_controller.py +0 -0
  315. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/modes/print_mode.py +0 -0
  316. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/modes/return_mode.py +0 -0
  317. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/modes/run_mode.py +0 -0
  318. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/modes/source_mode.py +0 -0
  319. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/modes/transfer_mode.py +0 -0
  320. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/modes/unmatched_mode.py +0 -0
  321. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/modes/validation_mode.py +0 -0
  322. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/scanning/__init__.py +0 -0
  323. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/scanning/scanner2.py +0 -0
  324. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/scanning/scanner2_parser.py +0 -0
  325. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/scanning/scanner2_transformer.py +0 -0
  326. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/azure/azure_data_reader.py +0 -0
  327. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/azure/azure_data_writer.py +0 -0
  328. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/azure/azure_fingerprinter.py +0 -0
  329. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/azure/azure_json_data_reader.py +0 -0
  330. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/azure/azure_nos.py +0 -0
  331. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/azure/azure_timing_policy.py +0 -0
  332. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/azure/azure_utils.py +0 -0
  333. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
  334. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/backend_check.py +0 -0
  335. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/box.py +0 -0
  336. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/cache.py +0 -0
  337. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/caser.py +0 -0
  338. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/class_loader.py +0 -0
  339. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/code.py +0 -0
  340. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/config.py +0 -0
  341. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/config_env.py +0 -0
  342. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/config_exception.py +0 -0
  343. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/date_util.py +0 -0
  344. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/exceptions.py +0 -0
  345. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/file_info.py +0 -0
  346. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/file_readers.py +0 -0
  347. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/file_utility.py +0 -0
  348. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/file_writers.py +0 -0
  349. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/gcs/gcs_data_reader.py +0 -0
  350. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/gcs/gcs_data_writer.py +0 -0
  351. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
  352. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/gcs/gcs_json_data_reader.py +0 -0
  353. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/gcs/gcs_nos.py +0 -0
  354. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/gcs/gcs_utils.py +0 -0
  355. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
  356. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/hasher.py +0 -0
  357. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/http/http_data_reader.py +0 -0
  358. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/intermediary.py +0 -0
  359. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/json/json_data_reader.py +0 -0
  360. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/json/json_reader_helper.py +0 -0
  361. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/last_line_stats.py +0 -0
  362. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/line_counter.py +0 -0
  363. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/line_monitor.py +0 -0
  364. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/line_spooler.py +0 -0
  365. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/log_utility.py +0 -0
  366. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/metadata_parser.py +0 -0
  367. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/pandas_data_reader.py +0 -0
  368. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/path_util.py +0 -0
  369. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/printer.py +0 -0
  370. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/py_file_utility.py +0 -0
  371. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/files_reference_finder_2.py +0 -0
  372. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
  373. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/files_tools/range_finder.py +0 -0
  374. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/ref_utils.py +0 -0
  375. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/reference_exceptions.py +0 -0
  376. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/reference_grammar.py +0 -0
  377. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
  378. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/reference_parser.py +0 -0
  379. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/reference_results.py +0 -0
  380. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/reference_transformer.py +0 -0
  381. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/results_reference_finder_2.py +0 -0
  382. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/results_tools/data_finder.py +0 -0
  383. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/results_tools/date_filter.py +0 -0
  384. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/results_tools/identity_finder.py +0 -0
  385. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/results_tools/path_filter.py +0 -0
  386. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
  387. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/results_tools/token_filters.py +0 -0
  388. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
  389. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/references/tools/date_completer.py +0 -0
  390. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/referrer_printer.py +0 -0
  391. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/s3/s3_data_reader.py +0 -0
  392. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/s3/s3_data_writer.py +0 -0
  393. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/s3/s3_fingerprinter.py +0 -0
  394. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/s3/s3_json_data_reader.py +0 -0
  395. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/s3/s3_nos.py +0 -0
  396. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/s3/s3_utils.py +0 -0
  397. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
  398. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/sftp/sftp_config.py +0 -0
  399. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/sftp/sftp_data_reader.py +0 -0
  400. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/sftp/sftp_data_writer.py +0 -0
  401. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
  402. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/sftp/sftp_json_data_reader.py +0 -0
  403. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/sftp/sftp_nos.py +0 -0
  404. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/sftp/sftp_server_creds.py +0 -0
  405. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/sftp/sftp_walk.py +0 -0
  406. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
  407. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/sqliter.py +0 -0
  408. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/stopwatch.py +0 -0
  409. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/template_util.py +0 -0
  410. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/var_utility.py +0 -0
  411. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/xlsx/xlsx_data_reader.py +0 -0
  412. {csvpath-0.0.612 → csvpath-0.0.614}/csvpath/util/xlsx/xlsx_reader_helper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: csvpath
3
- Version: 0.0.612
3
+ Version: 0.0.614
4
4
  Summary: CsvPath Framework is a data preboarding automation library for receiving, validating, and tracking CSV, Excel, JSONL and other tabular data files before they can corrupt downstream data consumers.
5
5
  License-File: LICENSE
6
6
  Author: David Kershaw
@@ -0,0 +1,114 @@
1
+ [testing]
2
+ azure.skip = yes
3
+ gcs.skip = yes
4
+ s3.skip = yes
5
+ sftp.skip = no
6
+
7
+ [extensions]
8
+ csvpath_files = csvpath, csvpaths
9
+ csv_files = csv, tsv, dat, tab, psv, ssv
10
+
11
+ [errors]
12
+ csvpath = raise, collect, print
13
+ csvpaths = raise, collect, print
14
+ use_format = full
15
+ pattern = {time}:{file}:{line}:{paths}:{instance}:{chain}: {message}
16
+
17
+ [logging]
18
+ csvpath = info
19
+ csvpaths = debug
20
+ log_file = logs\csvpath.log
21
+ log_files_to_keep = 100
22
+ log_file_size = 52428800
23
+ handler = file
24
+
25
+ [config]
26
+ path = assets\config\jenkins-windows-sftp.ini
27
+ allow_var_sub = True
28
+ var_sub_source = env
29
+
30
+ [cache]
31
+ path = cache
32
+ use_cache = no
33
+
34
+ [functions]
35
+ imports =
36
+
37
+ [results]
38
+ archive = tmp\sftp\archive
39
+ transfers = tmp\sftp\transfers
40
+
41
+ [inputs]
42
+ files = sftp://{SFTP_SERVER}:{SFTP_PORT}/windows/inputs/named_files
43
+ csvpaths = tmp\sftp\inputs\named_paths
44
+ on_unmatched_file_fingerprints = halt
45
+ allow_http_files = True
46
+ allow_local_files = True
47
+
48
+ [listeners]
49
+ groups = default
50
+ sqlite.result = from csvpath.managers.integrations.sqlite.sqlite_result_listener import SqliteResultListener
51
+ sqlite.results = from csvpath.managers.integrations.sqlite.sqlite_results_listener import SqliteResultsListener
52
+ default.file = from csvpath.managers.files.files_listener import FilesListener
53
+ default.paths = from csvpath.managers.paths.paths_listener import PathsListener
54
+ otlp.result = from csvpath.managers.integrations.otlp.otlp_result_listener import OpenTelemetryResultListener
55
+ otlp.results = from csvpath.managers.integrations.otlp.otlp_results_listener import OpenTelemetryResultsListener
56
+ otlp.errors = from csvpath.managers.integrations.otlp.otlp_error_listener import OpenTelemetryErrorListener
57
+ sftpplus.paths = from csvpath.managers.integrations.sftpplus.sftpplus_listener import SftpPlusListener
58
+ sftp.results = from csvpath.managers.integrations.sftp.sftp_listener import SftpListener
59
+ ckan.results = from csvpath.managers.integrations.ckan.ckan_listener import CkanListener
60
+ openlineage.file = from csvpath.managers.integrations.ol.file_listener_ol import OpenLineageFileListener
61
+ openlineage.paths = from csvpath.managers.integrations.ol.paths_listener_ol import OpenLineagePathsListener
62
+ openlineage.result = from csvpath.managers.integrations.ol.result_listener_ol import OpenLineageResultListener
63
+ openlineage.results = from csvpath.managers.integrations.ol.results_listener_ol import OpenLineageResultsListener
64
+ slack.file = from csvpath.managers.integrations.slack.sender import SlackSender
65
+ slack.paths = from csvpath.managers.integrations.slack.sender import SlackSender
66
+ slack.result = from csvpath.managers.integrations.slack.sender import SlackSender
67
+ slack.results = from csvpath.managers.integrations.slack.sender import SlackSender
68
+ scripts.results = from csvpath.managers.integrations.scripts.scripts_results_listener import ScriptsResultsListener
69
+
70
+ [otlp]
71
+
72
+ [aws]
73
+
74
+ [azure]
75
+
76
+ [gcs]
77
+
78
+ [sftp]
79
+ server = SFTP_SERVER
80
+ port = SFTP_PORT
81
+ username = python
82
+ password = hangzhou
83
+
84
+ [sqlite]
85
+ db = archive\csvpath.db
86
+
87
+ [sftpplus]
88
+ mailbox_user = MAILBOX_USER
89
+ mailbox_password = MAILBOX_PASSWORD
90
+ server = SFTPPLUS_SERVER
91
+ port = SFTPPLUS_PORT
92
+ admin_username = SFTPPLUS_ADMIN_USERNAME
93
+ admin_password = SFTPPLUS_ADMIN_PASSWORD
94
+ api_url = https://. . . :10020/json
95
+ scripts_dir =
96
+ execute_timeout = 300
97
+
98
+ [ckan]
99
+ server = http://. . . :80
100
+ api_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI3akJwc1ZuSkVrZm1aNnBtVTJfTW5CNlJXZ211YjdOOHVXZ1l1cUFDa0Q4IiwiaWF0IjoxNzM0NzE4NDQ3fQ.QXWXoJoSxVES4NwXYBteYUD7enX9D5T2htmETLGFzrs
101
+
102
+ [scripts]
103
+ run_scripts = yes
104
+
105
+ [openlineage]
106
+ base_url = http://. . . :5000
107
+ endpoint = api/v1/lineage
108
+ api_key = "none"
109
+ timeout = 5
110
+ verify = False
111
+
112
+ [slack]
113
+ webhook_url =
114
+
@@ -8,7 +8,7 @@ import threading
8
8
 
9
9
  from uuid import uuid4
10
10
  from abc import ABC, abstractmethod
11
- from typing import List, Any, NewType
11
+ from typing import Any, NewType, Optional
12
12
  from datetime import datetime
13
13
  from .managers.errors.error import Error
14
14
  from .managers.errors.error_comms import ErrorCommunications
@@ -459,7 +459,7 @@ Cache: {cache}
459
459
  self._advance_all = lines
460
460
 
461
461
  @property
462
- def errors(self) -> List[Error]: # pylint: disable=C0116
462
+ def errors(self) -> list[Error]: # pylint: disable=C0116
463
463
  """@private
464
464
  generally you should be looking at results_manager or error_manager for errors.
465
465
  """
@@ -758,7 +758,12 @@ Cache: {cache}
758
758
  # case data.csv is the default.
759
759
  #
760
760
  def collect_paths(
761
- self, *, pathsname: str, filename: str, template: str = None
761
+ self,
762
+ *,
763
+ pathsname: str,
764
+ filename: str,
765
+ template: str = None,
766
+ extra_data: Optional[dict[str, str]] = None,
762
767
  ) -> Reference:
763
768
  """
764
769
  Sequentially does a CsvPath.collect() on filename for every named-path in the
@@ -783,11 +788,19 @@ Cache: {cache}
783
788
  if isinstance(files, list):
784
789
  for file in files:
785
790
  ref = self._collect_paths(
786
- pathsname=pathsname, filename=filename, template=template, file=file
791
+ pathsname=pathsname,
792
+ filename=filename,
793
+ template=template,
794
+ file=file,
795
+ extra_data=extra_data,
787
796
  )
788
797
  else:
789
798
  ref = self._collect_paths(
790
- pathsname=pathsname, filename=filename, template=template, file=files
799
+ pathsname=pathsname,
800
+ filename=filename,
801
+ template=template,
802
+ file=files,
803
+ extra_data=extra_data,
791
804
  )
792
805
  #
793
806
  # absolute reference to the results
@@ -795,7 +808,13 @@ Cache: {cache}
795
808
  return ref
796
809
 
797
810
  def _collect_paths(
798
- self, *, pathsname: str, file: str, filename: str, template: str = None
811
+ self,
812
+ *,
813
+ pathsname: str,
814
+ file: str,
815
+ filename: str,
816
+ template: str = None,
817
+ extra_data: Optional[dict[str, str]] = None,
799
818
  ) -> Reference:
800
819
  #
801
820
  # if template is None we need to go find any template that was given when
@@ -828,7 +847,6 @@ Cache: {cache}
828
847
 
829
848
  results = []
830
849
  #
831
- # exp
832
850
  # adding uuid for the run as a whole
833
851
  run_uuid = uuid4()
834
852
  #
@@ -841,6 +859,7 @@ Cache: {cache}
841
859
  file=file,
842
860
  run_uuid=run_uuid,
843
861
  method="collect_paths",
862
+ extra_data=extra_data,
844
863
  )
845
864
  #
846
865
  #
@@ -930,7 +949,12 @@ Cache: {cache}
930
949
  return ret
931
950
 
932
951
  def fast_forward_paths(
933
- self, *, pathsname: str, filename: str, template: str = None
952
+ self,
953
+ *,
954
+ pathsname: str,
955
+ filename: str,
956
+ template: str = None,
957
+ extra_data: Optional[dict[str, str]] = None,
934
958
  ) -> Reference:
935
959
  """
936
960
  Sequentially does a CsvPath.fast_forward() on filename for every named path. No matches are collected.
@@ -942,16 +966,30 @@ Cache: {cache}
942
966
  if isinstance(files, list):
943
967
  for file in files:
944
968
  ref = self._fast_forward_paths(
945
- pathsname=pathsname, filename=filename, template=template, file=file
969
+ pathsname=pathsname,
970
+ filename=filename,
971
+ template=template,
972
+ file=file,
973
+ extra_data=extra_data,
946
974
  )
947
975
  else:
948
976
  ref = self._fast_forward_paths(
949
- pathsname=pathsname, filename=filename, template=template, file=files
977
+ pathsname=pathsname,
978
+ filename=filename,
979
+ template=template,
980
+ file=files,
981
+ extra_data=extra_data,
950
982
  )
951
983
  return ref
952
984
 
953
985
  def _fast_forward_paths(
954
- self, *, pathsname: str, file: str, filename: str, template: str = None
986
+ self,
987
+ *,
988
+ pathsname: str,
989
+ file: str,
990
+ filename: str,
991
+ template: str = None,
992
+ extra_data: Optional[dict[str, str]] = None,
955
993
  ) -> Reference:
956
994
  """Sequentially does a CsvPath.fast_forward() on filename for every named path. No matches are collected."""
957
995
  paths = self._get_named_paths(pathsname)
@@ -991,6 +1029,7 @@ Cache: {cache}
991
1029
  filename=filename,
992
1030
  run_uuid=run_uuid,
993
1031
  method="fast_forward_paths",
1032
+ extra_data=extra_data,
994
1033
  )
995
1034
  #
996
1035
  #
@@ -1066,7 +1105,8 @@ Cache: {cache}
1066
1105
  filename: str,
1067
1106
  collect: bool = False,
1068
1107
  template: str = None,
1069
- ) -> List[Any]: # pylint: disable=R0914
1108
+ extra_data: Optional[dict[str, str]] = None,
1109
+ ) -> list[Any]: # pylint: disable=R0914
1070
1110
  """
1071
1111
  Does a CsvPath.next() on filename for every line against every named path in sequence
1072
1112
  """
@@ -1107,6 +1147,7 @@ Cache: {cache}
1107
1147
  filename=filename,
1108
1148
  run_uuid=run_uuid,
1109
1149
  method="next_paths",
1150
+ extra_data=extra_data,
1110
1151
  )
1111
1152
  #
1112
1153
  #
@@ -1200,6 +1241,7 @@ Cache: {cache}
1200
1241
  collect_when_not_matched=False,
1201
1242
  template: str = None,
1202
1243
  lines: list = None,
1244
+ extra_data: Optional[dict[str, str]] = None,
1203
1245
  ) -> Reference:
1204
1246
  """
1205
1247
  Does a CsvPath.collect() on filename where each row is considered by
@@ -1228,6 +1270,7 @@ Cache: {cache}
1228
1270
  file=file,
1229
1271
  template=template,
1230
1272
  method="collect_by_line",
1273
+ extra_data=extra_data,
1231
1274
  ):
1232
1275
  # re: W0612: we need 'line' in order to do the iteration. we have to iterate.
1233
1276
  lines.append(line)
@@ -1254,6 +1297,7 @@ Cache: {cache}
1254
1297
  if_all_agree=False,
1255
1298
  collect_when_not_matched=False,
1256
1299
  template: str = None,
1300
+ extra_data: Optional[dict[str, str]] = None,
1257
1301
  ) -> Reference:
1258
1302
  """
1259
1303
  Does a CsvPath.fast_forward() on filename where each row is considered by
@@ -1279,6 +1323,7 @@ Cache: {cache}
1279
1323
  file=file,
1280
1324
  template=template,
1281
1325
  method="fast_forward_by_line",
1326
+ extra_data=extra_data,
1282
1327
  ):
1283
1328
  # re: W0612: we need 'line' in order to do the iteration. we have to iterate.
1284
1329
  pass
@@ -1308,7 +1353,8 @@ Cache: {cache}
1308
1353
  collect_when_not_matched=False,
1309
1354
  template: str = None,
1310
1355
  method: str = None,
1311
- ) -> List[Any]:
1356
+ extra_data: Optional[dict[str, str]] = None,
1357
+ ) -> list[Any]:
1312
1358
  #
1313
1359
  # we're doing a programmatic use when we use next_by_line() so we don't allow
1314
1360
  # multiple file runs. we check that here; the other _by_line()s skip it.
@@ -1326,6 +1372,7 @@ Cache: {cache}
1326
1372
  collect_when_not_matched=collect_when_not_matched,
1327
1373
  template=template,
1328
1374
  file=file,
1375
+ extra_data=extra_data,
1329
1376
  )
1330
1377
 
1331
1378
  def _next_by_line( # pylint: disable=R0912,R0915,R0914
@@ -1339,7 +1386,8 @@ Cache: {cache}
1339
1386
  template: str = None,
1340
1387
  file: str,
1341
1388
  method: str = "next_by_line",
1342
- ) -> List[Any]:
1389
+ extra_data: Optional[dict[str, str]] = None,
1390
+ ) -> list[Any]:
1343
1391
  """Does a CsvPath.next() on filename where each row is considered
1344
1392
  by every named path before the next row starts.
1345
1393
 
@@ -1350,6 +1398,11 @@ Cache: {cache}
1350
1398
 
1351
1399
  collect_when_not_matched=True inverts the match so that lines
1352
1400
  which did not match are returned, rather than the default behavior.
1401
+
1402
+ extra_data is a flat dict of values that are meaningful to the caller.
1403
+ the results registrar stores them as an extra.json file in the
1404
+ run_dir within an _extra_data directory. the directory can be used
1405
+ by any listener as a scratch space
1353
1406
  """
1354
1407
  # re: R0912 -- absolutely. plan to refactor.
1355
1408
  if isinstance(file, list):
@@ -1393,6 +1446,7 @@ Cache: {cache}
1393
1446
  pathsname=pathsname,
1394
1447
  crt=crt,
1395
1448
  method=method,
1449
+ extra_data=extra_data,
1396
1450
  )
1397
1451
  #
1398
1452
  # setting file into the csvpath is less obviously useful at CsvPaths
@@ -1402,7 +1456,7 @@ Cache: {cache}
1402
1456
  reader = FileManager.get_reader(
1403
1457
  file, delimiter=self.delimiter, quotechar=self.quotechar
1404
1458
  )
1405
- stopped_count: List[int] = []
1459
+ stopped_count: list[int] = []
1406
1460
  for line in reader.next():
1407
1461
  # for line in reader: # pylint: disable=R1702
1408
1462
  # question to self: should this default be in a central place
@@ -1524,7 +1578,7 @@ Cache: {cache}
1524
1578
  def _load_csvpath_objects(
1525
1579
  self,
1526
1580
  *,
1527
- paths: List[str],
1581
+ paths: list[str],
1528
1582
  named_file: str,
1529
1583
  collect_when_not_matched=False,
1530
1584
  filename,
@@ -1562,7 +1616,14 @@ Cache: {cache}
1562
1616
  return csvpath_objects
1563
1617
 
1564
1618
  def _prep_csvpath_results(
1565
- self, *, csvpath_objects, filename, pathsname, crt: str, method: str
1619
+ self,
1620
+ *,
1621
+ csvpath_objects,
1622
+ filename,
1623
+ pathsname,
1624
+ crt: str,
1625
+ method: str,
1626
+ extra_data: Optional[dict[str, str]],
1566
1627
  ):
1567
1628
  """@private"""
1568
1629
  #
@@ -1578,6 +1639,7 @@ Cache: {cache}
1578
1639
  filename=filename,
1579
1640
  run_uuid=run_uuid,
1580
1641
  method="next_paths",
1642
+ extra_data=extra_data,
1581
1643
  )
1582
1644
  #
1583
1645
  #
@@ -1,6 +1,7 @@
1
1
  import re
2
2
  import json
3
3
  import traceback
4
+ from uuid import UUID
4
5
  from typing import NewType
5
6
  from json import JSONDecodeError
6
7
  from csvpath.util.file_readers import DataFileReader
@@ -53,18 +54,6 @@ class FileManager:
53
54
  def activator(self) -> NamedFileActivator:
54
55
  return NamedFileActivator(self)
55
56
 
56
- """
57
- @property
58
- def nos(self) -> Nos:
59
- box = Box()
60
- if self._nos is None:
61
- self._nos = box.get("boto_s3_nos")
62
- if self._nos is None:
63
- self._nos = Nos(None)
64
- box.add("boto_s3_nos", self._nos)
65
- return self._nos
66
- """
67
-
68
57
  @property
69
58
  def csvpaths(self):
70
59
  """@private"""
@@ -87,7 +76,6 @@ class FileManager:
87
76
  def files_root_manifest(self) -> dict:
88
77
  """@private"""
89
78
  p = self.files_root_manifest_path
90
- # nos = self.nos
91
79
  nos = Nos(p)
92
80
  if nos.exists():
93
81
  with DataFileReader(p) as reader:
@@ -187,6 +175,13 @@ class FileManager:
187
175
  return _["uuid"]
188
176
  raise ValueError(f"No matching UUID found for file {file} in {name}")
189
177
 
178
+ def get_reference_for_uuid(self, name:NamedFileName, uuid:str) -> str|None:
179
+ mani = self.get_manifest(name)
180
+ for _ in mani:
181
+ if uuid == _["uuid"]:
182
+ return _["reference"]
183
+ return None
184
+
190
185
  def get_manifest(self, name: NamedFileName) -> json:
191
186
  if name is None:
192
187
  raise ValueError("Paths name cannot be None")
@@ -344,28 +339,7 @@ class FileManager:
344
339
  # and then, once fingerprinted:
345
340
  # -> d/b/myfile.csv/0b849c9c1ef....csv
346
341
  #
347
- """
348
- _t = t
349
- parts = pathu.parts(path)
350
- for i, part in enumerate(parts):
351
- t = t.replace(f":{i}", part)
352
- #
353
- # TODO: replace dynamic tokens: :day_of_week, :day, :month, :month_of_year, :year, :quarter
354
- #
355
- t = t.replace(":filename", parts[-1])
356
- """
357
- #
358
- # this is what we need to do instead of the above ^^^^
359
- #
360
342
  t = temu.transform_file_template(template=t, file=path)
361
- """
362
- print(f"xt2: path: {path}")
363
- print(f"xt2: parts: {parts}")
364
- print(f"xt2: _t: {_t}")
365
- print(f"xt2: _2: {_t2}")
366
- print(f"xt2: t: {t}")
367
- print("")
368
- """
369
343
  #
370
344
  #
371
345
  #
@@ -624,6 +598,7 @@ class FileManager:
624
598
  path: str,
625
599
  template: str = None,
626
600
  config: Config = None,
601
+ registration_uuid:str = None
627
602
  ) -> str | None:
628
603
  #
629
604
  # note that we can pass in a Config with a template that is different
@@ -631,6 +606,15 @@ class FileManager:
631
606
  # using the arg, not the template from the config.
632
607
  #
633
608
  self.csvpaths.logger.info("Adding named file %s from %s", name, path)
609
+ if registration_uuid is not None:
610
+ #
611
+ # check that we have a real uuid and if not blow up before registration
612
+ # blowing up seems right here, rather than checking should_i_raise because
613
+ # we're looking at a serious development problem, rather than a runtime
614
+ # issue driven by the 3rd party or business rules.
615
+ #
616
+ UUID(registration_uuid)
617
+ self.csvpaths.logger.info("Registration of %s will be associated with UUID %s", path, registration_uuid)
634
618
  if not self.can_load(path):
635
619
  #
636
620
  # if False, can_load() will have already raised an error and/or, minimally,
@@ -738,7 +722,6 @@ class FileManager:
738
722
  #
739
723
  if mark is not None:
740
724
  self._validate_xlsx_mark(path, mark)
741
-
742
725
  #
743
726
  # exp: moving docs and descriptor to above copy_in()
744
727
  #
@@ -751,13 +734,9 @@ class FileManager:
751
734
  self._copy_in(name=name, path=path, home=home, template=template)
752
735
  self.csvpaths.logger.debug("Done copying in")
753
736
  #
754
- #
755
- #
756
737
  # self.assure_docs_and_discriptor(name)
757
738
  # self.csvpaths.logger.debug("Assured docs and discriptor")
758
739
  #
759
- # end exp!
760
- #
761
740
  # create the reference to the bytes/version added to the named-file.
762
741
  # this is the most specific reference possible. we return it when we're
763
742
  # done here.
@@ -776,6 +755,15 @@ class FileManager:
776
755
  name_home = self.named_file_home(name)
777
756
  self.csvpaths.logger.debug("Name home is %s", name_home)
778
757
  mdata = FileMetadata(self.csvpaths.config)
758
+ #
759
+ # add the ability to pass in a UUID. if received, use it here to
760
+ # set the FileMetadata's UUID. this will allow the caller to give a
761
+ # trackable ticket. for e.g. we may want to spin-up a registration in
762
+ # a thread, create our own UUID, pass it in for the registration, and
763
+ # return the UUID to the user so they can retrieve the reference later
764
+ #
765
+ if registration_uuid is not None:
766
+ mdata.uuid_string = registration_uuid
779
767
  mdata.named_file_name = name
780
768
  mdata.named_file_ref = ret
781
769
  #
@@ -789,7 +777,6 @@ class FileManager:
789
777
  mdata.fingerprint = h
790
778
  mdata.file_path = rpath
791
779
  mdata.file_home = file_home
792
- # nos = self.nos
793
780
  nos.path = file_home
794
781
  mdata.file_name = file_home[file_home.rfind(nos.sep) + 1 :]
795
782
  mdata.name_home = name_home
@@ -1,7 +1,4 @@
1
- import os
2
1
  import json
3
- from datetime import datetime
4
- from csvpath.util.exceptions import InputException, FileException
5
2
  from csvpath.util.file_readers import DataFileReader
6
3
  from csvpath.util.file_writers import DataFileWriter
7
4
  from csvpath.util.nos import Nos
@@ -87,4 +84,6 @@ class FilesListener(Listener): # Registrar,
87
84
  jdata = self.get_manifest(manifest_path)
88
85
  jdata.append(mani)
89
86
  with DataFileWriter(path=manifest_path, mode="w") as writer:
90
- json.dump(jdata, writer.sink, indent=2)
87
+ j = json.dumps(jdata, indent=2)
88
+ writer.sink.write(j)
89
+ writer.sink.flush()
@@ -1,10 +1,7 @@
1
- import os
2
1
  import json
3
- from csvpath.util.exceptions import InputException
4
2
  from csvpath.util.file_readers import DataFileReader
5
3
  from csvpath.util.file_writers import DataFileWriter
6
4
  from csvpath.util.nos import Nos
7
- from .paths_metadata import PathsMetadata
8
5
  from ..listener import Listener
9
6
  from ..metadata import Metadata
10
7
 
@@ -37,14 +34,13 @@ class PathsListener(Listener):
37
34
  mpath = self.manifest_path
38
35
  with DataFileReader(mpath, encoding="utf-8") as file:
39
36
  contents = file.read()
37
+ # print(f"pathslist: mpath: {mpath}: {contents}")
40
38
  j = json.loads(contents)
41
- # j = json.load(file.source)
42
39
  return j
43
40
 
44
41
  @property
45
42
  def manifest_path(self) -> None:
46
43
  mf = Nos(self.csvpaths.config.inputs_csvpaths_path).join("manifest.json")
47
- # mf = os.path.join(self.csvpaths.config.inputs_csvpaths_path, "manifest.json")
48
44
  if not Nos(mf).exists():
49
45
  with DataFileWriter(path=mf) as file:
50
46
  file.append("[]")
@@ -74,4 +70,6 @@ class PathsListener(Listener):
74
70
  jdata = self.manifest
75
71
  jdata.append(mani)
76
72
  with DataFileWriter(path=self.manifest_path) as file:
77
- json.dump(jdata, file.sink, indent=2)
73
+ j = json.dumps(jdata, indent=2)
74
+ file.sink.write(j)
75
+ file.sink.flush()
@@ -616,7 +616,8 @@ class PathsManager:
616
616
  return t
617
617
 
618
618
  def get_template_for_paths(self, name: NamedPathsName) -> str:
619
- return self.describer.get_template(name)
619
+ t = self.describer.get_template(name)
620
+ return "" if t is None else t
620
621
 
621
622
  def store_template_for_paths(self, name: NamedPathsName, template: str) -> None:
622
623
  self.describer.store_template(name, template)
@@ -209,7 +209,6 @@ class ResultRegistrar(Registrar, Listener):
209
209
  @property
210
210
  def manifest_path(self) -> str:
211
211
  h = Nos(self.result_path).join("manifest.json")
212
- # h = os.path.join(self.result_path, "manifest.json")
213
212
  return h
214
213
 
215
214
  @property
@@ -3,7 +3,7 @@ import os
3
3
  import re
4
4
  from uuid import UUID
5
5
  import dateutil.parser
6
- from typing import Dict, List, Any
6
+ from typing import Any, Optional
7
7
  from csvpath.util.line_spooler import LineSpooler
8
8
  from csvpath.util.exceptions import InputException, CsvPathsException
9
9
  from csvpath.util.references.reference_parser import ReferenceParser
@@ -112,6 +112,7 @@ class ResultsManager: # pylint: disable=C0115
112
112
  file: str = None,
113
113
  run_uuid: UUID,
114
114
  method: str,
115
+ extra_data: Optional[dict[str, str]] = None,
115
116
  ) -> ResultsMetadata:
116
117
  """@private"""
117
118
  rr = ResultsRegistrar(
@@ -142,6 +143,12 @@ class ResultsManager: # pylint: disable=C0115
142
143
  #
143
144
  #
144
145
  mdata = ResultsMetadata(self.csvpaths.config)
146
+ #
147
+ # extra data is a flat list of dict[str,str] determined by the user and saved by some
148
+ # listener. we don't do anything with it, other than save it in the default listener
149
+ # when we first create the run manifest.json.
150
+ #
151
+ mdata.extra_data = extra_data
145
152
  mdata.archive_name = self.csvpaths.config.archive_name
146
153
  mdata.run_home = run_dir
147
154
  mdata.run_uuid = run_uuid
@@ -410,13 +417,13 @@ class ResultsManager: # pylint: disable=C0115
410
417
  rr.add_internal_listener(_)
411
418
  rr.register_start(mdata)
412
419
 
413
- def set_named_results(self, results: Dict[str, List[Result]]) -> None:
420
+ def set_named_results(self, results: dict[str, list[Result]]) -> None:
414
421
  """@private"""
415
422
  self.named_results = {}
416
423
  for value in results.values():
417
424
  self.add_named_results(value)
418
425
 
419
- def add_named_results(self, results: List[Result]) -> None:
426
+ def add_named_results(self, results: list[Result]) -> None:
420
427
  """@private"""
421
428
  for r in results:
422
429
  self.add_named_result(r)
@@ -522,7 +529,7 @@ class ResultsManager: # pylint: disable=C0115
522
529
  mydirs[os.path.dirname(path)] = path
523
530
  return mydirs
524
531
 
525
- def _get_named_results_for_reference(self, name: str) -> List[List[Any]]:
532
+ def _get_named_results_for_reference(self, name: str) -> list[list[Any]]:
526
533
  #
527
534
  # $mygroup.results.orders/acme/2025:first.myinstance
528
535
  #
@@ -592,7 +599,7 @@ class ResultsManager: # pylint: disable=C0115
592
599
  #
593
600
  # this gets the results of a single run. it does not get all runs under the name.
594
601
  #
595
- def get_named_results(self, name) -> List[List[Any]]:
602
+ def get_named_results(self, name) -> list[list[Any]]:
596
603
  #
597
604
  # as it turns out, references are (finally!) the easiest, so let's do that
598
605
  # first.
@@ -748,7 +755,7 @@ class ResultsManager: # pylint: disable=C0115
748
755
  instances = Nos(path).listdir()
749
756
  rs = [None for inst in instances if inst != "manifest.json"]
750
757
  for inst in instances:
751
- if inst.endswith(".json"):
758
+ if inst.endswith(".json") or inst == "_extra_data":
752
759
  #
753
760
  # exp ^^^^
754
761
  #