csvpath 0.0.608__tar.gz → 0.0.612__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 (417) hide show
  1. {csvpath-0.0.608 → csvpath-0.0.612}/PKG-INFO +1 -1
  2. {csvpath-0.0.608 → csvpath-0.0.612}/assets/.DS_Store +0 -0
  3. {csvpath-0.0.608 → csvpath-0.0.612}/assets/config/config.ini +1 -0
  4. {csvpath-0.0.608 → csvpath-0.0.612}/assets/config/jenkins-local-azure.ini +1 -0
  5. {csvpath-0.0.608 → csvpath-0.0.612}/assets/config/jenkins-local-filesystem-mysql.ini +1 -0
  6. {csvpath-0.0.608 → csvpath-0.0.612}/assets/config/jenkins-local-gcs.ini +4 -3
  7. {csvpath-0.0.608 → csvpath-0.0.612}/assets/config/jenkins-local-s3.ini +4 -3
  8. {csvpath-0.0.608 → csvpath-0.0.612}/assets/config/jenkins-local-sftp.ini +4 -3
  9. {csvpath-0.0.608 → csvpath-0.0.612}/assets/config/jenkins-windows-azure.ini +1 -0
  10. {csvpath-0.0.608 → csvpath-0.0.612}/assets/config/jenkins-windows-gcs.ini +1 -0
  11. {csvpath-0.0.608 → csvpath-0.0.612}/assets/config/jenkins-windows-local.ini +1 -0
  12. {csvpath-0.0.608 → csvpath-0.0.612}/assets/config/jenkins-windows-s3.ini +1 -0
  13. {csvpath-0.0.608 → csvpath-0.0.612}/assets/config/jenkins-windows-sftp.ini +1 -0
  14. {csvpath-0.0.608 → csvpath-0.0.612}/config/config.ini +4 -3
  15. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/csvpath.py +26 -15
  16. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/csvpaths.py +12 -0
  17. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/files/file_describer.py +39 -1
  18. csvpath-0.0.612/csvpath/managers/files/file_descriptor.py +70 -0
  19. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/files/file_manager.py +213 -45
  20. csvpath-0.0.612/csvpath/managers/files/file_names_rules.py +24 -0
  21. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/files/lines_and_headers_cacher.py +9 -4
  22. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/webhook/webhook_listener.py +61 -28
  23. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/paths/paths_describer.py +41 -42
  24. csvpath-0.0.612/csvpath/managers/paths/paths_descriptor.py +93 -0
  25. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/paths/paths_manager.py +2 -1
  26. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/results/result_registrar.py +1 -2
  27. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/results/result_serializer.py +60 -6
  28. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/results/results_manager.py +29 -134
  29. csvpath-0.0.612/csvpath/managers/results/transfers_manager.py +316 -0
  30. csvpath-0.0.612/csvpath/managers/server_config.py +22 -0
  31. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/function_factory.py +11 -0
  32. csvpath-0.0.612/csvpath/matching/functions/misc/env.py +35 -0
  33. csvpath-0.0.612/csvpath/matching/functions/misc/metadata.py +37 -0
  34. csvpath-0.0.612/csvpath/matching/functions/misc/runtime.py +36 -0
  35. csvpath-0.0.612/csvpath/matching/functions/sql/select.py +136 -0
  36. csvpath-0.0.612/csvpath/matching/functions/types/__init__.py +12 -0
  37. csvpath-0.0.612/csvpath/matching/functions/types/uuid.py +56 -0
  38. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/validity/line.py +3 -3
  39. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/variables/pushpop.py +10 -8
  40. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/productions/qualified.py +19 -4
  41. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/util/runtime_data_collector.py +132 -0
  42. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/modes/print_mode.py +14 -3
  43. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/scanning/scanner2.py +63 -9
  44. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/azure/azure_data_writer.py +0 -3
  45. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/azure/azure_utils.py +1 -1
  46. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/box.py +3 -1
  47. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/cache.py +11 -3
  48. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/config.py +2 -2
  49. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/config_env.py +20 -28
  50. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/date_util.py +0 -7
  51. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/http/http_data_reader.py +8 -13
  52. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/nos.py +40 -3
  53. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/path_util.py +11 -0
  54. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/reference_manifest_entry_finder.py +10 -3
  55. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/reference_results.py +16 -0
  56. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/run_home_maker.py +10 -3
  57. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/sftp/sftp_data_reader.py +117 -50
  58. csvpath-0.0.612/csvpath/util/sftp/sftp_data_writer.py +95 -0
  59. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/sftp/sftp_nos.py +21 -18
  60. csvpath-0.0.612/csvpath/util/sftp/sftp_server_creds.py +38 -0
  61. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/template_util.py +52 -1
  62. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/var_utility.py +14 -0
  63. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/xlsx/xlsx_reader_helper.py +17 -2
  64. {csvpath-0.0.608 → csvpath-0.0.612}/pyproject.toml +1 -1
  65. csvpath-0.0.608/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -108
  66. csvpath-0.0.608/csvpath/managers/integrations/sftpplus/rpc.py +0 -97
  67. csvpath-0.0.608/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -229
  68. csvpath-0.0.608/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -268
  69. csvpath-0.0.608/csvpath/managers/integrations/sftpplus/transfers.py +0 -53
  70. csvpath-0.0.608/csvpath/matching/functions/types/__init__.py +0 -11
  71. csvpath-0.0.608/csvpath/util/sftp/sftp_data_writer.py +0 -65
  72. {csvpath-0.0.608 → csvpath-0.0.612}/LICENSE +0 -0
  73. {csvpath-0.0.608 → csvpath-0.0.612}/README.md +0 -0
  74. {csvpath-0.0.608 → csvpath-0.0.612}/assets/config/extra-functions.imports +0 -0
  75. {csvpath-0.0.608 → csvpath-0.0.612}/assets/config/function.imports +0 -0
  76. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/.DS_Store +0 -0
  77. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/Mac.goenvironment.json +0 -0
  78. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/Windows.goenvironment.json +0 -0
  79. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
  80. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/mac/azure.sh +0 -0
  81. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/mac/gcs.sh +0 -0
  82. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/mac/google-pipeline.gopipeline.json +0 -0
  83. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
  84. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/mac/local.sh +0 -0
  85. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
  86. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/mac/s3.sh +0 -0
  87. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
  88. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/mac/sftp.sh +0 -0
  89. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/windows/azure.bat +0 -0
  90. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/windows/gcs.bat +0 -0
  91. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/windows/local.bat +0 -0
  92. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/windows/s3.bat +0 -0
  93. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/windows/sftp.bat +0 -0
  94. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
  95. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
  96. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
  97. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
  98. {csvpath-0.0.608 → csvpath-0.0.612}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
  99. {csvpath-0.0.608 → csvpath-0.0.612}/assets/integrations/.DS_Store +0 -0
  100. {csvpath-0.0.608 → csvpath-0.0.612}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
  101. {csvpath-0.0.608 → csvpath-0.0.612}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
  102. {csvpath-0.0.608 → csvpath-0.0.612}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
  103. {csvpath-0.0.608 → csvpath-0.0.612}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
  104. {csvpath-0.0.608 → csvpath-0.0.612}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
  105. {csvpath-0.0.608 → csvpath-0.0.612}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
  106. {csvpath-0.0.608 → csvpath-0.0.612}/assets/integrations/sqlite/csvpath +0 -0
  107. {csvpath-0.0.608 → csvpath-0.0.612}/assets/integrations/sqlite/schema.sql +0 -0
  108. {csvpath-0.0.608 → csvpath-0.0.612}/assets/libs/release_candidate_maker-0.0.25-py3-none-any.whl +0 -0
  109. {csvpath-0.0.608 → csvpath-0.0.612}/assets/libs/release_candidate_maker-0.0.27-py3-none-any.whl +0 -0
  110. {csvpath-0.0.608 → csvpath-0.0.612}/assets/libs/release_candidate_maker-0.0.28-py3-none-any.whl +0 -0
  111. {csvpath-0.0.608 → csvpath-0.0.612}/assets/libs/release_candidate_maker-0.0.29-py3-none-any.whl +0 -0
  112. {csvpath-0.0.608 → csvpath-0.0.612}/assets/libs/release_candidate_maker-0.0.30.tar.gz +0 -0
  113. {csvpath-0.0.608 → csvpath-0.0.612}/assets/libs/release_candidate_maker-0.0.31.tar.gz +0 -0
  114. {csvpath-0.0.608 → csvpath-0.0.612}/assets/libs/release_candidate_maker-0.0.33.tar.gz +0 -0
  115. {csvpath-0.0.608 → csvpath-0.0.612}/assets/libs/release_candidate_maker-0.0.34.tar.gz +0 -0
  116. {csvpath-0.0.608 → csvpath-0.0.612}/assets/libs/release_candidate_maker-0.0.35.tar.gz +0 -0
  117. {csvpath-0.0.608 → csvpath-0.0.612}/config/env.json +0 -0
  118. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/__init__.py +0 -0
  119. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/cli/__init__.py +0 -0
  120. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/cli/asker.py +0 -0
  121. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/cli/cli.py +0 -0
  122. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/cli/const.py +0 -0
  123. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/cli/debug_config.py +0 -0
  124. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/cli/drill_down.py +0 -0
  125. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/cli/function_describer.py +0 -0
  126. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/cli/function_lister.py +0 -0
  127. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/cli/selecter.py +0 -0
  128. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/__init__.py +0 -0
  129. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/errors/error.py +0 -0
  130. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/errors/error_collector.py +0 -0
  131. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/errors/error_comms.py +0 -0
  132. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/errors/error_manager.py +0 -0
  133. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/files/file_activator.py +0 -0
  134. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/files/file_metadata.py +0 -0
  135. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/files/file_registrar.py +0 -0
  136. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/files/files_activation_listener.py +0 -0
  137. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/files/files_listener.py +0 -0
  138. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ckan/ckan.py +0 -0
  139. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
  140. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ckan/datafile.py +0 -0
  141. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ckan/dataset.py +0 -0
  142. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ol/event.py +0 -0
  143. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ol/event_result.py +0 -0
  144. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
  145. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ol/job.py +0 -0
  146. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
  147. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
  148. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
  149. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
  150. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ol/run.py +0 -0
  151. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
  152. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ol/run_state.py +0 -0
  153. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/ol/sender.py +0 -0
  154. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
  155. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/otlp/metrics.py +0 -0
  156. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
  157. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
  158. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
  159. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
  160. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
  161. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
  162. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
  163. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
  164. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/slack/event.py +0 -0
  165. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/slack/sender.py +0 -0
  166. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/sql/engine.py +0 -0
  167. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
  168. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
  169. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
  170. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
  171. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
  172. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/sql/tables.py +0 -0
  173. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/sql/updates.py +0 -0
  174. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
  175. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
  176. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
  177. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/integrations/webhook/webhook_results_listener.py +0 -0
  178. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/listener.py +0 -0
  179. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/metadata.py +0 -0
  180. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/paths/paths_listener.py +0 -0
  181. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/paths/paths_metadata.py +0 -0
  182. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/paths/paths_registrar.py +0 -0
  183. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/registrar.py +0 -0
  184. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
  185. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
  186. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
  187. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
  188. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/results/readers/readers.py +0 -0
  189. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/results/result.py +0 -0
  190. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/results/result_file_reader.py +0 -0
  191. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/results/result_metadata.py +0 -0
  192. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/results/results_metadata.py +0 -0
  193. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/results/results_registrar.py +0 -0
  194. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/run/run_listener_stdout.py +0 -0
  195. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/run/run_metadata.py +0 -0
  196. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/run/run_registrar.py +0 -0
  197. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/managers/test_listener.py +0 -0
  198. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/__init__.py +0 -0
  199. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/__init__.py +0 -0
  200. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/args.py +0 -0
  201. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/args_helper.py +0 -0
  202. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/boolean/all.py +0 -0
  203. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/boolean/andf.py +0 -0
  204. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/boolean/any.py +0 -0
  205. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/boolean/between.py +0 -0
  206. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/boolean/empty.py +0 -0
  207. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/boolean/exists.py +0 -0
  208. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/boolean/inf.py +0 -0
  209. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/boolean/no.py +0 -0
  210. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/boolean/notf.py +0 -0
  211. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/boolean/orf.py +0 -0
  212. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/boolean/yes.py +0 -0
  213. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/counting/count.py +0 -0
  214. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/counting/count_bytes.py +0 -0
  215. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/counting/count_headers.py +0 -0
  216. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/counting/count_lines.py +0 -0
  217. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/counting/count_scans.py +0 -0
  218. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/counting/counter.py +0 -0
  219. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/counting/every.py +0 -0
  220. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/counting/has_matches.py +0 -0
  221. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/counting/increment.py +0 -0
  222. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/counting/tally.py +0 -0
  223. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/counting/total_lines.py +0 -0
  224. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/dates/now.py +0 -0
  225. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/dates/part.py +0 -0
  226. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/dates/roll.py +0 -0
  227. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/function.py +0 -0
  228. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/function_finder.py +0 -0
  229. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/function_focus.py +0 -0
  230. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/append.py +0 -0
  231. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/collect.py +0 -0
  232. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/empty_stack.py +0 -0
  233. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/end.py +0 -0
  234. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/header_name.py +0 -0
  235. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
  236. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/headers.py +0 -0
  237. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/headers_stack.py +0 -0
  238. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/insert.py +0 -0
  239. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/line_before.py +0 -0
  240. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/mismatch.py +0 -0
  241. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/remove.py +0 -0
  242. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/rename.py +0 -0
  243. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/replace.py +0 -0
  244. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/headers/reset_headers.py +0 -0
  245. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/json/jsonpath.py +0 -0
  246. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/lines/advance.py +0 -0
  247. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/lines/after_blank.py +0 -0
  248. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/lines/dups.py +0 -0
  249. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/lines/first.py +0 -0
  250. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/lines/first_line.py +0 -0
  251. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/lines/last.py +0 -0
  252. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/lines/stop.py +0 -0
  253. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/math/above.py +0 -0
  254. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/math/add.py +0 -0
  255. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/math/divide.py +0 -0
  256. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/math/equals.py +0 -0
  257. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/math/intf.py +0 -0
  258. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/math/mod.py +0 -0
  259. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/math/multiply.py +0 -0
  260. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/math/odd.py +0 -0
  261. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/math/round.py +0 -0
  262. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/math/subtotal.py +0 -0
  263. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/math/subtract.py +0 -0
  264. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/math/sum.py +0 -0
  265. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/misc/fingerprint.py +0 -0
  266. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/misc/importf.py +0 -0
  267. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/misc/parquet.py +0 -0
  268. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/misc/random.py +0 -0
  269. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/print/jinjaf.py +0 -0
  270. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/print/print_line.py +0 -0
  271. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/print/print_queue.py +0 -0
  272. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/print/printf.py +0 -0
  273. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/print/table.py +0 -0
  274. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/sql/sql_in.py +0 -0
  275. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/stats/minf.py +0 -0
  276. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/stats/nminmax.py +0 -0
  277. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/stats/percent.py +0 -0
  278. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/stats/percent_unique.py +0 -0
  279. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/stats/stdev.py +0 -0
  280. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/strings/alter.py +0 -0
  281. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/strings/caps.py +0 -0
  282. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/strings/concat.py +0 -0
  283. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/strings/contains.py +0 -0
  284. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/strings/format.py +0 -0
  285. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/strings/length.py +0 -0
  286. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/strings/lower.py +0 -0
  287. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/strings/metaphone.py +0 -0
  288. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/strings/regex.py +0 -0
  289. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/strings/starts_with.py +0 -0
  290. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/strings/strip.py +0 -0
  291. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/strings/substring.py +0 -0
  292. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/strings/upper.py +0 -0
  293. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/testing/debug.py +0 -0
  294. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/types/blank.py +0 -0
  295. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/types/boolean.py +0 -0
  296. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/types/datatype.py +0 -0
  297. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/types/datef.py +0 -0
  298. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/types/decimal.py +0 -0
  299. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/types/email.py +0 -0
  300. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/types/nonef.py +0 -0
  301. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/types/string.py +0 -0
  302. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/types/type.py +0 -0
  303. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/types/url.py +0 -0
  304. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/types/wildcard.py +0 -0
  305. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/validity/fail.py +0 -0
  306. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/validity/failed.py +0 -0
  307. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/validity/matches.py +0 -0
  308. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/validity/percent_matching.py +0 -0
  309. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/variables/clear.py +0 -0
  310. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/variables/get.py +0 -0
  311. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/variables/index_of.py +0 -0
  312. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/variables/put.py +0 -0
  313. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/variables/slice.py +0 -0
  314. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/variables/sort.py +0 -0
  315. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/variables/track.py +0 -0
  316. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/variables/variables.py +0 -0
  317. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/functions/xml/xpath.py +0 -0
  318. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/lark_parser.py +0 -0
  319. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/lark_transformer.py +0 -0
  320. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/matcher.py +0 -0
  321. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/productions/__init__.py +0 -0
  322. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/productions/equality.py +0 -0
  323. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/productions/expression.py +0 -0
  324. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/productions/header.py +0 -0
  325. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/productions/matchable.py +0 -0
  326. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/productions/reference.py +0 -0
  327. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/productions/term.py +0 -0
  328. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/productions/variable.py +0 -0
  329. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/util/exceptions.py +0 -0
  330. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/util/expression_encoder.py +0 -0
  331. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/util/expression_utility.py +0 -0
  332. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/util/lark_print_parser.py +0 -0
  333. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/util/parquet_utility.py +0 -0
  334. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/matching/util/print_parser.py +0 -0
  335. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/modes/error_mode.py +0 -0
  336. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/modes/explain_mode.py +0 -0
  337. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/modes/files_mode.py +0 -0
  338. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/modes/logic_mode.py +0 -0
  339. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/modes/mode_controller.py +0 -0
  340. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/modes/return_mode.py +0 -0
  341. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/modes/run_mode.py +0 -0
  342. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/modes/source_mode.py +0 -0
  343. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/modes/transfer_mode.py +0 -0
  344. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/modes/unmatched_mode.py +0 -0
  345. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/modes/validation_mode.py +0 -0
  346. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/scanning/__init__.py +0 -0
  347. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/scanning/scanner2_parser.py +0 -0
  348. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/scanning/scanner2_transformer.py +0 -0
  349. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/azure/azure_data_reader.py +0 -0
  350. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/azure/azure_fingerprinter.py +0 -0
  351. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/azure/azure_json_data_reader.py +0 -0
  352. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/azure/azure_nos.py +0 -0
  353. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/azure/azure_timing_policy.py +0 -0
  354. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
  355. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/backend_check.py +0 -0
  356. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/caser.py +0 -0
  357. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/class_loader.py +0 -0
  358. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/code.py +0 -0
  359. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/config_exception.py +0 -0
  360. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/exceptions.py +0 -0
  361. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/file_info.py +0 -0
  362. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/file_readers.py +0 -0
  363. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/file_utility.py +0 -0
  364. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/file_writers.py +0 -0
  365. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/gcs/gcs_data_reader.py +0 -0
  366. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/gcs/gcs_data_writer.py +0 -0
  367. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
  368. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/gcs/gcs_json_data_reader.py +0 -0
  369. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/gcs/gcs_nos.py +0 -0
  370. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/gcs/gcs_utils.py +0 -0
  371. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
  372. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/hasher.py +0 -0
  373. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/intermediary.py +0 -0
  374. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/json/json_data_reader.py +0 -0
  375. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/json/json_reader_helper.py +0 -0
  376. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/last_line_stats.py +0 -0
  377. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/line_counter.py +0 -0
  378. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/line_monitor.py +0 -0
  379. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/line_spooler.py +0 -0
  380. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/log_utility.py +0 -0
  381. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/metadata_parser.py +0 -0
  382. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/pandas_data_reader.py +0 -0
  383. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/printer.py +0 -0
  384. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/py_file_utility.py +0 -0
  385. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/files_reference_finder_2.py +0 -0
  386. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
  387. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/files_tools/range_finder.py +0 -0
  388. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/ref_utils.py +0 -0
  389. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/reference_exceptions.py +0 -0
  390. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/reference_grammar.py +0 -0
  391. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/reference_parser.py +0 -0
  392. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/reference_transformer.py +0 -0
  393. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/results_reference_finder_2.py +0 -0
  394. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/results_tools/data_finder.py +0 -0
  395. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/results_tools/date_filter.py +0 -0
  396. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/results_tools/identity_finder.py +0 -0
  397. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/results_tools/path_filter.py +0 -0
  398. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
  399. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/results_tools/token_filters.py +0 -0
  400. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
  401. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/references/tools/date_completer.py +0 -0
  402. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/referrer_printer.py +0 -0
  403. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/s3/s3_data_reader.py +0 -0
  404. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/s3/s3_data_writer.py +0 -0
  405. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/s3/s3_fingerprinter.py +0 -0
  406. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/s3/s3_json_data_reader.py +0 -0
  407. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/s3/s3_nos.py +0 -0
  408. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/s3/s3_utils.py +0 -0
  409. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
  410. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/sftp/sftp_config.py +0 -0
  411. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
  412. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/sftp/sftp_json_data_reader.py +0 -0
  413. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/sftp/sftp_walk.py +0 -0
  414. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
  415. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/sqliter.py +0 -0
  416. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/stopwatch.py +0 -0
  417. {csvpath-0.0.608 → csvpath-0.0.612}/csvpath/util/xlsx/xlsx_data_reader.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: csvpath
