csvpath 0.0.606__tar.gz → 0.0.609__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 (404) hide show
  1. {csvpath-0.0.606 → csvpath-0.0.609}/PKG-INFO +1 -1
  2. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/files/files_activation_listener.py +2 -4
  3. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/webhook/webhook_listener.py +56 -31
  4. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/webhook/webhook_results_listener.py +38 -1
  5. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/paths/paths_describer.py +7 -1
  6. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/results/results_manager.py +16 -1
  7. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/config.py +4 -1
  8. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/config_env.py +10 -17
  9. {csvpath-0.0.606 → csvpath-0.0.609}/pyproject.toml +1 -1
  10. {csvpath-0.0.606 → csvpath-0.0.609}/LICENSE +0 -0
  11. {csvpath-0.0.606 → csvpath-0.0.609}/README.md +0 -0
  12. {csvpath-0.0.606 → csvpath-0.0.609}/assets/.DS_Store +0 -0
  13. {csvpath-0.0.606 → csvpath-0.0.609}/assets/config/config.ini +0 -0
  14. {csvpath-0.0.606 → csvpath-0.0.609}/assets/config/extra-functions.imports +0 -0
  15. {csvpath-0.0.606 → csvpath-0.0.609}/assets/config/function.imports +0 -0
  16. {csvpath-0.0.606 → csvpath-0.0.609}/assets/config/jenkins-local-azure.ini +0 -0
  17. {csvpath-0.0.606 → csvpath-0.0.609}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
  18. {csvpath-0.0.606 → csvpath-0.0.609}/assets/config/jenkins-local-gcs.ini +0 -0
  19. {csvpath-0.0.606 → csvpath-0.0.609}/assets/config/jenkins-local-s3.ini +0 -0
  20. {csvpath-0.0.606 → csvpath-0.0.609}/assets/config/jenkins-local-sftp.ini +0 -0
  21. {csvpath-0.0.606 → csvpath-0.0.609}/assets/config/jenkins-windows-azure.ini +0 -0
  22. {csvpath-0.0.606 → csvpath-0.0.609}/assets/config/jenkins-windows-gcs.ini +0 -0
  23. {csvpath-0.0.606 → csvpath-0.0.609}/assets/config/jenkins-windows-local.ini +0 -0
  24. {csvpath-0.0.606 → csvpath-0.0.609}/assets/config/jenkins-windows-s3.ini +0 -0
  25. {csvpath-0.0.606 → csvpath-0.0.609}/assets/config/jenkins-windows-sftp.ini +0 -0
  26. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/.DS_Store +0 -0
  27. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/Mac.goenvironment.json +0 -0
  28. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/Windows.goenvironment.json +0 -0
  29. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
  30. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/mac/azure.sh +0 -0
  31. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/mac/gcs.sh +0 -0
  32. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/mac/google-pipeline.gopipeline.json +0 -0
  33. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
  34. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/mac/local.sh +0 -0
  35. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
  36. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/mac/s3.sh +0 -0
  37. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
  38. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/mac/sftp.sh +0 -0
  39. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/windows/azure.bat +0 -0
  40. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/windows/gcs.bat +0 -0
  41. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/windows/local.bat +0 -0
  42. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/windows/s3.bat +0 -0
  43. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/windows/sftp.bat +0 -0
  44. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
  45. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
  46. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
  47. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
  48. {csvpath-0.0.606 → csvpath-0.0.609}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
  49. {csvpath-0.0.606 → csvpath-0.0.609}/assets/integrations/.DS_Store +0 -0
  50. {csvpath-0.0.606 → csvpath-0.0.609}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
  51. {csvpath-0.0.606 → csvpath-0.0.609}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
  52. {csvpath-0.0.606 → csvpath-0.0.609}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
  53. {csvpath-0.0.606 → csvpath-0.0.609}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
  54. {csvpath-0.0.606 → csvpath-0.0.609}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
  55. {csvpath-0.0.606 → csvpath-0.0.609}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
  56. {csvpath-0.0.606 → csvpath-0.0.609}/assets/integrations/sqlite/csvpath +0 -0
  57. {csvpath-0.0.606 → csvpath-0.0.609}/assets/integrations/sqlite/schema.sql +0 -0
  58. {csvpath-0.0.606 → csvpath-0.0.609}/assets/libs/release_candidate_maker-0.0.25-py3-none-any.whl +0 -0
  59. {csvpath-0.0.606 → csvpath-0.0.609}/assets/libs/release_candidate_maker-0.0.27-py3-none-any.whl +0 -0
  60. {csvpath-0.0.606 → csvpath-0.0.609}/assets/libs/release_candidate_maker-0.0.28-py3-none-any.whl +0 -0
  61. {csvpath-0.0.606 → csvpath-0.0.609}/assets/libs/release_candidate_maker-0.0.29-py3-none-any.whl +0 -0
  62. {csvpath-0.0.606 → csvpath-0.0.609}/assets/libs/release_candidate_maker-0.0.30.tar.gz +0 -0
  63. {csvpath-0.0.606 → csvpath-0.0.609}/assets/libs/release_candidate_maker-0.0.31.tar.gz +0 -0
  64. {csvpath-0.0.606 → csvpath-0.0.609}/assets/libs/release_candidate_maker-0.0.33.tar.gz +0 -0
  65. {csvpath-0.0.606 → csvpath-0.0.609}/assets/libs/release_candidate_maker-0.0.34.tar.gz +0 -0
  66. {csvpath-0.0.606 → csvpath-0.0.609}/assets/libs/release_candidate_maker-0.0.35.tar.gz +0 -0
  67. {csvpath-0.0.606 → csvpath-0.0.609}/config/config.ini +0 -0
  68. {csvpath-0.0.606 → csvpath-0.0.609}/config/env.json +0 -0
  69. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/__init__.py +0 -0
  70. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/cli/__init__.py +0 -0
  71. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/cli/asker.py +0 -0
  72. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/cli/cli.py +0 -0
  73. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/cli/const.py +0 -0
  74. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/cli/debug_config.py +0 -0
  75. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/cli/drill_down.py +0 -0
  76. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/cli/function_describer.py +0 -0
  77. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/cli/function_lister.py +0 -0
  78. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/cli/selecter.py +0 -0
  79. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/csvpath.py +0 -0
  80. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/csvpaths.py +0 -0
  81. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/__init__.py +0 -0
  82. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/errors/error.py +0 -0
  83. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/errors/error_collector.py +0 -0
  84. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/errors/error_comms.py +0 -0
  85. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/errors/error_manager.py +0 -0
  86. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/files/file_activator.py +0 -0
  87. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/files/file_describer.py +0 -0
  88. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/files/file_manager.py +0 -0
  89. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/files/file_metadata.py +0 -0
  90. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/files/file_registrar.py +0 -0
  91. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/files/files_listener.py +0 -0
  92. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
  93. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ckan/ckan.py +0 -0
  94. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
  95. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ckan/datafile.py +0 -0
  96. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ckan/dataset.py +0 -0
  97. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ol/event.py +0 -0
  98. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ol/event_result.py +0 -0
  99. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
  100. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ol/job.py +0 -0
  101. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
  102. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
  103. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
  104. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
  105. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ol/run.py +0 -0
  106. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
  107. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ol/run_state.py +0 -0
  108. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/ol/sender.py +0 -0
  109. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
  110. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/otlp/metrics.py +0 -0
  111. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
  112. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
  113. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
  114. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
  115. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
  116. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
  117. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
  118. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
  119. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
  120. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sftpplus/rpc.py +0 -0
  121. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
  122. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
  123. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
  124. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/slack/event.py +0 -0
  125. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/slack/sender.py +0 -0
  126. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sql/engine.py +0 -0
  127. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
  128. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
  129. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
  130. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
  131. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
  132. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sql/tables.py +0 -0
  133. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sql/updates.py +0 -0
  134. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
  135. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
  136. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
  137. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/listener.py +0 -0
  138. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/metadata.py +0 -0
  139. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/paths/paths_listener.py +0 -0
  140. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/paths/paths_manager.py +0 -0
  141. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/paths/paths_metadata.py +0 -0
  142. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/paths/paths_registrar.py +0 -0
  143. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/registrar.py +0 -0
  144. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
  145. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
  146. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
  147. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
  148. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/results/readers/readers.py +0 -0
  149. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/results/result.py +0 -0
  150. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/results/result_file_reader.py +0 -0
  151. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/results/result_metadata.py +0 -0
  152. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/results/result_registrar.py +0 -0
  153. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/results/result_serializer.py +0 -0
  154. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/results/results_metadata.py +0 -0
  155. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/results/results_registrar.py +0 -0
  156. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/run/run_listener_stdout.py +0 -0
  157. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/run/run_metadata.py +0 -0
  158. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/run/run_registrar.py +0 -0
  159. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/managers/test_listener.py +0 -0
  160. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/__init__.py +0 -0
  161. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/__init__.py +0 -0
  162. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/args.py +0 -0
  163. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/args_helper.py +0 -0
  164. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/boolean/all.py +0 -0
  165. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/boolean/andf.py +0 -0
  166. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/boolean/any.py +0 -0
  167. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/boolean/between.py +0 -0
  168. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/boolean/empty.py +0 -0
  169. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/boolean/exists.py +0 -0
  170. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/boolean/inf.py +0 -0
  171. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/boolean/no.py +0 -0
  172. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/boolean/notf.py +0 -0
  173. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/boolean/orf.py +0 -0
  174. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/boolean/yes.py +0 -0
  175. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/counting/count.py +0 -0
  176. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/counting/count_bytes.py +0 -0
  177. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/counting/count_headers.py +0 -0
  178. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/counting/count_lines.py +0 -0
  179. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/counting/count_scans.py +0 -0
  180. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/counting/counter.py +0 -0
  181. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/counting/every.py +0 -0
  182. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/counting/has_matches.py +0 -0
  183. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/counting/increment.py +0 -0
  184. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/counting/tally.py +0 -0
  185. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/counting/total_lines.py +0 -0
  186. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/dates/now.py +0 -0
  187. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/dates/part.py +0 -0
  188. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/dates/roll.py +0 -0
  189. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/function.py +0 -0
  190. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/function_factory.py +0 -0
  191. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/function_finder.py +0 -0
  192. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/function_focus.py +0 -0
  193. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/append.py +0 -0
  194. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/collect.py +0 -0
  195. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/empty_stack.py +0 -0
  196. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/end.py +0 -0
  197. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/header_name.py +0 -0
  198. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
  199. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/headers.py +0 -0
  200. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/headers_stack.py +0 -0
  201. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/insert.py +0 -0
  202. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/line_before.py +0 -0
  203. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/mismatch.py +0 -0
  204. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/remove.py +0 -0
  205. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/rename.py +0 -0
  206. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/replace.py +0 -0
  207. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/headers/reset_headers.py +0 -0
  208. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/json/jsonpath.py +0 -0
  209. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/lines/advance.py +0 -0
  210. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/lines/after_blank.py +0 -0
  211. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/lines/dups.py +0 -0
  212. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/lines/first.py +0 -0
  213. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/lines/first_line.py +0 -0
  214. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/lines/last.py +0 -0
  215. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/lines/stop.py +0 -0
  216. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/math/above.py +0 -0
  217. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/math/add.py +0 -0
  218. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/math/divide.py +0 -0
  219. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/math/equals.py +0 -0
  220. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/math/intf.py +0 -0
  221. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/math/mod.py +0 -0
  222. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/math/multiply.py +0 -0
  223. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/math/odd.py +0 -0
  224. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/math/round.py +0 -0
  225. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/math/subtotal.py +0 -0
  226. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/math/subtract.py +0 -0
  227. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/math/sum.py +0 -0
  228. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/misc/fingerprint.py +0 -0
  229. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/misc/importf.py +0 -0
  230. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/misc/parquet.py +0 -0
  231. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/misc/random.py +0 -0
  232. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/print/jinjaf.py +0 -0
  233. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/print/print_line.py +0 -0
  234. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/print/print_queue.py +0 -0
  235. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/print/printf.py +0 -0
  236. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/print/table.py +0 -0
  237. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/sql/sql_in.py +0 -0
  238. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/stats/minf.py +0 -0
  239. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/stats/nminmax.py +0 -0
  240. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/stats/percent.py +0 -0
  241. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/stats/percent_unique.py +0 -0
  242. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/stats/stdev.py +0 -0
  243. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/strings/alter.py +0 -0
  244. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/strings/caps.py +0 -0
  245. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/strings/concat.py +0 -0
  246. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/strings/contains.py +0 -0
  247. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/strings/format.py +0 -0
  248. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/strings/length.py +0 -0
  249. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/strings/lower.py +0 -0
  250. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/strings/metaphone.py +0 -0
  251. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/strings/regex.py +0 -0
  252. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/strings/starts_with.py +0 -0
  253. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/strings/strip.py +0 -0
  254. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/strings/substring.py +0 -0
  255. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/strings/upper.py +0 -0
  256. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/testing/debug.py +0 -0
  257. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/types/__init__.py +0 -0
  258. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/types/blank.py +0 -0
  259. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/types/boolean.py +0 -0
  260. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/types/datatype.py +0 -0
  261. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/types/datef.py +0 -0
  262. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/types/decimal.py +0 -0
  263. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/types/email.py +0 -0
  264. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/types/nonef.py +0 -0
  265. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/types/string.py +0 -0
  266. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/types/type.py +0 -0
  267. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/types/url.py +0 -0
  268. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/types/wildcard.py +0 -0
  269. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/validity/fail.py +0 -0
  270. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/validity/failed.py +0 -0
  271. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/validity/line.py +0 -0
  272. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/validity/matches.py +0 -0
  273. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/validity/percent_matching.py +0 -0
  274. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/variables/clear.py +0 -0
  275. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/variables/get.py +0 -0
  276. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/variables/index_of.py +0 -0
  277. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/variables/pushpop.py +0 -0
  278. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/variables/put.py +0 -0
  279. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/variables/slice.py +0 -0
  280. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/variables/sort.py +0 -0
  281. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/variables/track.py +0 -0
  282. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/variables/variables.py +0 -0
  283. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/functions/xml/xpath.py +0 -0
  284. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/lark_parser.py +0 -0
  285. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/lark_transformer.py +0 -0
  286. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/matcher.py +0 -0
  287. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/productions/__init__.py +0 -0
  288. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/productions/equality.py +0 -0
  289. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/productions/expression.py +0 -0
  290. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/productions/header.py +0 -0
  291. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/productions/matchable.py +0 -0
  292. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/productions/qualified.py +0 -0
  293. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/productions/reference.py +0 -0
  294. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/productions/term.py +0 -0
  295. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/productions/variable.py +0 -0
  296. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/util/exceptions.py +0 -0
  297. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/util/expression_encoder.py +0 -0
  298. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/util/expression_utility.py +0 -0
  299. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/util/lark_print_parser.py +0 -0
  300. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/util/parquet_utility.py +0 -0
  301. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/util/print_parser.py +0 -0
  302. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/matching/util/runtime_data_collector.py +0 -0
  303. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/modes/error_mode.py +0 -0
  304. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/modes/explain_mode.py +0 -0
  305. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/modes/files_mode.py +0 -0
  306. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/modes/logic_mode.py +0 -0
  307. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/modes/mode_controller.py +0 -0
  308. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/modes/print_mode.py +0 -0
  309. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/modes/return_mode.py +0 -0
  310. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/modes/run_mode.py +0 -0
  311. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/modes/source_mode.py +0 -0
  312. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/modes/transfer_mode.py +0 -0
  313. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/modes/unmatched_mode.py +0 -0
  314. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/modes/validation_mode.py +0 -0
  315. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/scanning/__init__.py +0 -0
  316. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/scanning/scanner2.py +0 -0
  317. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/scanning/scanner2_parser.py +0 -0
  318. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/scanning/scanner2_transformer.py +0 -0
  319. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/azure/azure_data_reader.py +0 -0
  320. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/azure/azure_data_writer.py +0 -0
  321. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/azure/azure_fingerprinter.py +0 -0
  322. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/azure/azure_json_data_reader.py +0 -0
  323. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/azure/azure_nos.py +0 -0
  324. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/azure/azure_timing_policy.py +0 -0
  325. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/azure/azure_utils.py +0 -0
  326. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
  327. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/backend_check.py +0 -0
  328. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/box.py +0 -0
  329. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/cache.py +0 -0
  330. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/caser.py +0 -0
  331. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/class_loader.py +0 -0
  332. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/code.py +0 -0
  333. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/config_exception.py +0 -0
  334. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/date_util.py +0 -0
  335. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/exceptions.py +0 -0
  336. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/file_info.py +0 -0
  337. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/file_readers.py +0 -0
  338. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/file_utility.py +0 -0
  339. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/file_writers.py +0 -0
  340. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/gcs/gcs_data_reader.py +0 -0
  341. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/gcs/gcs_data_writer.py +0 -0
  342. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
  343. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/gcs/gcs_json_data_reader.py +0 -0
  344. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/gcs/gcs_nos.py +0 -0
  345. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/gcs/gcs_utils.py +0 -0
  346. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
  347. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/hasher.py +0 -0
  348. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/http/http_data_reader.py +0 -0
  349. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/intermediary.py +0 -0
  350. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/json/json_data_reader.py +0 -0
  351. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/json/json_reader_helper.py +0 -0
  352. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/last_line_stats.py +0 -0
  353. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/line_counter.py +0 -0
  354. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/line_monitor.py +0 -0
  355. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/line_spooler.py +0 -0
  356. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/log_utility.py +0 -0
  357. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/metadata_parser.py +0 -0
  358. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/nos.py +0 -0
  359. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/pandas_data_reader.py +0 -0
  360. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/path_util.py +0 -0
  361. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/printer.py +0 -0
  362. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/py_file_utility.py +0 -0
  363. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/files_reference_finder_2.py +0 -0
  364. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
  365. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/files_tools/range_finder.py +0 -0
  366. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/ref_utils.py +0 -0
  367. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/reference_exceptions.py +0 -0
  368. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/reference_grammar.py +0 -0
  369. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
  370. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/reference_parser.py +0 -0
  371. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/reference_results.py +0 -0
  372. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/reference_transformer.py +0 -0
  373. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/results_reference_finder_2.py +0 -0
  374. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/results_tools/data_finder.py +0 -0
  375. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/results_tools/date_filter.py +0 -0
  376. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/results_tools/identity_finder.py +0 -0
  377. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/results_tools/path_filter.py +0 -0
  378. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
  379. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/results_tools/token_filters.py +0 -0
  380. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
  381. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/references/tools/date_completer.py +0 -0
  382. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/referrer_printer.py +0 -0
  383. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/run_home_maker.py +0 -0
  384. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/s3/s3_data_reader.py +0 -0
  385. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/s3/s3_data_writer.py +0 -0
  386. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/s3/s3_fingerprinter.py +0 -0
  387. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/s3/s3_json_data_reader.py +0 -0
  388. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/s3/s3_nos.py +0 -0
  389. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/s3/s3_utils.py +0 -0
  390. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
  391. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/sftp/sftp_config.py +0 -0
  392. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/sftp/sftp_data_reader.py +0 -0
  393. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/sftp/sftp_data_writer.py +0 -0
  394. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
  395. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/sftp/sftp_json_data_reader.py +0 -0
  396. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/sftp/sftp_nos.py +0 -0
  397. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/sftp/sftp_walk.py +0 -0
  398. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
  399. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/sqliter.py +0 -0
  400. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/stopwatch.py +0 -0
  401. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/template_util.py +0 -0
  402. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/var_utility.py +0 -0
  403. {csvpath-0.0.606 → csvpath-0.0.609}/csvpath/util/xlsx/xlsx_data_reader.py +0 -0
  404. {csvpath-0.0.606 → csvpath-0.0.609}/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.606
