csvpath 0.0.574__tar.gz → 0.0.576__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 (372) hide show
  1. csvpath-0.0.576/PKG-INFO +284 -0
  2. csvpath-0.0.576/README.md +227 -0
  3. csvpath-0.0.576/assets/config/extra-functions.imports +2 -0
  4. {csvpath-0.0.574 → csvpath-0.0.576}/assets/config/jenkins-local-s3.ini +5 -5
  5. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/mac/s3-pipeline.gopipeline.json +4 -1
  6. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/mac/s3.sh +1 -4
  7. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/windows/windows-local.gopipeline.json +6 -1
  8. {csvpath-0.0.574 → csvpath-0.0.576}/config/config.ini +4 -7
  9. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/csvpath.py +22 -2
  10. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/results/result.py +1 -1
  11. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/results/results_manager.py +19 -4
  12. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/args.py +1 -0
  13. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/args_helper.py +9 -1
  14. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/counting/tally.py +4 -2
  15. csvpath-0.0.576/csvpath/matching/functions/dates/part.py +105 -0
  16. csvpath-0.0.576/csvpath/matching/functions/dates/roll.py +91 -0
  17. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/function_factory.py +87 -66
  18. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/headers/header_name.py +9 -6
  19. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/headers/header_names_mismatch.py +8 -2
  20. csvpath-0.0.576/csvpath/matching/functions/headers/headers_stack.py +27 -0
  21. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/headers/insert.py +16 -3
  22. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/headers/reset_headers.py +33 -2
  23. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/lines/dups.py +34 -0
  24. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/math/equals.py +2 -2
  25. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/misc/fingerprint.py +8 -6
  26. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/strings/concat.py +6 -2
  27. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/strings/contains.py +1 -1
  28. csvpath-0.0.576/csvpath/matching/functions/strings/format.py +55 -0
  29. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/strings/regex.py +57 -20
  30. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/types/datef.py +2 -2
  31. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/types/string.py +10 -1
  32. csvpath-0.0.576/csvpath/matching/functions/variables/clear.py +45 -0
  33. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/variables/get.py +16 -8
  34. csvpath-0.0.576/csvpath/matching/functions/variables/index_of.py +66 -0
  35. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/variables/pushpop.py +73 -12
  36. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/variables/put.py +28 -13
  37. csvpath-0.0.576/csvpath/matching/functions/variables/track.py +154 -0
  38. csvpath-0.0.576/csvpath/matching/functions/xml/xpath.py +55 -0
  39. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/lark_parser.py +13 -1
  40. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/matcher.py +3 -0
  41. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/modes/transfer_mode.py +7 -0
  42. csvpath-0.0.576/csvpath/util/azure/azure_json_data_reader.py +20 -0
  43. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/azure/azure_xlsx_data_reader.py +1 -1
  44. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/config.py +3 -5
  45. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/file_readers.py +24 -88
  46. csvpath-0.0.576/csvpath/util/gcs/gcs_json_data_reader.py +20 -0
  47. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/gcs/gcs_xlsx_data_reader.py +1 -1
  48. csvpath-0.0.576/csvpath/util/json/json_data_reader.py +46 -0
  49. csvpath-0.0.576/csvpath/util/json/json_reader_helper.py +110 -0
  50. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/tools/date_completer.py +2 -3
  51. csvpath-0.0.576/csvpath/util/s3/s3_json_data_reader.py +20 -0
  52. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/s3/s3_utils.py +7 -2
  53. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/s3/s3_xlsx_data_reader.py +1 -1
  54. csvpath-0.0.576/csvpath/util/sftp/sftp_json_data_reader.py +20 -0
  55. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/sftp/sftp_xlsx_data_reader.py +1 -1
  56. csvpath-0.0.576/csvpath/util/xlsx/xlsx_data_reader.py +41 -0
  57. csvpath-0.0.576/csvpath/util/xlsx/xlsx_reader_helper.py +73 -0
  58. {csvpath-0.0.574 → csvpath-0.0.576}/pyproject.toml +3 -1
  59. csvpath-0.0.574/PKG-INFO +0 -551
  60. csvpath-0.0.574/README.md +0 -496
  61. csvpath-0.0.574/csvpath/matching/functions/variables/track.py +0 -76
  62. {csvpath-0.0.574 → csvpath-0.0.576}/LICENSE +0 -0
  63. {csvpath-0.0.574 → csvpath-0.0.576}/assets/config/config.ini +0 -0
  64. {csvpath-0.0.574 → csvpath-0.0.576}/assets/config/function.imports +0 -0
  65. {csvpath-0.0.574 → csvpath-0.0.576}/assets/config/jenkins-local-azure.ini +0 -0
  66. {csvpath-0.0.574 → csvpath-0.0.576}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
  67. {csvpath-0.0.574 → csvpath-0.0.576}/assets/config/jenkins-local-gcs.ini +0 -0
  68. {csvpath-0.0.574 → csvpath-0.0.576}/assets/config/jenkins-local-sftp.ini +0 -0
  69. {csvpath-0.0.574 → csvpath-0.0.576}/assets/config/jenkins-windows-azure.ini +0 -0
  70. {csvpath-0.0.574 → csvpath-0.0.576}/assets/config/jenkins-windows-gcs.ini +0 -0
  71. {csvpath-0.0.574 → csvpath-0.0.576}/assets/config/jenkins-windows-local.ini +0 -0
  72. {csvpath-0.0.574 → csvpath-0.0.576}/assets/config/jenkins-windows-s3.ini +0 -0
  73. {csvpath-0.0.574 → csvpath-0.0.576}/assets/config/jenkins-windows-sftp.ini +0 -0
  74. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
  75. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/mac/azure.sh +0 -0
  76. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/mac/gcs-pipeline.gopipeline.json +0 -0
  77. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/mac/gcs.sh +0 -0
  78. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
  79. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/mac/local.sh +0 -0
  80. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
  81. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/mac/sftp.sh +0 -0
  82. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/windows/azure.bat +0 -0
  83. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/windows/gcs.bat +0 -0
  84. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/windows/local.bat +0 -0
  85. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/windows/s3.bat +0 -0
  86. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/windows/sftp.bat +0 -0
  87. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
  88. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
  89. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
  90. {csvpath-0.0.574 → csvpath-0.0.576}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
  91. {csvpath-0.0.574 → csvpath-0.0.576}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
  92. {csvpath-0.0.574 → csvpath-0.0.576}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
  93. {csvpath-0.0.574 → csvpath-0.0.576}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
  94. {csvpath-0.0.574 → csvpath-0.0.576}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
  95. {csvpath-0.0.574 → csvpath-0.0.576}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
  96. {csvpath-0.0.574 → csvpath-0.0.576}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
  97. {csvpath-0.0.574 → csvpath-0.0.576}/assets/integrations/sqlite/csvpath +0 -0
  98. {csvpath-0.0.574 → csvpath-0.0.576}/assets/integrations/sqlite/schema.sql +0 -0
  99. {csvpath-0.0.574 → csvpath-0.0.576}/config/env.json +0 -0
  100. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/__init__.py +0 -0
  101. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/cli/__init__.py +0 -0
  102. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/cli/asker.py +0 -0
  103. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/cli/cli.py +0 -0
  104. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/cli/const.py +0 -0
  105. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/cli/debug_config.py +0 -0
  106. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/cli/drill_down.py +0 -0
  107. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/cli/function_describer.py +0 -0
  108. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/cli/function_lister.py +0 -0
  109. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/cli/selecter.py +0 -0
  110. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/csvpaths.py +0 -0
  111. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/__init__.py +0 -0
  112. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/errors/error.py +0 -0
  113. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/errors/error_collector.py +0 -0
  114. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/errors/error_comms.py +0 -0
  115. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/errors/error_manager.py +0 -0
  116. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/files/file_manager.py +0 -0
  117. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/files/file_metadata.py +0 -0
  118. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/files/file_registrar.py +0 -0
  119. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/files/files_listener.py +0 -0
  120. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
  121. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ckan/ckan.py +0 -0
  122. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
  123. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ckan/datafile.py +0 -0
  124. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ckan/dataset.py +0 -0
  125. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ol/event.py +0 -0
  126. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ol/event_result.py +0 -0
  127. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
  128. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ol/job.py +0 -0
  129. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
  130. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
  131. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
  132. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
  133. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ol/run.py +0 -0
  134. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
  135. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ol/run_state.py +0 -0
  136. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/ol/sender.py +0 -0
  137. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
  138. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/otlp/metrics.py +0 -0
  139. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
  140. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
  141. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
  142. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
  143. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
  144. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
  145. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
  146. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
  147. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
  148. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sftpplus/rpc.py +0 -0
  149. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
  150. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
  151. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
  152. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/slack/event.py +0 -0
  153. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/slack/sender.py +0 -0
  154. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sql/engine.py +0 -0
  155. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
  156. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
  157. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
  158. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
  159. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
  160. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sql/tables.py +0 -0
  161. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sql/updates.py +0 -0
  162. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
  163. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
  164. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
  165. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/webhook/webhook_listener.py +0 -0
  166. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/integrations/webhook/webhook_results_listener.py +0 -0
  167. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/listener.py +0 -0
  168. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/metadata.py +0 -0
  169. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/paths/paths_listener.py +0 -0
  170. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/paths/paths_manager.py +0 -0
  171. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/paths/paths_metadata.py +0 -0
  172. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/paths/paths_registrar.py +0 -0
  173. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/registrar.py +0 -0
  174. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
  175. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
  176. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
  177. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
  178. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/results/readers/readers.py +0 -0
  179. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/results/result_file_reader.py +0 -0
  180. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/results/result_metadata.py +0 -0
  181. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/results/result_registrar.py +0 -0
  182. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/results/result_serializer.py +0 -0
  183. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/results/results_metadata.py +0 -0
  184. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/results/results_registrar.py +0 -0
  185. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/run/run_listener_stdout.py +0 -0
  186. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/run/run_metadata.py +0 -0
  187. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/run/run_registrar.py +0 -0
  188. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/managers/test_listener.py +0 -0
  189. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/__init__.py +0 -0
  190. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/__init__.py +0 -0
  191. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/boolean/all.py +0 -0
  192. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/boolean/andf.py +0 -0
  193. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/boolean/any.py +0 -0
  194. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/boolean/between.py +0 -0
  195. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/boolean/empty.py +0 -0
  196. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/boolean/exists.py +0 -0
  197. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/boolean/inf.py +0 -0
  198. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/boolean/no.py +0 -0
  199. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/boolean/notf.py +0 -0
  200. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/boolean/orf.py +0 -0
  201. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/boolean/yes.py +0 -0
  202. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/counting/count.py +0 -0
  203. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/counting/count_bytes.py +0 -0
  204. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/counting/count_headers.py +0 -0
  205. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/counting/count_lines.py +0 -0
  206. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/counting/count_scans.py +0 -0
  207. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/counting/counter.py +0 -0
  208. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/counting/every.py +0 -0
  209. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/counting/has_matches.py +0 -0
  210. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/counting/increment.py +0 -0
  211. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/counting/total_lines.py +0 -0
  212. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/dates/now.py +1 -1
  213. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/function.py +0 -0
  214. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/function_finder.py +0 -0
  215. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/function_focus.py +0 -0
  216. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/headers/append.py +0 -0
  217. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/headers/collect.py +0 -0
  218. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/headers/empty_stack.py +0 -0
  219. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/headers/end.py +0 -0
  220. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/headers/headers.py +0 -0
  221. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/headers/mismatch.py +0 -0
  222. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/headers/replace.py +0 -0
  223. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/lines/advance.py +0 -0
  224. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/lines/after_blank.py +0 -0
  225. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/lines/first.py +0 -0
  226. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/lines/first_line.py +0 -0
  227. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/lines/last.py +0 -0
  228. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/lines/stop.py +0 -0
  229. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/math/above.py +0 -0
  230. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/math/add.py +0 -0
  231. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/math/divide.py +0 -0
  232. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/math/intf.py +0 -0
  233. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/math/mod.py +0 -0
  234. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/math/multiply.py +0 -0
  235. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/math/odd.py +0 -0
  236. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/math/round.py +0 -0
  237. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/math/subtotal.py +0 -0
  238. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/math/subtract.py +0 -0
  239. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/math/sum.py +0 -0
  240. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/misc/importf.py +0 -0
  241. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/misc/random.py +0 -0
  242. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/print/jinjaf.py +0 -0
  243. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/print/print_line.py +0 -0
  244. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/print/print_queue.py +0 -0
  245. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/print/printf.py +0 -0
  246. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/print/table.py +0 -0
  247. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/stats/minf.py +0 -0
  248. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/stats/nminmax.py +0 -0
  249. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/stats/percent.py +0 -0
  250. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/stats/percent_unique.py +0 -0
  251. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/stats/stdev.py +0 -0
  252. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/strings/alter.py +0 -0
  253. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/strings/caps.py +0 -0
  254. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/strings/length.py +0 -0
  255. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/strings/lower.py +0 -0
  256. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/strings/metaphone.py +0 -0
  257. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/strings/starts_with.py +0 -0
  258. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/strings/strip.py +0 -0
  259. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/strings/substring.py +0 -0
  260. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/strings/upper.py +0 -0
  261. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/testing/debug.py +0 -0
  262. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/types/__init__.py +0 -0
  263. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/types/boolean.py +0 -0
  264. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/types/datatype.py +0 -0
  265. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/types/decimal.py +0 -0
  266. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/types/email.py +0 -0
  267. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/types/nonef.py +0 -0
  268. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/types/type.py +0 -0
  269. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/types/url.py +0 -0
  270. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/validity/fail.py +0 -0
  271. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/validity/failed.py +0 -0
  272. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/validity/line.py +0 -0
  273. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/functions/variables/variables.py +0 -0
  274. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/lark_transformer.py +0 -0
  275. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/productions/__init__.py +0 -0
  276. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/productions/equality.py +0 -0
  277. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/productions/expression.py +0 -0
  278. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/productions/header.py +0 -0
  279. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/productions/matchable.py +0 -0
  280. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/productions/qualified.py +0 -0
  281. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/productions/reference.py +0 -0
  282. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/productions/term.py +0 -0
  283. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/productions/variable.py +0 -0
  284. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/util/exceptions.py +0 -0
  285. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/util/expression_encoder.py +0 -0
  286. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/util/expression_utility.py +0 -0
  287. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/util/lark_print_parser.py +0 -0
  288. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/util/print_parser.py +0 -0
  289. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/matching/util/runtime_data_collector.py +0 -0
  290. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/modes/error_mode.py +0 -0
  291. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/modes/explain_mode.py +0 -0
  292. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/modes/files_mode.py +0 -0
  293. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/modes/logic_mode.py +0 -0
  294. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/modes/mode_controller.py +0 -0
  295. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/modes/print_mode.py +0 -0
  296. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/modes/return_mode.py +0 -0
  297. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/modes/run_mode.py +0 -0
  298. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/modes/source_mode.py +0 -0
  299. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/modes/unmatched_mode.py +0 -0
  300. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/modes/validation_mode.py +0 -0
  301. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/scanning/__init__.py +0 -0
  302. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/scanning/scanner2.py +0 -0
  303. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/scanning/scanner2_parser.py +0 -0
  304. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/scanning/scanner2_transformer.py +0 -0
  305. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/azure/azure_data_reader.py +0 -0
  306. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/azure/azure_data_writer.py +0 -0
  307. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/azure/azure_fingerprinter.py +0 -0
  308. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/azure/azure_nos.py +0 -0
  309. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/azure/azure_utils.py +0 -0
  310. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/backend_check.py +0 -0
  311. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/box.py +0 -0
  312. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/cache.py +0 -0
  313. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/caser.py +0 -0
  314. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/class_loader.py +0 -0
  315. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/code.py +0 -0
  316. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/config_env.py +0 -0
  317. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/config_exception.py +0 -0
  318. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/date_util.py +0 -0
  319. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/exceptions.py +0 -0
  320. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/file_info.py +0 -0
  321. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/file_writers.py +0 -0
  322. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/gcs/gcs_data_reader.py +0 -0
  323. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/gcs/gcs_data_writer.py +0 -0
  324. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
  325. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/gcs/gcs_nos.py +0 -0
  326. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/gcs/gcs_utils.py +0 -0
  327. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/hasher.py +0 -0
  328. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/http/http_data_reader.py +0 -0
  329. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/intermediary.py +0 -0
  330. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/last_line_stats.py +0 -0
  331. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/line_counter.py +0 -0
  332. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/line_monitor.py +0 -0
  333. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/line_spooler.py +0 -0
  334. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/log_utility.py +0 -0
  335. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/metadata_parser.py +0 -0
  336. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/nos.py +0 -0
  337. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/pandas_data_reader.py +0 -0
  338. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/path_util.py +0 -0
  339. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/printer.py +0 -0
  340. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/py_file_utility.py +0 -0
  341. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/files_reference_finder_2.py +0 -0
  342. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
  343. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/files_tools/range_finder.py +0 -0
  344. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/ref_utils.py +0 -0
  345. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/reference_exceptions.py +0 -0
  346. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/reference_grammar.py +0 -0
  347. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
  348. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/reference_parser.py +0 -0
  349. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/reference_results.py +0 -0
  350. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/reference_transformer.py +0 -0
  351. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/results_reference_finder_2.py +0 -0
  352. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/results_tools/data_finder.py +0 -0
  353. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/results_tools/date_filter.py +0 -0
  354. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/results_tools/identity_finder.py +0 -0
  355. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/results_tools/path_filter.py +0 -0
  356. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
  357. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/results_tools/token_filters.py +0 -0
  358. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
  359. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/run_home_maker.py +0 -0
  360. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/s3/s3_data_reader.py +0 -0
  361. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/s3/s3_data_writer.py +0 -0
  362. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/s3/s3_fingerprinter.py +0 -0
  363. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/s3/s3_nos.py +0 -0
  364. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/sftp/sftp_config.py +0 -0
  365. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/sftp/sftp_data_reader.py +0 -0
  366. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/sftp/sftp_data_writer.py +0 -0
  367. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
  368. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/sftp/sftp_nos.py +0 -0
  369. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/sftp/sftp_walk.py +0 -0
  370. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/sqliter.py +0 -0
  371. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/template_util.py +0 -0
  372. {csvpath-0.0.574 → csvpath-0.0.576}/csvpath/util/var_utility.py +0 -0