3
- Version: 0.0.608
3
+ Version: 0.0.612
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
@@ -35,6 +35,7 @@ use_cache = yes
35
35
 
36
36
  [results]
37
37
  archive = tmp/local/archive
38
+ transfers = tmp/local/transfers
38
39
 
39
40
  [inputs]
40
41
  files = tmp/local/inputs/named_files
@@ -35,6 +35,7 @@ imports =
35
35
 
36
36
  [results]
37
37
  archive = tmp/azure/archive
38
+ transfers = tmp/azure/transfers
38
39
 
39
40
  [inputs]
40
41
  files = azure://csvpath/mac/inputs/named_files
@@ -29,6 +29,7 @@ imports =
29
29
 
30
30
  [results]
31
31
  archive = tmp/mysql/archive
32
+ transfers = tmp/mysql/transfers
32
33
 
33
34
  [inputs]
34
35
  files = tmp/mysql/inputs/named_files
@@ -31,10 +31,11 @@ path = cache
31
31
  use_cache = no
32
32
 
33
33
  [functions]
34
- imports =
34
+ imports =
35
35
 
36
36
  [results]
37
37
  archive = tmp/gcs/archive
38
+ transfers = tmp/gcs/transfers
38
39
 
39
40
  [inputs]
40
41
  files = gs://csvpath-testing-1/mac/inputs/named_files