3
+ Version: 0.0.609
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
@@ -1,7 +1,5 @@
1
- import requests
2
1
  import threading
3
2
 
4
- from abc import ABC
5
3
 
6
4
  from csvpath import CsvPaths
7
5
  from csvpath.managers.metadata import Metadata
@@ -28,6 +26,6 @@ class FileActivationListener(Listener, threading.Thread):
28
26
  csvpaths = CsvPaths()
29
27
  activator = csvpaths.file_manager.activator
30
28
  ref = mdata.named_file_ref
31
- csvpaths.logger.info("Activating for {ref} if any activation is configured")
29
+ csvpaths.logger.info(f"Activating for {ref} if any activation is configured")
32
30
  activator.activate_if(ref)
33
- csvpaths.logger.info("Activation for {ref} if any completed")
31
+ csvpaths.logger.info(f"Activation for {ref} if any completed")
@@ -1,11 +1,13 @@
1
1
  import requests
2
2
  import threading
3
+ import traceback
4
+ import json
3
5
 
4
- from abc import ABC
5
- from csvpath.util.box import Box
6
6
  from csvpath.managers.metadata import Metadata
7
7
  from csvpath.managers.listener import Listener
8
8
  from csvpath.matching.util.expression_utility import ExpressionUtility
9
+ from csvpath.util.file_writers import DataFileWriter
10
+ from csvpath.util.nos import Nos
9
11
 