@@ -0,0 +1,284 @@
1
+ Metadata-Version: 2.3
2
+ Name: csvpath
3
+ Version: 0.0.576
4
+ Summary: A data preboarding framework for ingesting, managing, and validating CSV, Excel, and other tabular data files using a Collect, Store, Validate, Publish architecture to create a trusted publisher for downstream data consumers.
5
+ Author: David Kershaw
6
+ Author-email: info@csvpath.org
7
+ Requires-Python: >3.10,<4.0
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Environment :: Console
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Programming Language :: Python
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Topic :: File Formats
17
+ Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
18
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
+ Classifier: Topic :: Software Development :: Quality Assurance
20
+ Classifier: Topic :: Software Development :: Testing
21
+ Classifier: Topic :: Text Processing
22
+ Classifier: Topic :: Utilities
23
+ Provides-Extra: pandas
24
+ Requires-Dist: azure-storage-blob (>=12.24.1,<13.0.0)
25
+ Requires-Dist: boto3 (>=1.35.91,<2.0.0)
26
+ Requires-Dist: ckanapi (>=4.8,<5.0)
27
+ Requires-Dist: email-validator (>=2.2.0,<3.0.0)
28
+ Requires-Dist: google-cloud-storage (>=3.1.0,<4.0.0)
29
+ Requires-Dist: inflect (>=7.4.0,<8.0.0)
30
+ Requires-Dist: jinja2 (>=3.1.6,<4.0.0)
31
+ Requires-Dist: jsonlines (>=4.0.0,<5.0.0)
32
+ Requires-Dist: lark (>=1.2.2,<2.0.0)
33
+ Requires-Dist: lxml (>=6.0.2,<7.0.0)
34
+ Requires-Dist: marquez-python (>=0.50.0,<0.51.0)
35
+ Requires-Dist: metaphone (>=0.6,<0.7)
36
+ Requires-Dist: mysqlclient (>=2.2.7,<3.0.0)
37
+ Requires-Dist: openlineage-python (>=1.25.0,<2.0.0)
38
+ Requires-Dist: opentelemetry-distro[otlp] (>=0.50b0,<0.51)
39
+ Requires-Dist: pandas (>=2.2.2,<3.0.0) ; extra == "pandas"
40
+ Requires-Dist: paramiko (>=3.5.0,<4.0.0)
41
+ Requires-Dist: pdoc (>=15.0.1,<16.0.0)
42
+ Requires-Dist: prompt-toolkit (>=3.0.50,<4.0.0)
43
+ Requires-Dist: psycopg2-binary (>=2.9.10,<3.0.0)
44
+ Requires-Dist: pylightxl (>=1.61,<2.0)
45
+ Requires-Dist: pytest (>=8.3.3,<9.0.0)
46
+ Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
47
+ Requires-Dist: pytz (>=2024.2,<2025.0)
48
+ Requires-Dist: requests (>=2.32.3,<3.0.0)
49
+ Requires-Dist: smart-open[all] (>=7.1.0,<8.0.0)
50
+ Requires-Dist: sqlalchemy (>=2.0.38,<3.0.0)
51
+ Requires-Dist: tabulate (>=0.9.0,<0.10.0)
52
+ Requires-Dist: validators (>=0.34.0,<0.35.0)
53
+ Project-URL: Csvpath.org, https://www.csvpath.org
54
+ Project-URL: Github, https://github.com/csvpath/csvpath.git
55
+ Description-Content-Type: text/markdown
56
+
57
+
58
+ # <a href='https://www.csvpath.org/'><img src='https://github.com/csvpath/csvpath/blob/main/docs/images/logo-wordmark-4.svg'/></a>
59
+
60
+ ## Make Data File Feed Ingestion Higher Quality, Lower Risk, and More Agile
61
+
62
+ #### CsvPath Framework closes the gap between Managed File Transfer and the data lake, applications, analytics, and AI with a purpose-built, open source data file feeds preboarding solution.
63
+
64
+ These pages focus on *CsvPath Validation Language*. For more documentation on the whole data preboarding architecture, along with code, examples, and best practices, check out [csvpath.org](https://www.csvpath.org). For the FlightPath frontend application and API server head over to [flightpathdata.com](https://www.flightpathdata.com/flightpath.html).
65
+
66
+ CSV and Excel validation is at the core of the Framework. The Language defines a simple, declarative syntax for inspecting and validating files and other tabular data. Its mission is to end manual data checking and upgrading. The cost of manual processes and firefighting CSV and Excel problems can be as high as 50% of a DataOps and BizOps team's time. CsvPath Framework's automation-first approach helps scale back that unproductive and frustrating investment.
67
+
68
+ CsvPath Validation Language is inspired by:
69
+ - XPath and ISO standard <a href='https://schematron.com/'>Schematron validation</a>
70
+ - SQL schemas
71
+ - And business rules engines like Jess or Drools
72
+
73
+ If you need help getting started, there are lots of ways to reach us.
74
+ - Use the <a href='https://www.csvpath.org/getting-started/get-help'>contact form</a>
75
+ - The <a href='https://github.com/csvpath/csvpath/issues'>issue tracker</a>
76
+ - Email support@csvpath.org
77
+ - Or reach out to one of our [sponsors, below](#sponsors).
78
+
79
+ ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/csvpath?logoColor=green&color=green) ![GitHub commit activity](https://img.shields.io/github/commit-activity/m/dk107dk/csvpath) ![PyPI - Version](https://img.shields.io/pypi/v/csvpath)
80
+
81
+
82
+ # Contents
83
+
84
+ - [Motivation](#motivation)
85
+ - [Install](#install)
86
+ - [Validation Approach](#approach)
87
+ - [Writing Validation Statements](#validating)
88
+ - [Running CsvPath](#running)
89
+ - [Grammars](#grammar)
90
+ - [Sponsors](#sponsors)
91
+
92
+ <a name="motivation"></a>
93
+
94
+ # Motivation
95
+
96
+ CSV and Excel files are everywhere! They are critical to successful data partnerships. They are a great example of how garbage-in-garbage-out threatens applications, analytics, and AI. And they are often the most unloved part of the data estate.
97
+
98
+ We rely on CSV because it the lowest common dominator. The majority of systems that have import/export capabilities accept CSV. But many CSV files are invalid or broken in some way due to partners having different priorities, SDLCs, levels of technical capability, and interpretations of requirements. The result is that untrustworthy data flows into the enterprise. Often times a lot of manual effort goes into tracing data back to problems and fixing them.
99
+
100
+ CsvPath Validation Language adds trust to data file feeds. It is a quality management shift-left that solves problems early where they are easiest to fix.
101
+
102
+ The Language is simple, function-oriented, and solely focused on validation of delimited data. It supports both schema definitions and rules-based validation. CsvPath Validation Language is declarative, for more concise and understandable data definitions. CsvPath can also extract and upgrade data, and create simple reports. Overall the goal is to automate human judgement and add transparency.
103
+
104
+ <a name="install"></a>
105
+
106
+ # Install
107
+
108
+ <a href='https://pypi.org/project/csvpath/'>CsvPath Framework is available on PyPi</a>. It has been tested on 3.10, 3.11 and 3.13.
109
+
110
+ The project uses Poetry and works fine with Uv. You can also install it with:
111
+ ```
112
+ pip install csvpath
113
+ ```
114
+
115
+ CsvPath has an optional dependency on Pandas. Pandas data frames can be used as a data source, much like Excel or CSV files. To install CsvPath with the Pandas option do:
116
+ ```
117
+ pip install csvpath[pandas]
118
+ ```
119
+
120
+ Pandas and its dependencies can make it harder to use CsvPath in certain specific MFT use cases. For e.g., using Pandas in an AWS Lambda layer may be less straightforward.
121
+
122
+
123
+ <a name="approach"></a>
124
+
125
+ <p></p>
126
+
127
+ # Validation Approach
128
+
129
+ CsvPath Validation Language is for creating "paths" that validate data streamed from files. A csvpath statement matches lines. A match does not mean that a line is inherently valid or invalid. That determination depends on how the csvpath statement was written.
130
+
131
+ For example, a csvpath statement can return all invalid lines as matches. Alternatively, it can return all valid lines as matches. It could also return no matching lines, but instead trigger side-effects, like print statements or variable changes.
132
+
133
+ ## Structure
134
+ <a name="description"></a>
135
+ A csvpath statement has three structural parts:
136
+ - A root that may include a file name
137
+ - The scanning part, that declares what lines will be validated
138
+ - The matching part, that declares what lines will match
139
+
140
+ The root of a csvpath starts with `$`. The match and scan parts are enclosed by brackets. Newlines are ignored.
141
+
142
+
143
+ ## Simple Examples
144
+ A trivial csvpath looks like this:
145
+
146
+ ```bash
147
+ $filename[*][yes()]
148
+ ```
149
+
150
+ This csvpath says:
151
+ - Open the file: `filename`
152
+ - Scan all the lines: `*`
153
+ - And match every line scanned: `yes()`
154
+
155
+ In this case, a matching line is considered valid. Treating matches as valid is a simple approach. There are <a href='https://www.csvpath.org/topics/validation' target='_blank'>several possible validation strategies</a>.
156
+
157
+ Here is a more functional csvpath:
158
+
159
+ ```bash
160
+ $people.csv[*][
161
+ @two_names = count(not(#middle_name))
162
+ last() -> print("There are $.variables.two_names people with only two names")]
163
+ ```
164
+
165
+ It scans the lines in `people.csv`, counts lines without a middle name, and prints the count when the last row is read.
166
+
167
+ A csvpath doesn't have to point to a specific file. It can instead simply have the scanning instruction come right after the root '$' like this:
168
+
169
+ ```bash
170
+ $[*][
171
+ @two_names = count(not(#middle_name))
172
+ last() -> print("There are $.variables.two_names people with only two names")]
173
+ ```
174
+
175
+ In this case, the Framework chooses the csvpath's file at runtime.
176
+
177
+ <a name="validating"></a>
178
+
179
+ <p></p>
180
+
181
+ # Writing Validation Statements
182
+
183
+ At a high level, the functionality of a CsvPath Validation Language statement comes from:
184
+ * [Scanning instructions](https://github.com/csvpath/csvpath/blob/main/docs/scanning.md) - determine which lines the csvpath considers
185
+ * [Match components](https://github.com/csvpath/csvpath/blob/main/docs/matching.md) - determine which lines are matched and/or trigger side-effects
186
+ * [Comments](https://github.com/csvpath/csvpath/blob/main/docs/comments.md)
187
+
188
+ Each of these parts of a statement make significant functional contributions. This includes comments, which can have csvpath-by-csvpath configuration settings, integration hooks, and user-defined metadata.
189
+
190
+ <a name="running"></a>
191
+
192
+ # Running CsvPath
193
+
194
+ CsvPath is <a href='https://pypi.org/project/csvpath/'>available on Pypi here</a>. The <a href='https://github.com/csvpath/csvpath'>git repo is here</a>.
195
+
196
+ Two classes provide csvpath statement evaluation functionality: `CsvPath` and `CsvPaths`.
197
+
198
+ ## CsvPath
199
+ (<a href='https://github.com/csvpath/csvpath/blob/main/csvpath/csvpath.py'>code</a>)
200
+ `CsvPath` is the most basic entry point for running csvpaths statements.
201
+ |method |function |
202
+ |----------------------------|-----------------------------------------------------------------|
203
+ | next() | iterates over matched rows returning each matched row as a list |
204
+ | fast_forward() | iterates over the file collecting variables and side effects |
205
+ | advance() | skips forward n rows from within a `for row in path.next()` loop|
206
+ | collect() | processes n rows and collects the lines that matched as lists |
207
+
208
+ ## CsvPaths
209
+ (<a href='https://github.com/dk107dk/csvpath/blob/main/csvpath/csvpaths.py'>code</a>)
210
+ `CsvPaths` manages validations of multiple files and/or multiple csvpaths. It coordinates the work of multiple `CsvPath` instances.
211
+ |method |function |
212
+ |------------------------|-----------------------------------------------------------------|
213
+ | csvpath() | gets a CsvPath object that knows all the file names available |
214
+ | collect_paths() | Same as CsvPath.collect() but for all paths sequentially |
215
+ | fast_forward_paths() | Same as CsvPath.fast_forward() but for all paths sequentially |
216
+ | next_paths() | Same as CsvPath.next() but for all paths sequentially |
217
+ | collect_by_line() | Same as CsvPath.collect() but for all paths breadth first |
218
+ | fast_forward_by_line() | Same as CsvPath.fast_forward() but for all paths breadth first |
219
+ | next_by_line() | Same as CsvPath.next() but for all paths breadth first |
220
+
221
+ The purpose of `CsvPaths` is to apply multiple csvpaths per CSV file and handle multiple files in sequence. `CsvPaths` has both serial and breadth-first versions of `CsvPath`'s `collect()`, `fast_forward()`, and `next()` methods. The breadth-first versions evaluate each csvpath for every line of a CSV file before restarting the evaluations with the next line.
222
+
223
+ ## Simple Example
224
+ To learn about automation, start with a simple driver. This is a basic programmatic use of CsvPath. It checks a file against a trivial schema, iterating the matching lines.
225
+
226
+ ```python
227
+ path = CsvPath().parse("""
228
+ $test.csv[1-25][
229
+ line(
230
+ string.notnone(#firstname),
231
+ string.notnone(#lastname)
232
+ )
233
+ ]
234
+ """)
235
+ for i, line in enumerate( path.next() ):
236
+ print(f"{i}: {line}")
237
+ ```
238
+
239
+ For production operations consider using [FlightPath Server](https://www.flightpathdata.com/server.html), instead of coding your own driver scripts.
240
+
241
+ CsvPath is primarily for data automation, not interactive use. There is a simple <a href='https://github.com/csvpath/csvpath/cli'>command line interface</a> for quick dev iterations. <a href='https://www.csvpath.org/getting-started/your-first-validation-the-lazy-way'>Read more about the CLI here</a>. For more dev and ops functionality, use [FlightPath Data](https://www.flightpathdata.com/flightpath.html), the open source frontend to CsvPath Framework.
242
+
243
+ <a name="grammar"></a>
244
+
245
+ # Grammars
246
+
247
+ CsvPath Validation Language is built up from three grammars:
248
+ * The csvpath statement grammar - the main language
249
+ * A `print()` function grammar - a simple print capability with variable and reference substitution
250
+ * The Reference Language grammar - the file location and querying language used in validation and preboarding operations
251
+
252
+ Read <a href='https://github.com/dk107dk/csvpath/blob/main/docs/grammar.md'>more about the CsvPath grammar definition here</a>.
253
+
254
+
255
+ <a name="more-info"></a>
256
+
257
+ # More Info
258
+
259
+ For more information about preboarding and the whole of CsvPath Framework, visit <a href="https://www.csvpath.org">https://www.csvpath.org</a>.
260
+
261
+ For the development and operations frontend to CsvPath Framework, take a look at <a href='https://www.flightpathdata.com/flightpath.html'>FlightPath Data</a>.
262
+
263
+ And to learn about the backend API server, head over to <a href='https://www.flightpathdata.com/server.html'>FlightPath Server</a>.
264
+
265
+ <a name="sponsors"></a>
266
+
267
+ # Sponsors
268
+
269
+ <a href='https://www.atestaanalytics.com/' >
270
+ <img width="25%" src="https://raw.githubusercontent.com/dk107dk/csvpath/main/docs/images/logo-wordmark-white-on-black-trimmed-padded.png" alt="Atesta Analytics"/></a>
271
+ <a href='https://www.datakitchen.io/'>
272
+ <img src="https://datakitchen.io/wp-content/uploads/2020/10/logo.svg"
273
+ style='width:160px; position:relative;bottom:-5px;left:15px' alt="DataKitchen" id="logo" data-height-percentage="45"></a>
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
@@ -0,0 +1,227 @@
1
+
2
+ # <a href='https://www.csvpath.org/'><img src='https://github.com/csvpath/csvpath/blob/main/docs/images/logo-wordmark-4.svg'/></a>
3
+
4
+ ## Make Data File Feed Ingestion Higher Quality, Lower Risk, and More Agile
5
+
6
+ #### CsvPath Framework closes the gap between Managed File Transfer and the data lake, applications, analytics, and AI with a purpose-built, open source data file feeds preboarding solution.
7
+
8
+ These pages focus on *CsvPath Validation Language*. For more documentation on the whole data preboarding architecture, along with code, examples, and best practices, check out [csvpath.org](https://www.csvpath.org). For the FlightPath frontend application and API server head over to [flightpathdata.com](https://www.flightpathdata.com/flightpath.html).
9
+
10
+ CSV and Excel validation is at the core of the Framework. The Language defines a simple, declarative syntax for inspecting and validating files and other tabular data. Its mission is to end manual data checking and upgrading. The cost of manual processes and firefighting CSV and Excel problems can be as high as 50% of a DataOps and BizOps team's time. CsvPath Framework's automation-first approach helps scale back that unproductive and frustrating investment.
11
+
12
+ CsvPath Validation Language is inspired by:
13
+ - XPath and ISO standard <a href='https://schematron.com/'>Schematron validation</a>
14
+ - SQL schemas
15
+ - And business rules engines like Jess or Drools
16
+
17
+ If you need help getting started, there are lots of ways to reach us.
18
+ - Use the <a href='https://www.csvpath.org/getting-started/get-help'>contact form</a>
19
+ - The <a href='https://github.com/csvpath/csvpath/issues'>issue tracker</a>
20
+ - Email support@csvpath.org
21
+ - Or reach out to one of our [sponsors, below](#sponsors).
22
+
23
+ ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/csvpath?logoColor=green&color=green) ![GitHub commit activity](https://img.shields.io/github/commit-activity/m/dk107dk/csvpath) ![PyPI - Version](https://img.shields.io/pypi/v/csvpath)
24
+
25
+
26
+ # Contents
27
+
28
+ - [Motivation](#motivation)
29
+ - [Install](#install)
30
+ - [Validation Approach](#approach)
31
+ - [Writing Validation Statements](#validating)
32
+ - [Running CsvPath](#running)
33
+ - [Grammars](#grammar)
34
+ - [Sponsors](#sponsors)
35
+
36
+ <a name="motivation"></a>
37
+
38
+ # Motivation
39
+
40
+ CSV and Excel files are everywhere! They are critical to successful data partnerships. They are a great example of how garbage-in-garbage-out threatens applications, analytics, and AI. And they are often the most unloved part of the data estate.
41
+
42
+ We rely on CSV because it the lowest common dominator. The majority of systems that have import/export capabilities accept CSV. But many CSV files are invalid or broken in some way due to partners having different priorities, SDLCs, levels of technical capability, and interpretations of requirements. The result is that untrustworthy data flows into the enterprise. Often times a lot of manual effort goes into tracing data back to problems and fixing them.
43
+
44
+ CsvPath Validation Language adds trust to data file feeds. It is a quality management shift-left that solves problems early where they are easiest to fix.
45
+
46
+ The Language is simple, function-oriented, and solely focused on validation of delimited data. It supports both schema definitions and rules-based validation. CsvPath Validation Language is declarative, for more concise and understandable data definitions. CsvPath can also extract and upgrade data, and create simple reports. Overall the goal is to automate human judgement and add transparency.
47
+
48
+ <a name="install"></a>
49
+
50
+ # Install
51
+
52
+ <a href='https://pypi.org/project/csvpath/'>CsvPath Framework is available on PyPi</a>. It has been tested on 3.10, 3.11 and 3.13.
53
+
54
+ The project uses Poetry and works fine with Uv. You can also install it with:
55
+ ```
56
+ pip install csvpath
57
+ ```
58
+
59
+ CsvPath has an optional dependency on Pandas. Pandas data frames can be used as a data source, much like Excel or CSV files. To install CsvPath with the Pandas option do:
60
+ ```
61
+ pip install csvpath[pandas]
62
+ ```
63
+
64
+ Pandas and its dependencies can make it harder to use CsvPath in certain specific MFT use cases. For e.g., using Pandas in an AWS Lambda layer may be less straightforward.
65
+
66
+
67
+ <a name="approach"></a>
68
+
69
+ <p></p>
70
+
71
+ # Validation Approach
72
+
73
+ CsvPath Validation Language is for creating "paths" that validate data streamed from files. A csvpath statement matches lines. A match does not mean that a line is inherently valid or invalid. That determination depends on how the csvpath statement was written.
74
+
75
+ For example, a csvpath statement can return all invalid lines as matches. Alternatively, it can return all valid lines as matches. It could also return no matching lines, but instead trigger side-effects, like print statements or variable changes.
76
+
77
+ ## Structure
78
+ <a name="description"></a>
79
+ A csvpath statement has three structural parts:
80
+ - A root that may include a file name
81
+ - The scanning part, that declares what lines will be validated
82
+ - The matching part, that declares what lines will match
83
+
84
+ The root of a csvpath starts with `$`. The match and scan parts are enclosed by brackets. Newlines are ignored.
85
+
86
+
87
+ ## Simple Examples
88
+ A trivial csvpath looks like this:
89
+
90
+ ```bash
91
+ $filename[*][yes()]
92
+ ```
93
+
94
+ This csvpath says:
95
+ - Open the file: `filename`
96
+ - Scan all the lines: `*`
97
+ - And match every line scanned: `yes()`
98
+
99
+ In this case, a matching line is considered valid. Treating matches as valid is a simple approach. There are <a href='https://www.csvpath.org/topics/validation' target='_blank'>several possible validation strategies</a>.
100
+
101
+ Here is a more functional csvpath:
102
+
103
+ ```bash
104
+ $people.csv[*][
105
+ @two_names = count(not(#middle_name))
106
+ last() -> print("There are $.variables.two_names people with only two names")]
107
+ ```
108
+
109
+ It scans the lines in `people.csv`, counts lines without a middle name, and prints the count when the last row is read.
110
+
111
+ A csvpath doesn't have to point to a specific file. It can instead simply have the scanning instruction come right after the root '$' like this:
112
+
113
+ ```bash
114
+ $[*][
115
+ @two_names = count(not(#middle_name))
116
+ last() -> print("There are $.variables.two_names people with only two names")]
117
+ ```
118
+
119
+ In this case, the Framework chooses the csvpath's file at runtime.
120
+
121
+ <a name="validating"></a>
122
+
123
+ <p></p>
124
+
125
+ # Writing Validation Statements
126
+
127
+ At a high level, the functionality of a CsvPath Validation Language statement comes from:
128
+ * [Scanning instructions](https://github.com/csvpath/csvpath/blob/main/docs/scanning.md) - determine which lines the csvpath considers
129
+ * [Match components](https://github.com/csvpath/csvpath/blob/main/docs/matching.md) - determine which lines are matched and/or trigger side-effects
130
+ * [Comments](https://github.com/csvpath/csvpath/blob/main/docs/comments.md)
131
+
132
+ Each of these parts of a statement make significant functional contributions. This includes comments, which can have csvpath-by-csvpath configuration settings, integration hooks, and user-defined metadata.
133
+
134
+ <a name="running"></a>
135
+
136
+ # Running CsvPath
137
+
138
+ CsvPath is <a href='https://pypi.org/project/csvpath/'>available on Pypi here</a>. The <a href='https://github.com/csvpath/csvpath'>git repo is here</a>.
139
+
140
+ Two classes provide csvpath statement evaluation functionality: `CsvPath` and `CsvPaths`.
141
+
142
+ ## CsvPath
143
+ (<a href='https://github.com/csvpath/csvpath/blob/main/csvpath/csvpath.py'>code</a>)
144
+ `CsvPath` is the most basic entry point for running csvpaths statements.
145
+ |method |function |
146
+ |----------------------------|-----------------------------------------------------------------|
147
+ | next() | iterates over matched rows returning each matched row as a list |
148
+ | fast_forward() | iterates over the file collecting variables and side effects |
149
+ | advance() | skips forward n rows from within a `for row in path.next()` loop|
150
+ | collect() | processes n rows and collects the lines that matched as lists |
151
+
152
+ ## CsvPaths
153
+ (<a href='https://github.com/dk107dk/csvpath/blob/main/csvpath/csvpaths.py'>code</a>)
154
+ `CsvPaths` manages validations of multiple files and/or multiple csvpaths. It coordinates the work of multiple `CsvPath` instances.
155
+ |method |function |
156
+ |------------------------|-----------------------------------------------------------------|
157
+ | csvpath() | gets a CsvPath object that knows all the file names available |
158
+ | collect_paths() | Same as CsvPath.collect() but for all paths sequentially |
159
+ | fast_forward_paths() | Same as CsvPath.fast_forward() but for all paths sequentially |
160
+ | next_paths() | Same as CsvPath.next() but for all paths sequentially |
161
+ | collect_by_line() | Same as CsvPath.collect() but for all paths breadth first |
162
+ | fast_forward_by_line() | Same as CsvPath.fast_forward() but for all paths breadth first |
163
+ | next_by_line() | Same as CsvPath.next() but for all paths breadth first |
164
+
165
+ The purpose of `CsvPaths` is to apply multiple csvpaths per CSV file and handle multiple files in sequence. `CsvPaths` has both serial and breadth-first versions of `CsvPath`'s `collect()`, `fast_forward()`, and `next()` methods. The breadth-first versions evaluate each csvpath for every line of a CSV file before restarting the evaluations with the next line.
166
+
167
+ ## Simple Example
168
+ To learn about automation, start with a simple driver. This is a basic programmatic use of CsvPath. It checks a file against a trivial schema, iterating the matching lines.
169
+
170
+ ```python
171
+ path = CsvPath().parse("""
172
+ $test.csv[1-25][
173
+ line(
174
+ string.notnone(#firstname),
175
+ string.notnone(#lastname)
176
+ )
177
+ ]
178
+ """)
179
+ for i, line in enumerate( path.next() ):
180
+ print(f"{i}: {line}")
181
+ ```
182
+
183
+ For production operations consider using [FlightPath Server](https://www.flightpathdata.com/server.html), instead of coding your own driver scripts.
184
+
185
+ CsvPath is primarily for data automation, not interactive use. There is a simple <a href='https://github.com/csvpath/csvpath/cli'>command line interface</a> for quick dev iterations. <a href='https://www.csvpath.org/getting-started/your-first-validation-the-lazy-way'>Read more about the CLI here</a>. For more dev and ops functionality, use [FlightPath Data](https://www.flightpathdata.com/flightpath.html), the open source frontend to CsvPath Framework.
186
+
187
+ <a name="grammar"></a>
188
+
189
+ # Grammars
190
+
191
+ CsvPath Validation Language is built up from three grammars:
192
+ * The csvpath statement grammar - the main language
193
+ * A `print()` function grammar - a simple print capability with variable and reference substitution
194
+ * The Reference Language grammar - the file location and querying language used in validation and preboarding operations
195
+
196
+ Read <a href='https://github.com/dk107dk/csvpath/blob/main/docs/grammar.md'>more about the CsvPath grammar definition here</a>.
197
+
198
+
199
+ <a name="more-info"></a>
200
+
201
+ # More Info
202
+
203
+ For more information about preboarding and the whole of CsvPath Framework, visit <a href="https://www.csvpath.org">https://www.csvpath.org</a>.
204
+
205
+ For the development and operations frontend to CsvPath Framework, take a look at <a href='https://www.flightpathdata.com/flightpath.html'>FlightPath Data</a>.
206
+
207
+ And to learn about the backend API server, head over to <a href='https://www.flightpathdata.com/server.html'>FlightPath Server</a>.
208
+
209
+ <a name="sponsors"></a>
210
+
211
+ # Sponsors
212
+
213
+ <a href='https://www.atestaanalytics.com/' >
214
+ <img width="25%" src="https://raw.githubusercontent.com/dk107dk/csvpath/main/docs/images/logo-wordmark-white-on-black-trimmed-padded.png" alt="Atesta Analytics"/></a>
215
+ <a href='https://www.datakitchen.io/'>
216
+ <img src="https://datakitchen.io/wp-content/uploads/2020/10/logo.svg"
217
+ style='width:160px; position:relative;bottom:-5px;left:15px' alt="DataKitchen" id="logo" data-height-percentage="45"></a>
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
@@ -0,0 +1,2 @@
1
+ from csvpath.matching.functions.boolean.yes import Yes as sure
2
+ from tests.extras.matching.functions.xml.extract import Extract as extract
@@ -23,7 +23,7 @@ log_file_size = 52428800
23
23
 
24
24
  [config]
25
25
  path = assets/config/jenkins-local-s3.ini
26
- allow_var_sub = True
26
+ allow_var_sub = yes
27
27
  var_sub_source = env
28
28
 
29
29
  [cache]
@@ -40,8 +40,8 @@ archive = tmp/s3/archive
40
40
  files = s3://csvpath-example-1/mac/inputs/named_files
41
41
  csvpaths = tmp/s3/inputs/named_paths
42
42
  on_unmatched_file_fingerprints = halt
43
- allow_http_files = True
44
- allow_local_files = True
43
+ allow_http_files = yes
44
+ allow_local_files = yes
45
45
 
46
46
  [listeners]
47
47
  groups = default
@@ -90,7 +90,7 @@ port = SFTPPLUS_PORT
90
90
  admin_username = SFTPPLUS_ADMIN_USERNAME
91
91
  admin_password = SFTPPLUS_ADMIN_PASSWORD
92
92
  api_url = https://. . . :10020/json
93
- scripts_dir =
93
+ scripts_dir =
94
94
  execute_timeout = 300
95
95
 
96
96
  [ckan]
@@ -105,5 +105,5 @@ timeout = 5
105
105
  verify = False
106
106
 
107
107
  [slack]
108
- webhook_url =
108
+ webhook_url =
109
109
 
@@ -37,7 +37,10 @@
37
37
  "jobs": [
38
38
  {
39
39
  "name": "unit-tests",
40
- "environment_variables": [],
40
+ "environment_variables": [{
41
+ "name":"CSVPATH_CONFIG_PATH",
42
+ "value":"assets/config/jenkins-local-s3.ini"
43
+ }],
41
44
  "tabs": [],
42
45
  "resources": ["mac"],
43
46
  "artifacts": [],
@@ -1,9 +1,6 @@
1
1
  CSVPATH_CONFIG_PATH="assets/config/jenkins-local-s3.ini"
2
2
  echo $CSVPATH_CONFIG_PATH
3
- source ~/dev/exports.sh
4
- echo ran exports sh
5
- whoami
6
- echo $GCS_CREDENTIALS_PATH
3
+ . ~/dev/exports.sh
7
4
  poetry install
8
5
  poetry run pytest
9
6
 
@@ -33,7 +33,12 @@
33
33
  "roles": [],
34
34
  "allow_only_on_success": false
35
35
  },
36
- "environment_variables": [],
36
+ "environment_variables": [
37
+ {
38
+ "name": "CSVPATH_CONFIG_PATH",
39
+ "value": "assets\\config\\config.ini"
40
+ }
41
+ ],
37
42
  "jobs": [
38
43
  {
39
44
  "name": "run",
@@ -4,11 +4,10 @@ gcs.skip = yes
4
4
  s3.skip = yes
5
5
  sftp.skip = yes
6
6
 
7
- [csvpath_files]
8
- extensions = txt, csvpath, csvpaths
9
7
 
10
- [csv_files]
11
- extensions = csv, tsv, dat, tab, psv, ssv
8
+ [extensions]
9
+ csvpath_files] = txt, csvpath, csvpaths
10
+ csv_files = csv, tsv, dat, tab, psv, ssv
12
11
 
13
12
  [errors]
14
13
  csvpath = raise, collect, print
@@ -34,7 +33,7 @@ path = cache
34
33
  use_cache = yes
35
34
 
36
35
  [functions]
37
- imports = config/functions.imports
36
+ imports = assets/config/extra-functions.imports
38
37
 
39
38
  [results]
40
39
  archive = tmp/local/archive
@@ -125,6 +124,4 @@ webhook_url =
125
124
  run_scripts = yes
126
125
  shell = /bin/bash
127
126
 
128
- [extensions]
129
- csvpath_files = None
130
127