@@ -90,7 +91,7 @@ port = SFTPPLUS_PORT
90
91
  admin_username = SFTPPLUS_ADMIN_USERNAME
91
92
  admin_password = SFTPPLUS_ADMIN_PASSWORD
92
93
  api_url = https://. . . :10020/json
93
- scripts_dir =
94
+ scripts_dir =
94
95
  execute_timeout = 300
95
96
 
96
97
  [ckan]
@@ -105,5 +106,5 @@ timeout = 5
105
106
  verify = False
106
107
 
107
108
  [slack]
108
- webhook_url =
109
+ webhook_url =
109
110
 
@@ -31,10 +31,11 @@ path = cache
31
31
  use_cache = no
32
32
 
33
33
  [functions]
34
- imports =
34
+ imports =
35
35
 
36
36
  [results]
37
37
  archive = tmp/s3/archive
38
+ transfers = tmp/s3/transfers
38
39
 
39
40
  [inputs]
40
41
  files = s3://csvpath-example-1/mac/inputs/named_files
@@ -90,7 +91,7 @@ port = SFTPPLUS_PORT
90
91
  admin_username = SFTPPLUS_ADMIN_USERNAME
91
92
  admin_password = SFTPPLUS_ADMIN_PASSWORD
92
93
  api_url = https://. . . :10020/json