10
12
  #
11
13
  # ~
@@ -22,8 +24,7 @@ from csvpath.matching.util.expression_utility import ExpressionUtility
22
24
  #
23
25
 
24
26
 
25
- class WebhookException(Exception):
26
- ...
27
+ class WebhookException(Exception): ...
27
28
 
28
29
 
29
30
  class WebhookListener(Listener, threading.Thread):
@@ -92,6 +93,7 @@ class WebhookListener(Listener, threading.Thread):
92
93
  try:
93
94
  self._do_hook_if(mdata=mdata, atype=t)
94
95
  except Exception as e:
96
+ print(traceback.format_exc())
95
97
  if isinstance(e, WebhookException):
96
98
  raise
97
99
  msg = f"WebhookListener could not call {t} webhook: {type(e)}: {e}"
@@ -108,30 +110,53 @@ class WebhookListener(Listener, threading.Thread):
108
110
  "Nothing to do for webhook url %s", WebhookListener.URLS[atype]
109
111
  )
110
112
  return
111
- payload = self._payload_for_type(mdata, atype)
112
- #
113
- # prep request
114
- #
115
- headers = {"Content-Type": "application/json"}
116
- #
117
- # send
118
- #
119
- x = requests.post(url, json=payload, headers=headers, timeout=self.timeout)
120
- if x and x.status_code != 200:
121
- if self.csvpaths is not None:
122
- self.csvpaths.logger.warning(
123
- "WebhookListener received status code %s from %s",
124
- x.status_code,
125
- "",
126
- )
127
- elif self.result is not None:
128
- self.result.csvpath.logger.warning(
129
- "WebhookListener received status code %s from %s",
130
- x.status_code,
131
- "",
132
- )
133
- else:
134
- msg = f"WebhookListener received status code {x.status_code} from {self.url}"
135
- self.csvpaths.logger.error(msg)
136
- if self.csvpaths.ecoms.do_i_raise():
137
- raise WebhookException(msg)
113
+ r = {"url": url}
114
+ try:
115
+ payload = self._payload_for_type(mdata, atype)
116
+ r["payload"] = payload
117
+ #
118
+ # prep request
119
+ #
120
+ headers = {"Content-Type": "application/json"}
121
+ headers = headers | self._headers_for_type(mdata, atype)
122
+ r["headers"] = headers
123
+ r["timeout"] = self.timeout
124
+ #
125
+ # send
126
+ #
127
+ x = requests.post(url, json=payload, headers=headers, timeout=self.timeout)
128
+ if x and x.status_code != 200:
129
+ if self.csvpaths is not None:
130
+ self.csvpaths.logger.warning(
131
+ "WebhookListener received status code %s from %s",
132
+ x.status_code,
133
+ "",
134
+ )
135
+ elif self.result is not None:
136
+ self.result.csvpath.logger.warning(
137
+ "WebhookListener received status code %s from %s",
138
+ x.status_code,
139
+ "",
140
+ )
141
+ else:
142
+ msg = f"WebhookListener received status code {x.status_code} from {self.url}"
143
+ self.csvpaths.logger.error(msg)
144
+ if self.csvpaths.ecoms.do_i_raise():
145
+ raise WebhookException(msg)
146
+ try:
147
+ r["response_json"] = x.json()
148
+ except requests.exceptions.JSONDecodeError:
149
+ ...
150
+ r["response"] = {"code": x.status_code, "text": x.text}
151
+ #
152
+ # save
153
+ #
154
+ nos = Nos(mdata.run_home)
155
+ path = nos.join(f"webhook-{atype}.json")
156
+ with DataFileWriter(path=path) as file:
157
+ file.write(json.dumps(r, indent=2))
158
+ except Exception:
159
+ print(traceback.format_exc())
160
+ raise
161
+ finally:
162
+ ...
@@ -64,7 +64,7 @@ class WebhookResultsListener(WebhookListener):
64
64
  return False
