csvpath 0.0.599__tar.gz → 0.0.605__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 (402) hide show
  1. {csvpath-0.0.599 → csvpath-0.0.605}/PKG-INFO +2 -1
  2. {csvpath-0.0.599 → csvpath-0.0.605}/assets/.DS_Store +0 -0
  3. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/azure.bat +8 -0
  4. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/gcs.bat +8 -0
  5. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/local.bat +8 -0
  6. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/s3.bat +8 -0
  7. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/sftp.bat +8 -0
  8. csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.25-py3-none-any.whl +0 -0
  9. csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.27-py3-none-any.whl +0 -0
  10. csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.28-py3-none-any.whl +0 -0
  11. csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.29-py3-none-any.whl +0 -0
  12. csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.30.tar.gz +0 -0
  13. csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.31.tar.gz +0 -0
  14. csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.33.tar.gz +0 -0
  15. csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.34.tar.gz +0 -0
  16. csvpath-0.0.605/assets/libs/release_candidate_maker-0.0.35.tar.gz +0 -0
  17. {csvpath-0.0.599 → csvpath-0.0.605}/config/config.ini +4 -4
  18. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/csvpaths.py +40 -32
  19. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/webhook/webhook_results_listener.py +8 -10
  20. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/paths/paths_describer.py +28 -10
  21. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/paths/paths_manager.py +1 -3
  22. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/results_manager.py +55 -8
  23. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/test_listener.py +2 -2
  24. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/config.py +61 -16
  25. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/log_utility.py +17 -5
  26. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/path_util.py +5 -8
  27. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/var_utility.py +21 -26
  28. {csvpath-0.0.599 → csvpath-0.0.605}/pyproject.toml +4 -3
  29. {csvpath-0.0.599 → csvpath-0.0.605}/LICENSE +0 -0
  30. {csvpath-0.0.599 → csvpath-0.0.605}/README.md +0 -0
  31. {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/config.ini +0 -0
  32. {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/extra-functions.imports +0 -0
  33. {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/function.imports +0 -0
  34. {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-local-azure.ini +0 -0
  35. {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
  36. {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-local-gcs.ini +0 -0
  37. {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-local-s3.ini +0 -0
  38. {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-local-sftp.ini +0 -0
  39. {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-windows-azure.ini +0 -0
  40. {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-windows-gcs.ini +0 -0
  41. {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-windows-local.ini +0 -0
  42. {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-windows-s3.ini +0 -0
  43. {csvpath-0.0.599 → csvpath-0.0.605}/assets/config/jenkins-windows-sftp.ini +0 -0
  44. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/.DS_Store +0 -0
  45. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/Mac.goenvironment.json +0 -0
  46. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/Windows.goenvironment.json +0 -0
  47. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
  48. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/azure.sh +0 -0
  49. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/gcs.sh +0 -0
  50. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/google-pipeline.gopipeline.json +0 -0
  51. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
  52. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/local.sh +0 -0
  53. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
  54. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/s3.sh +0 -0
  55. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
  56. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/mac/sftp.sh +0 -0
  57. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
  58. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
  59. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
  60. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
  61. {csvpath-0.0.599 → csvpath-0.0.605}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
  62. {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/.DS_Store +0 -0
  63. {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
  64. {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
  65. {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
  66. {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
  67. {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
  68. {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
  69. {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sqlite/csvpath +0 -0
  70. {csvpath-0.0.599 → csvpath-0.0.605}/assets/integrations/sqlite/schema.sql +0 -0
  71. {csvpath-0.0.599 → csvpath-0.0.605}/config/env.json +0 -0
  72. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/__init__.py +0 -0
  73. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/__init__.py +0 -0
  74. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/asker.py +0 -0
  75. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/cli.py +0 -0
  76. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/const.py +0 -0
  77. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/debug_config.py +0 -0
  78. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/drill_down.py +0 -0
  79. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/function_describer.py +0 -0
  80. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/function_lister.py +0 -0
  81. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/cli/selecter.py +0 -0
  82. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/csvpath.py +0 -0
  83. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/__init__.py +0 -0
  84. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/errors/error.py +0 -0
  85. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/errors/error_collector.py +0 -0
  86. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/errors/error_comms.py +0 -0
  87. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/errors/error_manager.py +0 -0
  88. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/file_activator.py +0 -0
  89. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/file_describer.py +0 -0
  90. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/file_manager.py +0 -0
  91. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/file_metadata.py +0 -0
  92. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/file_registrar.py +0 -0
  93. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/files_activation_listener.py +0 -0
  94. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/files_listener.py +0 -0
  95. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
  96. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ckan/ckan.py +0 -0
  97. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
  98. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ckan/datafile.py +0 -0
  99. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ckan/dataset.py +0 -0
  100. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/event.py +0 -0
  101. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/event_result.py +0 -0
  102. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
  103. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/job.py +0 -0
  104. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
  105. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
  106. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
  107. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
  108. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/run.py +0 -0
  109. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
  110. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/run_state.py +0 -0
  111. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/ol/sender.py +0 -0
  112. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
  113. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/metrics.py +0 -0
  114. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
  115. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
  116. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
  117. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
  118. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
  119. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
  120. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
  121. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
  122. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
  123. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sftpplus/rpc.py +0 -0
  124. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
  125. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
  126. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
  127. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/slack/event.py +0 -0
  128. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/slack/sender.py +0 -0
  129. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/engine.py +0 -0
  130. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
  131. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
  132. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
  133. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
  134. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
  135. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/tables.py +0 -0
  136. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sql/updates.py +0 -0
  137. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
  138. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
  139. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
  140. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/integrations/webhook/webhook_listener.py +0 -0
  141. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/listener.py +0 -0
  142. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/metadata.py +0 -0
  143. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/paths/paths_listener.py +0 -0
  144. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/paths/paths_metadata.py +0 -0
  145. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/paths/paths_registrar.py +0 -0
  146. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/registrar.py +0 -0
  147. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
  148. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
  149. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
  150. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
  151. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/readers/readers.py +0 -0
  152. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/result.py +0 -0
  153. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/result_file_reader.py +0 -0
  154. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/result_metadata.py +0 -0
  155. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/result_registrar.py +0 -0
  156. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/result_serializer.py +0 -0
  157. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/results_metadata.py +0 -0
  158. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/results/results_registrar.py +0 -0
  159. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/run/run_listener_stdout.py +0 -0
  160. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/run/run_metadata.py +0 -0
  161. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/managers/run/run_registrar.py +0 -0
  162. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/__init__.py +0 -0
  163. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/__init__.py +0 -0
  164. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/args.py +0 -0
  165. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/args_helper.py +0 -0
  166. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/all.py +0 -0
  167. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/andf.py +0 -0
  168. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/any.py +0 -0
  169. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/between.py +0 -0
  170. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/empty.py +0 -0
  171. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/exists.py +0 -0
  172. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/inf.py +0 -0
  173. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/no.py +0 -0
  174. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/notf.py +0 -0
  175. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/orf.py +0 -0
  176. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/boolean/yes.py +0 -0
  177. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/count.py +0 -0
  178. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/count_bytes.py +0 -0
  179. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/count_headers.py +0 -0
  180. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/count_lines.py +0 -0
  181. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/count_scans.py +0 -0
  182. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/counter.py +0 -0
  183. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/every.py +0 -0
  184. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/has_matches.py +0 -0
  185. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/increment.py +0 -0
  186. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/tally.py +0 -0
  187. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/counting/total_lines.py +0 -0
  188. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/dates/now.py +0 -0
  189. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/dates/part.py +0 -0
  190. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/dates/roll.py +0 -0
  191. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/function.py +0 -0
  192. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/function_factory.py +0 -0
  193. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/function_finder.py +0 -0
  194. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/function_focus.py +0 -0
  195. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/append.py +0 -0
  196. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/collect.py +0 -0
  197. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/empty_stack.py +0 -0
  198. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/end.py +0 -0
  199. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/header_name.py +0 -0
  200. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
  201. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/headers.py +0 -0
  202. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/headers_stack.py +0 -0
  203. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/insert.py +0 -0
  204. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/line_before.py +0 -0
  205. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/mismatch.py +0 -0
  206. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/remove.py +0 -0
  207. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/rename.py +0 -0
  208. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/replace.py +0 -0
  209. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/headers/reset_headers.py +0 -0
  210. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/json/jsonpath.py +0 -0
  211. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/advance.py +0 -0
  212. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/after_blank.py +0 -0
  213. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/dups.py +0 -0
  214. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/first.py +0 -0
  215. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/first_line.py +0 -0
  216. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/last.py +0 -0
  217. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/lines/stop.py +0 -0
  218. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/above.py +0 -0
  219. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/add.py +0 -0
  220. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/divide.py +0 -0
  221. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/equals.py +0 -0
  222. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/intf.py +0 -0
  223. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/mod.py +0 -0
  224. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/multiply.py +0 -0
  225. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/odd.py +0 -0
  226. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/round.py +0 -0
  227. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/subtotal.py +0 -0
  228. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/subtract.py +0 -0
  229. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/math/sum.py +0 -0
  230. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/misc/fingerprint.py +0 -0
  231. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/misc/importf.py +0 -0
  232. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/misc/parquet.py +0 -0
  233. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/misc/random.py +0 -0
  234. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/print/jinjaf.py +0 -0
  235. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/print/print_line.py +0 -0
  236. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/print/print_queue.py +0 -0
  237. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/print/printf.py +0 -0
  238. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/print/table.py +0 -0
  239. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/sql/sql_in.py +0 -0
  240. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/stats/minf.py +0 -0
  241. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/stats/nminmax.py +0 -0
  242. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/stats/percent.py +0 -0
  243. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/stats/percent_unique.py +0 -0
  244. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/stats/stdev.py +0 -0
  245. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/alter.py +0 -0
  246. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/caps.py +0 -0
  247. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/concat.py +0 -0
  248. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/contains.py +0 -0
  249. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/format.py +0 -0
  250. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/length.py +0 -0
  251. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/lower.py +0 -0
  252. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/metaphone.py +0 -0
  253. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/regex.py +0 -0
  254. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/starts_with.py +0 -0
  255. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/strip.py +0 -0
  256. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/substring.py +0 -0
  257. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/strings/upper.py +0 -0
  258. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/testing/debug.py +0 -0
  259. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/__init__.py +0 -0
  260. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/blank.py +0 -0
  261. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/boolean.py +0 -0
  262. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/datatype.py +0 -0
  263. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/datef.py +0 -0
  264. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/decimal.py +0 -0
  265. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/email.py +0 -0
  266. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/nonef.py +0 -0
  267. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/string.py +0 -0
  268. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/type.py +0 -0
  269. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/url.py +0 -0
  270. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/types/wildcard.py +0 -0
  271. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/validity/fail.py +0 -0
  272. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/validity/failed.py +0 -0
  273. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/validity/line.py +0 -0
  274. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/validity/matches.py +0 -0
  275. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/validity/percent_matching.py +0 -0
  276. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/clear.py +0 -0
  277. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/get.py +0 -0
  278. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/index_of.py +0 -0
  279. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/pushpop.py +0 -0
  280. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/put.py +0 -0
  281. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/slice.py +0 -0
  282. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/sort.py +0 -0
  283. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/track.py +0 -0
  284. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/variables/variables.py +0 -0
  285. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/functions/xml/xpath.py +0 -0
  286. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/lark_parser.py +0 -0
  287. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/lark_transformer.py +0 -0
  288. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/matcher.py +0 -0
  289. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/__init__.py +0 -0
  290. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/equality.py +0 -0
  291. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/expression.py +0 -0
  292. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/header.py +0 -0
  293. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/matchable.py +0 -0
  294. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/qualified.py +0 -0
  295. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/reference.py +0 -0
  296. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/term.py +0 -0
  297. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/productions/variable.py +0 -0
  298. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/exceptions.py +0 -0
  299. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/expression_encoder.py +0 -0
  300. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/expression_utility.py +0 -0
  301. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/lark_print_parser.py +0 -0
  302. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/parquet_utility.py +0 -0
  303. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/print_parser.py +0 -0
  304. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/matching/util/runtime_data_collector.py +0 -0
  305. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/error_mode.py +0 -0
  306. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/explain_mode.py +0 -0
  307. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/files_mode.py +0 -0
  308. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/logic_mode.py +0 -0
  309. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/mode_controller.py +0 -0
  310. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/print_mode.py +0 -0
  311. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/return_mode.py +0 -0
  312. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/run_mode.py +0 -0
  313. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/source_mode.py +0 -0
  314. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/transfer_mode.py +0 -0
  315. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/unmatched_mode.py +0 -0
  316. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/modes/validation_mode.py +0 -0
  317. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/scanning/__init__.py +0 -0
  318. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/scanning/scanner2.py +0 -0
  319. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/scanning/scanner2_parser.py +0 -0
  320. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/scanning/scanner2_transformer.py +0 -0
  321. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_data_reader.py +0 -0
  322. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_data_writer.py +0 -0
  323. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_fingerprinter.py +0 -0
  324. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_json_data_reader.py +0 -0
  325. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_nos.py +0 -0
  326. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_utils.py +0 -0
  327. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
  328. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/backend_check.py +0 -0
  329. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/box.py +0 -0
  330. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/cache.py +0 -0
  331. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/caser.py +0 -0
  332. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/class_loader.py +0 -0
  333. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/code.py +0 -0
  334. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/config_env.py +0 -0
  335. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/config_exception.py +0 -0
  336. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/date_util.py +0 -0
  337. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/exceptions.py +0 -0
  338. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/file_info.py +0 -0
  339. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/file_readers.py +0 -0
  340. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/file_utility.py +0 -0
  341. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/file_writers.py +0 -0
  342. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_data_reader.py +0 -0
  343. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_data_writer.py +0 -0
  344. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
  345. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_json_data_reader.py +0 -0
  346. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_nos.py +0 -0
  347. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_utils.py +0 -0
  348. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
  349. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/hasher.py +0 -0
  350. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/http/http_data_reader.py +0 -0
  351. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/intermediary.py +0 -0
  352. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/json/json_data_reader.py +0 -0
  353. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/json/json_reader_helper.py +0 -0
  354. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/last_line_stats.py +0 -0
  355. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/line_counter.py +0 -0
  356. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/line_monitor.py +0 -0
  357. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/line_spooler.py +0 -0
  358. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/metadata_parser.py +0 -0
  359. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/nos.py +0 -0
  360. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/pandas_data_reader.py +0 -0
  361. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/printer.py +0 -0
  362. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/py_file_utility.py +0 -0
  363. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/files_reference_finder_2.py +0 -0
  364. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
  365. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/files_tools/range_finder.py +0 -0
  366. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/ref_utils.py +0 -0
  367. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/reference_exceptions.py +0 -0
  368. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/reference_grammar.py +0 -0
  369. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
  370. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/reference_parser.py +0 -0
  371. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/reference_results.py +0 -0
  372. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/reference_transformer.py +0 -0
  373. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_reference_finder_2.py +0 -0
  374. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/data_finder.py +0 -0
  375. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/date_filter.py +0 -0
  376. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/identity_finder.py +0 -0
  377. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/path_filter.py +0 -0
  378. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
  379. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/token_filters.py +0 -0
  380. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
  381. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/references/tools/date_completer.py +0 -0
  382. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/referrer_printer.py +0 -0
  383. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/run_home_maker.py +0 -0
  384. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_data_reader.py +0 -0
  385. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_data_writer.py +0 -0
  386. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_fingerprinter.py +0 -0
  387. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_json_data_reader.py +0 -0
  388. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_nos.py +0 -0
  389. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_utils.py +0 -0
  390. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
  391. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_config.py +0 -0
  392. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_data_reader.py +0 -0
  393. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_data_writer.py +0 -0
  394. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
  395. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_json_data_reader.py +0 -0
  396. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_nos.py +0 -0
  397. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_walk.py +0 -0
  398. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
  399. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/sqliter.py +0 -0
  400. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/template_util.py +0 -0
  401. {csvpath-0.0.599 → csvpath-0.0.605}/csvpath/util/xlsx/xlsx_data_reader.py +0 -0
  402. {csvpath-0.0.599 → csvpath-0.0.605}/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.599
3
+ Version: 0.0.605
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
@@ -54,6 +54,7 @@ Requires-Dist: pytest (==8.4.2)
54
54
  Requires-Dist: python-dateutil (==2.9.0.post0)
55
55
  Requires-Dist: pytz (==2024.2)
56
56
  Requires-Dist: requests (==2.32.5)
57
+ Requires-Dist: ruff (>=0.15.8,<0.16.0)
57
58
  Requires-Dist: smart-open[all] (==7.5.1)
58
59
  Requires-Dist: sqlalchemy (==2.0.48)
59
60
  Requires-Dist: tabulate (==0.9.0)
@@ -30,3 +30,11 @@ cmd.exe /C c:\Users\python\.local\bin\poetry.exe install
30
30
  cmd.exe /C c:\Users\python\.local\bin\poetry.exe run pytest
31
31
 
32
32
 
33
+ net stop w32time
34
+ w32tm /unregister
35
+ w32tm /register
36
+ net start w32time
37
+ timeout /t 1
38
+ w32tm /resync
39
+
40
+
@@ -29,3 +29,11 @@ cmd.exe /C c:\Users\python\.local\bin\poetry.exe install
29
29
  cmd.exe /C c:\Users\python\.local\bin\poetry.exe run pytest
30
30
 
31
31
 
32
+ net stop w32time
33
+ w32tm /unregister
34
+ w32tm /register
35
+ net start w32time
36
+ timeout /t 1
37
+ w32tm /resync
38
+
39
+
@@ -53,3 +53,11 @@ cmd.exe /C c:\Users\python\.local\bin\poetry.exe install
53
53
  cmd.exe /C c:\Users\python\.local\bin\poetry.exe run pytest
54
54
 
55
55
 
56
+ net stop w32time
57
+ w32tm /unregister
58
+ w32tm /register
59
+ net start w32time
60
+ timeout /t 1
61
+ w32tm /resync
62
+
63
+
@@ -31,3 +31,11 @@ cmd.exe /C c:\Users\python\.local\bin\poetry.exe install
31
31
  cmd.exe /C c:\Users\python\.local\bin\poetry.exe run pytest
32
32
 
33
33
 
34
+ net stop w32time
35
+ w32tm /unregister
36
+ w32tm /register
37
+ net start w32time
38
+ timeout /t 1
39
+ w32tm /resync
40
+
41
+
@@ -29,3 +29,11 @@ cmd.exe /C c:\Users\python\.local\bin\poetry.exe install
29
29
  cmd.exe /C c:\Users\python\.local\bin\poetry.exe run pytest
30
30
 
31
31
 
32
+ net stop w32time
33
+ w32tm /unregister
34
+ w32tm /register
35
+ net start w32time
36
+ timeout /t 1
37
+ w32tm /resync
38
+
39
+
@@ -35,7 +35,7 @@ path = cache
35
35
  use_cache = yes
36
36
 
37
37
  [functions]
38
- imports =
38
+ imports =
39
39
 
40
40
  [results]
41
41
  archive = tmp/local/archive
@@ -48,7 +48,7 @@ allow_http_files = True
48
48
  allow_local_files = True
49
49
 
50
50
  [listeners]
51
- groups = default,scripts
51
+ groups = default
52
52
  webhook.results = from csvpath.managers.integrations.webhook.webhook_results_listener import WebhookResultsListener
53
53
  scripts.results = from csvpath.managers.integrations.scripts.scripts_results_listener import ScriptsResultsListener
54
54
  sql.file = from csvpath.managers.integrations.sql.sql_file_listener import SqlFileListener
@@ -105,7 +105,7 @@ port = SFTPPLUS_PORT
105
105
  admin_username = SFTPPLUS_ADMIN_USERNAME
106
106
  admin_password = SFTPPLUS_ADMIN_PASSWORD
107
107
  api_url = https://. . . :10020/json
108
- scripts_dir =
108
+ scripts_dir =
109
109
  execute_timeout = 300
110
110
 
111
111
  [ckan]
@@ -120,7 +120,7 @@ timeout = 5
120
120
  verify = False
121
121
 
122
122
  [slack]
123
- webhook_url =
123
+ webhook_url =
124
124
 
125
125
  [scripts]
126
126
  run_scripts = yes
@@ -1,15 +1,15 @@
1
- """ CsvPaths' intent is to help you manage and automate your use
2
- of the CsvPath library. it makes it easier to scale your CSV quality control. """
1
+ """CsvPaths' intent is to help you manage and automate your use
2
+ of the CsvPath library. it makes it easier to scale your CSV quality control."""
3
3
 
4
4
  import os
5
5
  import traceback
6
6
  import atexit
7
7
  import threading
8
8
 
9
- from uuid import uuid4, UUID
9
+ from uuid import uuid4
10
10
  from abc import ABC, abstractmethod
11
11
  from typing import List, Any, NewType
12
- from datetime import datetime, timezone
12
+ from datetime import datetime
13
13
  from .managers.errors.error import Error
14
14
  from .managers.errors.error_comms import ErrorCommunications
15
15
  from .managers.errors.error_manager import ErrorManager
@@ -26,7 +26,6 @@ from .managers.results.results_manager import ResultsManager
26
26
  from .managers.results.result import Result
27
27
  from .util.box import Box
28
28
  from . import CsvPath
29
- from .managers.integrations.otlp.metrics import Metrics
30
29
 
31
30
 
32
31
  # types for clarity
@@ -108,7 +107,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
108
107
  skip_blank_lines=True,
109
108
  print_default=True,
110
109
  project_context=None,
111
- project=None
110
+ project=None,
112
111
  # config: Config = None,
113
112
  ):
114
113
  if CsvPaths.METRICS_WRAP_REG is False:
@@ -219,7 +218,14 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
219
218
  # that need to know about the run during the run; e.g. parquet()
220
219
  #
221
220
  self._csvpath_instances = []
222
-
221
+ #
222
+ # any listeners added here will be added to the internal_listeners of
223
+ # the csvpath instances that run.
224
+ #
225
+ self.dynamic_csvpath_error_listeners = []
226
+ #
227
+ #
228
+ #
223
229
  self.logger.info(
224
230
  f"Initialized CsvPaths: {self} in thread: {threading.current_thread()}"
225
231
  )
@@ -278,40 +284,42 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
278
284
  return f"""
279
285
  Context: {self.project_context}.{self.project}
280
286
  Logger: {logstr}
281
- Configured log path: {self.config.get(section='logging', name='log_file')}
287
+ Configured log path: {self.config.get(section="logging", name="log_file")}
282
288
  Current log paths: {logpath}
283
289
  Config file: {self.config.configpath}
284
- Var sub source: {self.config.get(section='config', name='var_sub_source')}
290
+ Var sub source: {self.config.get(section="config", name="var_sub_source")}
285
291
  Var subs: {subs}
286
292
  Errors:
287
- - csvpath: {self.config.get(section='errors', name='csvpath')}
288
- - csvpaths: {self.config.get(section='errors', name='csvpaths')}
289
- Named-files: {self.config.get(section='inputs', name='files')}
290
- Named-paths: {self.config.get(section='inputs', name='files')}
291
- Archive: {self.config.get(section='results', name='archive')}
293
+ - csvpath: {self.config.get(section="errors", name="csvpath")}
294
+ - csvpaths: {self.config.get(section="errors", name="csvpaths")}
295
+ Named-files: {self.config.get(section="inputs", name="files")}
296
+ Named-paths: {self.config.get(section="inputs", name="files")}
297
+ Archive: {self.config.get(section="results", name="archive")}
292
298
  Cache: {cache}
293
299
  {lstrs}
294
300
  """
295
301
 
296
- """
297
- def info_dump(self) -> None:
298
- self.logger.info(
299
- "Initated logging on log path: %s",
300
- self.config.get(section="logging", name="log_file"),
301
- )
302
- self.logger.info("Config file is at: %s", self.config.configpath)
303
- intgs = self.config.get(section="listeners", name="groups")
304
- self.logger.debug("Active integrations:")
305
- for _ in intgs:
306
- self.logger.debug(" - %s", _)
307
- """
308
-
309
302
  def _set_managers(self) -> None:
310
303
  self.paths_manager = PathsManager(csvpaths=self)
311
304
  self.file_manager = FileManager(csvpaths=self)
312
- self.results_manager = ResultsManager(csvpaths=self)
313
305
  self.ecoms = ErrorCommunications(csvpaths=self)
314
306
  self.error_manager = ErrorManager(csvpaths=self)
307
+ #
308
+ # we take a bit more care with resman because it may have listeners
309
+ # that are set programmatically. other managers deal with their
310
+ # registrars differently and don't have the problem of maintaining
311
+ # lists of listeners at the csvpaths level
312
+ #
313
+ resman = ResultsManager(csvpaths=self)
314
+ if self.results_manager:
315
+ resman.dynamic_result_listeners = (
316
+ self.results_manager.dynamic_result_listeners
317
+ )
318
+ resman.dynamic_results_listeners = (
319
+ self.results_manager.dynamic_results_listeners
320
+ )
321
+ resman.dynamic_run_listeners = self.results_manager.dynamic_run_listeners
322
+ self.results_manager = resman
315
323
 
316
324
  @property
317
325
  def project(self) -> str:
@@ -432,6 +440,8 @@ Cache: {cache}
432
440
  if path.config.configpath != self.config.configpath:
433
441
  path.config.set_config_path_and_reload(self.config.configpath)
434
442
  path.logger = None
443
+ for _ in self.dynamic_csvpath_error_listeners:
444
+ path.error_manager.add_internal_listener(_)
435
445
  return path
436
446
 
437
447
  def stop_all(self) -> None: # pragma: no cover
@@ -1448,10 +1458,8 @@ Cache: {cache}
1448
1458
  #
1449
1459
  # re: W0212: treating _consider_line something like package private
1450
1460
  #
1451
- matched = (
1452
- self.current_matcher._consider_line( # pylint:disable=W0212
1453
- line
1454
- )
1461
+ matched = self.current_matcher._consider_line( # pylint:disable=W0212
1462
+ line
1455
1463
  )
1456
1464
  if self.current_matcher.stopped:
1457
1465
  stopped_count.append(1)
@@ -1,4 +1,3 @@
1
- import os
2
1
  import json
3
2
  from csvpath.managers.metadata import Metadata
4
3
  from csvpath.managers.results.results_metadata import ResultsMetadata
@@ -70,13 +69,13 @@ class WebhookResultsListener(WebhookListener):
70
69
  if cfg is None:
71
70
  return None
72
71
  if atype.find("all") > -1:
73
- return cfg.all_url
72
+ return cfg.on_complete_all.url
74
73
  elif atype.find("invalid") > -1:
75
- return cfg.invalid_url
74
+ return cfg.on_complete_invalid.url
76
75
  elif atype.find("valid") > -1:
77
- return cfg.valid_url
76
+ return cfg.on_complete_valid.url
78
77
  elif atype.find("error") > -1:
79
- return cfg.error_url
78
+ return cfg.on_complete_error.url
80
79
  else:
81
80
  raise ValueError(f"Unknown type: {atype}")
82
81
 
@@ -106,13 +105,13 @@ class WebhookResultsListener(WebhookListener):
106
105
  return {}
107
106
  on = None
108
107
  if atype.find("all") > -1:
109
- on = cfg.on_complete_all
108
+ on = cfg.on_complete_all.payload
110
109
  elif atype.find("invalid") > -1:
111
- on = cfg.on_complete_invalid
110
+ on = cfg.on_complete_invalid.payload
112
111
  elif atype.find("valid") > -1:
113
- on = cfg.on_complete_valid
112
+ on = cfg.on_complete_valid.payload
114
113
  elif atype.find("error") > -1:
115
- on = cfg.on_complete_error
114
+ on = cfg.on_complete_error.payload
116
115
  else:
117
116
  raise ValueError(f"Unknown type: {atype}")
118
117
  if on and len(on) > 0:
@@ -122,7 +121,6 @@ class WebhookResultsListener(WebhookListener):
122
121
  return None
123
122
 
124
123
  def _payload(self, *, mdata: Metadata, atype: str, cfg, hook: str) -> dict:
125
-
126
124
  metadata = self.get_data(mdata, "meta.json")
127
125
  variables = self.get_data(mdata, "vars.json")
128
126
  pairs = VarUtility.get_value_pairs_from_value(
@@ -20,15 +20,16 @@ class Scripts(BaseModel):
20
20
  on_complete_error: Optional[str] = None
21
21
 
22
22
 
23
+ class Webhook(BaseModel):
24
+ url: Optional[str] = None
25
+ payload: Optional[str] = None
26
+
27
+
23
28
  class Webhooks(BaseModel):
24
- on_complete_all: Optional[str] = None
25
- on_complete_invalid: Optional[str] = None
26
- on_complete_valid: Optional[str] = None
27
- on_complete_error: Optional[str] = None
28
- all_url: Optional[str] = None
29
- valid_url: Optional[str] = None
30
- invalid_url: Optional[str] = None
31
- error_url: Optional[str] = None
29
+ on_complete_all: Optional[Webhook] = None
30
+ on_complete_invalid: Optional[Webhook] = None
31
+ on_complete_valid: Optional[Webhook] = None
32
+ on_complete_error: Optional[Webhook] = None
32
33
 
33
34
 
34
35
  class GroupConfig(BaseModel):
@@ -42,7 +43,6 @@ class Config(BaseModel):
42
43
 
43
44
 
44
45
  class NamedPathsDescriber:
45
-
46
46
  README = "README.md"
47
47
  DEFAULT_README = "# Named-Paths Documentation\n\n"
48
48
  JSON_FILE = "definition.json"
@@ -78,6 +78,24 @@ class NamedPathsDescriber:
78
78
  #
79
79
  if self.CONFIG in j:
80
80
  GroupConfig(**j[self.CONFIG])
81
+ #
82
+ # clear out the Nones
83
+ #
84
+ if self.CONFIG in j:
85
+ configs = j[self.CONFIG]
86
+ if "groups" in configs:
87
+ configs = configs["groups"]
88
+ print(f"configs: {configs}")
89
+ for _k, _v in j[self.CONFIG].items():
90
+ rms = []
91
+ for k, v in _v.items():
92
+ if v is None:
93
+ rms.append(k)
94
+ for rm in rms:
95
+ del _v[rm]
96
+ #
97
+ #
98
+ #
81
99
  p = Nos(home).join(self.JSON_FILE)
82
100
  with DataFileWriter(path=p) as writer:
83
101
  json.dump(j, writer.sink, indent=2)
@@ -125,7 +143,7 @@ class NamedPathsDescriber:
125
143
  config.groups[name] = gc
126
144
  else:
127
145
  config.groups[name] = j
128
- _[self.CONFIG] = config.model_dump()
146
+ _[self.CONFIG] = config.model_dump(exclude_none=True)
129
147
  self.store_json(name, _)
130
148
 
131
149
  def get_config(self, name: NamedPathsName) -> GroupConfig:
@@ -1,5 +1,4 @@
1
1
  # pylint: disable=C0114
2
- import os
3
2
  import json
4
3
  import traceback
5
4
  from typing import NewType
@@ -10,7 +9,6 @@ from csvpath.util.metadata_parser import MetadataParser
10
9
  from csvpath.util.references.reference_parser import ReferenceParser
11
10
  from csvpath.util.file_readers import DataFileReader
12
11
  from csvpath.util.file_writers import DataFileWriter
13
- from csvpath.util.box import Box
14
12
  from csvpath.util.nos import Nos
15
13
  from .paths_registrar import PathsRegistrar
16
14
  from .paths_metadata import PathsMetadata
@@ -470,7 +468,7 @@ class PathsManager:
470
468
  if assure_definition is True:
471
469
  t = self.get_json_paths_file(name)
472
470
  if t is None:
473
- raise ValueError(f"JSON definitionn for {name} cannot be None")
471
+ raise ValueError(f"JSON definition for {name} cannot be None")
474
472
  if name not in t:
475
473
  t[name] = []
476
474
  self.describer.store_json(name, t)
@@ -1,11 +1,7 @@
1
1
  # pylint: disable=C0114
2
2
  import os
3
- import json
4
3
  import re
5
- import traceback
6
4
  from uuid import UUID
7
- from pathlib import Path
8
- import datetime
9
5
  import dateutil.parser
10
6
  from typing import Dict, List, Any
11
7
  from csvpath.util.line_spooler import LineSpooler
@@ -40,6 +36,19 @@ class ResultsManager: # pylint: disable=C0115
40
36
  # use property
41
37
  self.csvpaths = csvpaths
42
38
  """@private"""
39
+ #
40
+ # the dynamic listeners are added to each Registrar before
41
+ # it distributes updates. we don't need this for the other
42
+ # managers (paths, files, errors) because they don't create
43
+ # new registrars each time. we can just do:
44
+ # paths.error_manager.registrar.add_internal_listeners(lst)
45
+ # but with these we cannot do that. we could change how this
46
+ # class handles listeners but it feels like a small additive
47
+ # is better than an unknown impact
48
+ #
49
+ self.dynamic_result_listeners = []
50
+ self.dynamic_results_listeners = []
51
+ self.dynamic_run_listeners = []
43
52
 
44
53
  @property
45
54
  def csvpaths(self):
@@ -59,6 +68,11 @@ class ResultsManager: # pylint: disable=C0115
59
68
  pathsname=pathsname,
60
69
  results=results,
61
70
  )
71
+ for _ in self.dynamic_results_listeners:
72
+ rr.add_internal_listener(_)
73
+ #
74
+ # add any dynamic listeners to the registrar here
75
+ #
62
76
  m = rr.manifest
63
77
  mdata = ResultsMetadata(self.csvpaths.config)
64
78
  if "time" not in m or m["time"] is None:
@@ -104,6 +118,12 @@ class ResultsManager: # pylint: disable=C0115
104
118
  run_dir=run_dir,
105
119
  pathsname=pathsname,
106
120
  )
121
+ #
122
+ # add any dynamic listeners to the registrar here
123
+ #
124
+ for _ in self.dynamic_results_listeners:
125
+ rr.add_internal_listener(_)
126
+
107
127
  #
108
128
  # collect the named-paths and named-file uuids. these may
109
129
  # need to come from a different source at some point but
@@ -337,6 +357,18 @@ class ResultsManager: # pylint: disable=C0115
337
357
  mdata.named_file_name = result.file_name
338
358
  mdata.method = result.method
339
359
  rr = RunRegistrar(self.csvpaths)
360
+ #
361
+ # add any dynamic listeners to the registrar here
362
+ #
363
+ print(f"regsman: me: {id(self)}")
364
+ print(f"regsman: my csvpaths: {id(self.csvpaths)}")
365
+ print(f"regsman: dylsi: {self.dynamic_run_listeners}")
366
+ from csvpath.util.log_utility import LogUtility as lout
367
+
368
+ lout.log_brief_trace()
369
+ for _ in self.dynamic_run_listeners:
370
+ print(f"regsman: adding int lsit: {_}")
371
+ rr.add_internal_listener(_)
340
372
  rr.register_start(mdata)
341
373
  #
342
374
  # we prep the results event
@@ -376,6 +408,11 @@ class ResultsManager: # pylint: disable=C0115
376
408
  rr = ResultRegistrar(
377
409
  csvpaths=self.csvpaths, result=result, result_serializer=rs
378
410
  )
411
+ #
412
+ # add any dynamic listeners to the registrar here
413
+ #
414
+ for _ in self.dynamic_result_listeners:
415
+ rr.add_internal_listener(_)
379
416
  rr.register_start(mdata)
380
417
 
381
418
  def set_named_results(self, results: Dict[str, List[Result]]) -> None:
@@ -464,8 +501,12 @@ class ResultsManager: # pylint: disable=C0115
464
501
  # exp! it would be good to offer a var sub here
465
502
  #
466
503
  if pathto:
467
- result.csvpath.config.set(section="_dummy-section", name="_dummy-name", value=pathto)
468
- pathto = result.csvpath.config.get(section="_dummy-section", name="_dummy-name")
504
+ result.csvpath.config.set(
505
+ section="_dummy-section", name="_dummy-name", value=pathto
506
+ )
507
+ pathto = result.csvpath.config.get(
508
+ section="_dummy-section", name="_dummy-name"
509
+ )
469
510
  #
470
511
  #
471
512
  #
@@ -559,9 +600,15 @@ class ResultsManager: # pylint: disable=C0115
559
600
  self.do_transfers_if(result)
560
601
  rs = ResultSerializer(self._csvpaths.config.archive_path)
561
602
  rs.save_result(result)
562
- ResultRegistrar(
603
+ rr = ResultRegistrar(
563
604
  csvpaths=self.csvpaths, result=result, result_serializer=rs
564
- ).register_complete()
605
+ )
606
+ #
607
+ # add any dynamic listeners to the registrar here
608
+ #
609
+ for _ in self.dynamic_result_listeners:
610
+ rr.add_internal_listener(_)
611
+ rr.register_complete()
565
612
 
566
613
  def remove_named_results(self, name: str) -> None:
567
614
  """@private"""
@@ -1,6 +1,4 @@
1
- from abc import ABC, abstractmethod
2
1
  from .metadata import Metadata
3
- from ..util.config import Config
4
2
  from .listener import Listener
5
3
 
6
4
 
@@ -13,6 +11,8 @@ class TestListener(Listener):
13
11
  def __init__(self, config=None) -> None:
14
12
  self._config = None
15
13
  super().__init__(config)
14
+ self.mine = None
16
15
 
17
16
  def metadata_update(self, mdata: Metadata) -> None:
18
17
  TestListener.METADATA = mdata
18
+ self.mine = mdata