93
- scripts_dir =
94
+ scripts_dir =
94
95
  execute_timeout = 300
95
96
 
96
97
  [ckan]
@@ -105,5 +106,5 @@ timeout = 5
105
106
  verify = False
106
107
 
107
108
  [slack]
108
- webhook_url =
109
+ webhook_url =
109
110
 
@@ -25,10 +25,11 @@ path = cache
25
25
  use_cache = no
26
26
 
27
27
  [functions]
28
- imports =
28
+ imports =
29
29
 
30
30
  [results]
31
31
  archive = tmp/sftp/archive
32
+ transfers = tmp/sftp/transfers
32
33
 
33
34
  [inputs]
34
35
  files = sftp://{SFTP_SERVER}:{SFTP_PORT}/mac/inputs/named_files
@@ -94,7 +95,7 @@ port = SFTPPLUS_PORT
94
95
  admin_username = SFTPPLUS_ADMIN_USERNAME
95
96
  admin_password = SFTPPLUS_ADMIN_PASSWORD
96
97
  api_url = https://. . . :10020/json
97
- scripts_dir =
98
+ scripts_dir =
98
99
  execute_timeout = 300
99
100
 
100
101
  [ckan]
@@ -109,5 +110,5 @@ timeout = 5
109
110
  verify = False
110
111
 
111
112
  [slack]
112
- webhook_url =
113
+ webhook_url =
113
114
 
@@ -30,6 +30,7 @@ imports =
30
30
 
31
31
  [results]
32
32
  archive = tmp\azure\archive
33
+ transfers = tmp\azure\transfers
33
34
 
34
35
  [inputs]
35
36
  files = azure://csvpath/windows/inputs/named_files
@@ -29,6 +29,7 @@ imports =
29
29
 
30
30
  [results]
31
31
  archive = tmp\gcs\archive
32
+ transfers = tmp\gcs\transfers
32
33
 
33
34
  [inputs]
34
35
  files = gs://csvpath-testing-1/windows/inputs/named_files
@@ -30,6 +30,7 @@ imports =
30
30
 
31
31
  [results]
32
32
  archive = tmp\local\archive
33
+ transfers = tmp\local\transfers
33
34
 
34
35
  [inputs]
35
36
  files = tmp\local\inputs\named_files
@@ -35,6 +35,7 @@ imports =
35
35
 
36
36
  [results]
37
37
  archive = tmp\s3\archive
38
+ transfers = tmp\s3\transfers
38
39
 
39
40
  [inputs]
40
41
  files = s3://csvpath-example-1/windows/inputs/named_files
@@ -38,6 +38,7 @@ imports =
38
38
 
39
39
  [results]
40
40
  archive = tmp\sftp\archive
41
+ transfers = tmp\sftp\transfers
41
42
 
42
43
  [inputs]
43
44
  files = sftp://{SFTP_SERVER}:{SFTP_PORT}/windows/inputs/named_files
@@ -35,10 +35,11 @@ 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
42
+ transfers = tmp/transfers
42
43
 
43
44
  [inputs]
44
45
  files = tmp/local/inputs/named_files
@@ -105,7 +106,7 @@ port = SFTPPLUS_PORT
105
106
  admin_username = SFTPPLUS_ADMIN_USERNAME
106
107
  admin_password = SFTPPLUS_ADMIN_PASSWORD
107
108
  api_url = https://. . . :10020/json
108
- scripts_dir =
109
+ scripts_dir =
109
110
  execute_timeout = 300
110
111
 
111
112
  [ckan]
@@ -120,7 +121,7 @@ timeout = 5
120
121
  verify = False
121
122
 
122
123
  [slack]
123
- webhook_url =
124
+ webhook_url =
124
125
 
125
126
  [scripts]
126
127
  run_scripts = yes
@@ -1,14 +1,13 @@
1
- """ CsvPath is the main class for the library. most of the magic
2
- happens either here or in individual functions. """ # pylint: disable=C0302
1
+ """CsvPath is the main class for the library. most of the magic
2
+ happens either here or in individual functions.""" # pylint: disable=C0302
3
3
 
4
4
  import time
5
5
  import os
6
6
  import hashlib
7
7
  import traceback
8
- from datetime import datetime, timezone
8
+ from datetime import datetime
9
9
  from typing import List, Dict, Any, Optional, Callable
10
10
  from collections.abc import Iterator
11
- from abc import ABC, abstractmethod
12
11
  from .util.config import Config
13
12
  from .util.line_monitor import LineMonitor
14
13
  from .util.log_utility import LogUtility as lout
@@ -238,7 +237,7 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
238
237
  #
239
238
  self._save_scan_dir = None
240
239
  self._save_match_dir = None
241
- self._run_name = None
240
+ self._run_dir = None
242
241
  #
243
242
  # metadata is collected from "outer" csvpath comments. outer comments
244
243
  # separate from the comments within the match part of the csvpath.
@@ -282,6 +281,14 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
282
281
  self._unmatched = None
283
282
  self._cacher = None
284
283
 
284
+ @property
285
+ def run_dir(self) -> str:
286
+ return self._run_dir
287
+
288
+ @run_dir.setter
289
+ def run_dir(self, d: str) -> None:
290
+ self._run_dir = d
291
+
285
292
  @property
286
293
  def logger(self):
287
294
  if self._logger is None:
@@ -293,6 +300,8 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
293
300
  self._logger = ler
294
301
 
295
302
  def __del__(self) -> None:
303
+ self.csvpaths = None
304
+ self.matcher = None
296
305
  try:
297
306
  # in a test on windows 0.0.570 we see self has no error_manager attribute
298
307
  # that is surprising since there is one ^^^^. no idea. this test is cheap tho.
@@ -303,6 +312,7 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
303
312
  ):
304
313
  self.error_manager.error_metrics.provider.shutdown()
305
314
  self.error_manager.error_metrics = None
315
+ self.error_manager = None
306
316
  lout.release_logger(self)
307
317
  except Exception:
308
318
  print(traceback.format_exc())
@@ -586,6 +596,10 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
586
596
  """@private"""
587
597
  return self.modes.validation_mode.collect_validation_errors
588
598
 
599
+ @property
600
+ def consolidate_printouts(self) -> bool:
601
+ return self.modes.print_mode.consolidate_printouts
602
+
589
603
  def add_printer(self, printer) -> None: # pylint: disable=C0116
590
604
  """@private"""
591
605
  if printer not in self.printers:
@@ -739,7 +753,8 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
739
753
  # - run-mode: no-run | run
740
754
  # - unmatched-mode: no-keep | keep
741
755
  # - source-mode: preceding | origin
742
- # - files-mode: all | no-data | no-unmatched | no-printouts | data | unmatched | errors | meta | vars | printouts
756
+ # - files-mode: all | no-data | no-unmatched | no-printouts | data
757
+ # | unmatched | errors | meta | vars | printouts
743
758
  #
744
759
  self.modes.update()
745
760
  #
@@ -981,16 +996,16 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
981
996
  return scan, matches
982
997
 
983
998
  def _save_parts_if(self, scan, match):
984
- if self._save_scan_dir and self._run_name:
999
+ if self._save_scan_dir and self._run_dir:
985
1000
  with open(
986
- os.path.join(self._save_scan_dir, f"{self._run_name}.txt"),
1001
+ os.path.join(self._save_scan_dir, f"{self._run_dir}.txt"),
987
1002
  "w",
988
1003
  encoding="utf-8",
989
1004
  ) as f:
990
1005
  f.write(scan)
991
- if self._save_match_dir and self._run_name:
1006
+ if self._save_match_dir and self._run_dir:
992
1007
  with open(
993
- os.path.join(self._save_match_dir, f"{self._run_name}.txt"),
1008
+ os.path.join(self._save_match_dir, f"{self._run_dir}.txt"),
994
1009
  "w",
995
1010
  encoding="utf-8",
996
1011
  ) as f:
@@ -1484,9 +1499,7 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
1484
1499
  self.get_total_lines_and_headers()
1485
1500
  return self.line_monitor.physical_end_line_number
1486
1501
 
1487
- def get_total_lines_and_headers(
1488
- self, *, filename: str = None
1489
- ) -> None: # pylint: disable=C0116
1502
+ def get_total_lines_and_headers(self, *, filename: str = None) -> None: # pylint: disable=C0116
1490
1503
  #
1491
1504
  # filename is an option for certain needs but in the usual case
1492
1505
  # we expect scanner.filename, and if both are available for some
@@ -1515,10 +1528,8 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
1515
1528
  f"Using cache to get total lines and headers for {filename}"
1516
1529
  )
1517
1530
  cacher = self.cacher
1518
- print(f"cassff: {cacher}: {filename}")
1519
1531
  self.line_monitor = cacher.get_new_line_monitor(filename)
1520
1532
  self.headers = cacher.get_original_headers(filename)
1521
- print(f"cassff: {self.line_monitor}: {self.headers}")
1522
1533
  else:
1523
1534
  self.logger.debug(
1524
1535
  f"Not using cache to get total lines and headers for {filename}"
@@ -443,6 +443,7 @@ Cache: {cache}
443
443
  path.logger = None
444
444
  for _ in self.dynamic_csvpath_error_listeners:
445
445
  path.error_manager.add_internal_listener(_)
446
+ path.run_dir = self._last_run_dir
446
447
  return path
447
448
 
448
449
  def stop_all(self) -> None: # pragma: no cover
@@ -526,6 +527,17 @@ Cache: {cache}
526
527
  """@private
527
528
  at this time we do not recommend reusing CsvPaths, but it is doable
528
529
  you should clean before reuse unless you want to accumulate results."""
530
+ #
531
+ # adding this Config() refresh breaks several tests, indicating -- i think --
532
+ # mainly that 1) we have some iffy tests that don't act like real use cases
533
+ # and 2) we sorta say that CsvPaths shouldn't be reused, but sorta act like
534
+ # we solved that so it can be, but aren't fully safe yet or at least haven't
535
+ # proved it yet.
536
+ #
537
+ # regardless, for now, don't reup the Config.
538
+ #
539
+ # self._config = Config()
540
+ #
529
541
  self._set_managers()
530
542
  self.clear_run_coordination()
531
543
  self._errors = []
@@ -5,12 +5,12 @@ from csvpath.util.nos import Nos
5
5
  from csvpath.util.file_writers import DataFileWriter
6
6
  from csvpath.util.file_readers import DataFileReader
7
7
  from csvpath.util.references.reference_parser import ReferenceParser
8
+ from .file_descriptor import ServerConfig, Config
8
9
 
9
10
  NamedFileName = NewType("NamedFileName", str)
10
11
 
11
12
 
12
13
  class NamedFileDescriber:
13
-
14
14
  README = "README.md"
15
15
  DEFAULT_README = "# Named-File Documentation\n\n"
16
16
  JSON_FILE = "definition.json"
@@ -30,6 +30,12 @@ class NamedFileDescriber:
30
30
 
31
31
  # ========== JSON ============
32
32
 
33
+ def get_config(self, name: NamedFileName) -> Config:
34
+ return Config.model_validate(self.get_json(name))
35
+
36
+ def store_config(self, name: NamedFileName, config: Config) -> None:
37
+ self.store_json(name, config.model_dump(exclude_none=True))
38
+
33
39
  def store_json(self, name: NamedFileName, j: dict) -> None:
34
40
  if name is None:
35
41
  raise ValueError("Name cannot be None")
@@ -136,3 +142,35 @@ class NamedFileDescriber:
136
142
  else:
137
143
  j[self.ON_ARRIVAL] = on
138
144
  self.store_json(name, j)
145
+
146
+ # ========== sources ============
147
+
148
+ def add_server(
149
+ self, name: NamedFileName, servername: str, server: ServerConfig
150
+ ) -> None:
151
+ t = self.get_sources(name)
152
+ if t is None:
153
+ t = {}
154
+ t[servername] = server
155
+ self.store_sources(name, t)
156
+
157
+ def remove_server(self, name: NamedFileName, servername: str) -> None:
158
+ t = self.get_sources(name)
159
+ if t is None or servername not in t:
160
+ raise ValueError(f"{name} does not have server {servername}")
161
+ del t[servername]
162
+ self.store_sources(name, t)
163
+
164
+ def store_sources(self, name: NamedFileName, t: dict[str, ServerConfig]) -> None:
165
+ if t is None:
166
+ t = {}
167
+ config = self.get_config(name)
168
+ config.sources = t
169
+ self.store_config(name, config)
170
+
171
+ def get_sources(self, name: NamedFileName) -> dict[str, ServerConfig]:
172
+ config = self.get_config(name)
173
+ t = config.sources
174
+ if t is None:
175
+ return {}
176
+ return t
@@ -0,0 +1,70 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Optional
4
+ from pydantic import BaseModel, Field
5
+
6
+ from csvpath.managers.server_config import ServerConfig
7
+
8
+ """
9
+ class ServerConfig(BaseModel):
10
+ address: str = Field(description="Hostname or IP address of the server.")
11
+ port: int = Field(description="Port number; coerce from string if needed.", default=None)
12
+ username: str = Field(description="Login username (may be an env-var name).")
13
+ password: str = Field(description="Login password (may be an env-var name).")
14
+
15
+ @field_validator("port", mode="before")
16
+ @classmethod
17
+ def coerce_port(cls, v: object) -> int:
18
+ try:
19
+ return int(v)
20
+ except (TypeError, ValueError) as e:
21
+ raise ValueError(
22
+ f"port must be an integer or a numeric string, got {v!r}"
23
+ ) from e
24
+
25
+ model_config = {"extra": "forbid"}
26
+ """
27
+
28
+
29
+ class OnArrival(BaseModel):
30
+ named_paths_group: Optional[str] = Field(
31
+ default=None,
32
+ description="The named-paths group to associate with this file.",
33
+ )
34
+ run_method: Optional[str] = Field(
35
+ default=None,
36
+ description="The method to invoke on arrival (e.g. 'collect_paths').",
37
+ )
38
+
39
+ model_config = {"extra": "allow"}
40
+
41
+
42
+ class Config(BaseModel):
43
+ """
44
+ contents of a named-file's definition.json.
45
+ e.g.:
46
+ {
47
+ "template": ":0/:3/my/:filename",
48
+ "on_arrival": {
49
+ "named_paths_group": "order validations",
50
+ "run_method": "collect_paths"
51
+ },
52
+ sources: {
53
+ "a": {
54
+ "address":"localhost",
55
+ "port":22,
56
+ "username":"foo",
57
+ "password":"bar"
58
+ }
59
+ }
60
+ }
61
+ """
62
+
63
+ template: Optional[str] = Field(
64
+ default=None,
65
+ description="Path template string for this named file.",
66
+ )
67
+ on_arrival: Optional[OnArrival] = None
68
+ sources: Optional[dict[str, ServerConfig]] = None
69
+
70
+ model_config = {"extra": "allow"}