65
65
  return True
66
66
 
67
- def _url_for_type(self, mdata: Metadata, atype: str):
67
+ def _url_for_type(self, mdata: Metadata, atype: str) -> str:
68
68
  cfg = self.csvpaths.paths_manager.describer.get_webhooks(mdata.named_paths_name)
69
69
  if cfg is None:
70
70
  return None
@@ -79,6 +79,43 @@ class WebhookResultsListener(WebhookListener):
79
79
  else:
80
80
  raise ValueError(f"Unknown type: {atype}")
81
81
 
82
+ def _headers_for_type(self, mdata: Metadata, atype: str) -> dict:
83
+ cfg = self.csvpaths.paths_manager.describer.get_webhooks(mdata.named_paths_name)
84
+ if cfg is None:
85
+ return None
86
+ headers = None
87
+ if atype.find("all") > -1:
88
+ headers = cfg.on_complete_all.headers
89
+ elif atype.find("invalid") > -1:
90
+ headers = cfg.on_complete_invalid.headers
91
+ elif atype.find("valid") > -1:
92
+ headers = cfg.on_complete_valid.headers
93
+ elif atype.find("error") > -1:
94
+ headers = cfg.on_complete_error.headers
95
+ else:
96
+ raise ValueError(f"Unknown type: {atype}")
97
+ #
98
+ # get raw headers
99
+ #
100
+ _ = {}
101
+ if headers and len(headers) > 0:
102
+ _ = {
103
+ header.name: header.value
104
+ for header in headers
105
+ if header.name and header.value
106
+ }
107
+ #
108
+ # do var sub. this looks goofy but it will have the correct source and do {} var sub
109
+ #
110
+ faux = "___never_say_never___"
111
+ headers = {}
112
+ for k, v in _.items():
113
+ self.config.set(section=faux, name=k, value=v)
114
+ v = self.config.get(section=faux, name=k)
115
+ headers[k] = v
116
+ self.config.config_parser.remove_section(faux)
117
+ return headers
118
+
82
119
  def _payload_for_type(self, mdata: Metadata, atype: str) -> dict:
83
120
  if mdata is None:
84
121
  raise ValueError("Metadata cannot be None")
@@ -20,9 +20,15 @@ class Scripts(BaseModel):
20
20
  on_complete_error: Optional[str] = None
21
21
 
22
22
 
23
+ class Header(BaseModel):
24
+ name: Optional[str] = None
25
+ value: Optional[str] = None
26
+
27
+
23
28
  class Webhook(BaseModel):
24
29
  url: Optional[str] = None
25
30
  payload: Optional[str] = None
31
+ headers: list[Header] = []
26
32
 
27
33
 
28
34
  class Webhooks(BaseModel):
@@ -330,7 +336,7 @@ class NamedPathsDescriber:
330
336
  else:
331
337
  raise ValueError(f"Script {path} not found")
332
338
 
333
- # ========== scripts ============
339
+ # ========== webhooks ============
334
340
 
335
341
  def store_webhooks(self, name: NamedPathsName, w: Webhooks) -> None:
336
342
  config = self.get_config(name)
@@ -870,12 +870,23 @@ class ResultsManager: # pylint: disable=C0115
870
870
  instances = Nos(path).listdir()
871
871
  rs = [None for inst in instances if inst != "manifest.json"]
872
872
  for inst in instances:
873
- if inst == "manifest.json":
873
+ if inst.endswith(".json"):
874
+ #
875
+ # exp ^^^^
876
+ #
877
+ # if inst == "manifest.json":
874
878
  continue
875
879
  r = self.get_named_result_for_instance(
876
880
  name=name, run_dir=path, run=run, instance=inst
877
881
  )
878
882
  rs[r.index] = r
883
+ #
884
+ # exp. works well, it seems. the problem is that we begin to have more json files
885
+ # we were avoiding manifest.json. when we added more we had to skip more leaving
886
+ # more nulls where an item was found, added to the array, but then passed over.
887
+ # other changes above were less effective than simply removing the nulls.
888
+ #
889
+ rs = [_ for _ in rs if _ is not None]
879
890
  return rs
880
891
 
881
892
  def get_named_result_for_instance(
@@ -892,6 +903,10 @@ class ResultsManager: # pylint: disable=C0115
892
903
  #
893
904
  _ = ""
894
905
 
906
+ print(
907
+ f"resman: get_named_result_for_instance: {name}, {run_dir}, {run}, {instance}"
908
+ )
909
+
895
910
  if run_dir.endswith(f"/{instance}") or run_dir.endswith(f"\\{instance}"):
896
911
  instance_dir = run_dir
897
912
  else:
@@ -114,7 +114,7 @@ allow_local_files=True
114
114
 
115
115
  [listeners]
116
116
  # add listener group names to send events to the channel they represent
117
- groups = default
117
+ groups = default,activation
118
118
  #slack, openlineage, ckan, sftp, sftpplus, otlp, sqlite, sql
119
119
 
120
120
  # general purpose webhook caller
@@ -138,6 +138,9 @@ sqlite.result = from csvpath.managers.integrations.sqlite.sqlite_result_listener
138
138
  default.file = from csvpath.managers.files.files_listener import FilesListener
139
139
  default.paths = from csvpath.managers.paths.paths_listener import PathsListener
140
140
 
141
+ # adds a listener that uses info in a named-file descriptor to create a run when data arrives
142
+ activation.file = from csvpath.managers.files.files_activation_listener import FileActivationListener
143
+
141
144
  # add otlp to the list of groups above to push observability metrics to an OpenTelemetry endpoint
142
145
  otlp.result = from csvpath.managers.integrations.otlp.otlp_result_listener import OpenTelemetryResultListener
143
146
  otlp.results = from csvpath.managers.integrations.otlp.otlp_results_listener import OpenTelemetryResultsListener
@@ -35,14 +35,22 @@ class ConfigEnv:
35
35
  def var_sub_source(self) -> str:
36
36
  if self._var_sub_source is None:
37
37
  self._var_sub_source = self.config.get(
38
- section="config", name="var_sub_source", default="env", string_parse=False
38
+ section="config",
39
+ name="var_sub_source",
40
+ default="env",
41
+ string_parse=False,
39
42
  )
40
43
  return self._var_sub_source
41
44
 
42
45
  @property
43
46
  def allow_var_sub(self) -> bool:
44
47
  if self._allow is None:
45
- a = self.config.get(section="config", name="allow_var_sub", default=False, string_parse=False)
48
+ a = self.config.get(
49
+ section="config",
50
+ name="allow_var_sub",
51
+ default=False,
52
+ string_parse=False,
53
+ )
46
54
  self._allow = a and str(a).strip().lower() in ["true", "yes"]
47
55
  return self._allow
48
56
 
@@ -62,19 +70,6 @@ class ConfigEnv:
62
70
  try:
63
71
  if not self.nos(self.var_sub_source).exists():
64
72
  self.write_env_file({})
65
- """
66
- # cannot use DataFileWriter and DataFileReader because that would create a circular import.
67
- # with DataFileWriter(path=self.var_sub_source) as file:
68
- file = ClassLoader.load(
69
- "from csvpath.util.file_writers import DataFileWriter",
70
- [],
71
- {"path": self.var_sub_source},
72
- )
73
- file.__enter__()
74
- json.dump({}, file.sink, indent=4)
75
- file.__exit__(None, None, None)
76
- """
77
- # with DataFileReader(self.var_sub_source) as file:
78
73
  file = ClassLoader.load(
79
74
  "from csvpath.util.file_readers import DataFileReader",
80
75
  [self.var_sub_source],
@@ -87,8 +82,6 @@ class ConfigEnv:
87
82
  return self._env
88
83
 
89
84
  def write_env_file(self, j: dict) -> None:
90
- # cannot use DataFileWriter and DataFileReader because that would create a circular import.
91
- # with DataFileWriter(path=self.var_sub_source) as file:
92
85
  file = ClassLoader.load(
93
86
  "from csvpath.util.file_writers import DataFileWriter",
94
87
  [],
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "csvpath"
3
- version = "0.0.606"
3
+ version = "0.0.609"
4
4
  description = "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
  authors = ["David Kershaw <info@csvpath.org>"]
6
6
  readme = "README.md"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes