csvpath 0.0.619__tar.gz → 0.0.621__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 (566) hide show
  1. {csvpath-0.0.619 → csvpath-0.0.621}/PKG-INFO +4 -3
  2. {csvpath-0.0.619 → csvpath-0.0.621}/README.md +1 -2
  3. {csvpath-0.0.619 → csvpath-0.0.621}/assets/config/jenkins-local-gcs.ini +3 -3
  4. {csvpath-0.0.619 → csvpath-0.0.621}/assets/config/jenkins-local-s3.ini +3 -3
  5. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/csvpath.py +23 -12
  6. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/csvpaths.py +4 -0
  7. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/files/file_describer.py +16 -10
  8. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/files/file_manager.py +42 -11
  9. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/files/file_registrar.py +4 -0
  10. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/otlp/otlp_results_listener.py +2 -0
  11. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/webhook/webhook_listener.py +1 -1
  12. csvpath-0.0.621/csvpath/managers/paths/paths_asset_manager.py +78 -0
  13. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/paths/paths_manager.py +71 -11
  14. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/result_registrar.py +2 -0
  15. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/results_manager.py +31 -11
  16. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/results_metadata.py +17 -0
  17. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/results_registrar.py +5 -0
  18. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/function_factory.py +4 -0
  19. csvpath-0.0.621/csvpath/matching/functions/json/jsonschema.py +123 -0
  20. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/misc/fingerprint.py +0 -3
  21. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/strings/format.py +2 -2
  22. csvpath-0.0.621/csvpath/matching/functions/xml/xsd.py +143 -0
  23. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/modes/files_mode.py +5 -2
  24. csvpath-0.0.621/csvpath/references/csvpaths_reference_finder_3.py +754 -0
  25. csvpath-0.0.621/csvpath/references/files_reference_finder_3.py +1430 -0
  26. csvpath-0.0.621/csvpath/references/function_describer_3.py +104 -0
  27. csvpath-0.0.621/csvpath/references/functions/__init__.py +0 -0
  28. csvpath-0.0.621/csvpath/references/functions/fields/__init__.py +0 -0
  29. csvpath-0.0.621/csvpath/references/functions/fields/actual_data_file_3.py +25 -0
  30. csvpath-0.0.621/csvpath/references/functions/fields/archive_3.py +50 -0
  31. csvpath-0.0.621/csvpath/references/functions/fields/archive_path_3.py +31 -0
  32. csvpath-0.0.621/csvpath/references/functions/fields/completed_3.py +27 -0
  33. csvpath-0.0.621/csvpath/references/functions/fields/destination_address_3.py +28 -0
  34. csvpath-0.0.621/csvpath/references/functions/fields/destination_password_3.py +25 -0
  35. csvpath-0.0.621/csvpath/references/functions/fields/destination_port_3.py +24 -0
  36. csvpath-0.0.621/csvpath/references/functions/fields/destination_username_3.py +25 -0
  37. csvpath-0.0.621/csvpath/references/functions/fields/destinations_3.py +28 -0
  38. csvpath-0.0.621/csvpath/references/functions/fields/error_count_3.py +22 -0
  39. csvpath-0.0.621/csvpath/references/functions/fields/file_fingerprints_3.py +31 -0
  40. csvpath-0.0.621/csvpath/references/functions/fields/file_home_3.py +25 -0
  41. csvpath-0.0.621/csvpath/references/functions/fields/file_manifest_3.py +30 -0
  42. csvpath-0.0.621/csvpath/references/functions/fields/file_path_3.py +28 -0
  43. csvpath-0.0.621/csvpath/references/functions/fields/files_complete_3.py +28 -0
  44. csvpath-0.0.621/csvpath/references/functions/fields/fingerprint_3.py +78 -0
  45. csvpath-0.0.621/csvpath/references/functions/fields/group_file_3.py +22 -0
  46. csvpath-0.0.621/csvpath/references/functions/fields/group_home_3.py +26 -0
  47. csvpath-0.0.621/csvpath/references/functions/fields/group_manifest_3.py +25 -0
  48. csvpath-0.0.621/csvpath/references/functions/fields/home_3.py +38 -0
  49. csvpath-0.0.621/csvpath/references/functions/fields/host_3.py +45 -0
  50. csvpath-0.0.621/csvpath/references/functions/fields/hostname_3.py +34 -0
  51. csvpath-0.0.621/csvpath/references/functions/fields/identity_3.py +25 -0
  52. csvpath-0.0.621/csvpath/references/functions/fields/instance_home_3.py +28 -0
  53. csvpath-0.0.621/csvpath/references/functions/fields/instance_index_3.py +22 -0
  54. csvpath-0.0.621/csvpath/references/functions/fields/manifest_path_3.py +32 -0
  55. csvpath-0.0.621/csvpath/references/functions/fields/mark_3.py +26 -0
  56. csvpath-0.0.621/csvpath/references/functions/fields/method_3.py +16 -0
  57. csvpath-0.0.621/csvpath/references/functions/fields/named_file_fingerprint_3.py +27 -0
  58. csvpath-0.0.621/csvpath/references/functions/fields/named_file_home_3.py +25 -0
  59. csvpath-0.0.621/csvpath/references/functions/fields/named_file_last_change_3.py +25 -0
  60. csvpath-0.0.621/csvpath/references/functions/fields/named_file_name_3.py +37 -0
  61. csvpath-0.0.621/csvpath/references/functions/fields/named_file_path_3.py +23 -0
  62. csvpath-0.0.621/csvpath/references/functions/fields/named_file_size_3.py +24 -0
  63. csvpath-0.0.621/csvpath/references/functions/fields/named_file_uuid_3.py +23 -0
  64. csvpath-0.0.621/csvpath/references/functions/fields/named_files_root_3.py +28 -0
  65. csvpath-0.0.621/csvpath/references/functions/fields/named_paths_3.py +25 -0
  66. csvpath-0.0.621/csvpath/references/functions/fields/named_paths_count_3.py +24 -0
  67. csvpath-0.0.621/csvpath/references/functions/fields/named_paths_fingerprint_3.py +35 -0
  68. csvpath-0.0.621/csvpath/references/functions/fields/named_paths_group_3.py +28 -0
  69. csvpath-0.0.621/csvpath/references/functions/fields/named_paths_identities_3.py +25 -0
  70. csvpath-0.0.621/csvpath/references/functions/fields/named_paths_name_3.py +34 -0
  71. csvpath-0.0.621/csvpath/references/functions/fields/named_paths_root_3.py +28 -0
  72. csvpath-0.0.621/csvpath/references/functions/fields/named_paths_uuid_3.py +26 -0
  73. csvpath-0.0.621/csvpath/references/functions/fields/named_results_name_3.py +21 -0
  74. csvpath-0.0.621/csvpath/references/functions/fields/on_arrival_3.py +44 -0
  75. csvpath-0.0.621/csvpath/references/functions/fields/origin_3.py +37 -0
  76. csvpath-0.0.621/csvpath/references/functions/fields/origin_data_file_3.py +29 -0
  77. csvpath-0.0.621/csvpath/references/functions/fields/preceding_instance_identity_3.py +28 -0
  78. csvpath-0.0.621/csvpath/references/functions/fields/reference_field_3.py +29 -0
  79. csvpath-0.0.621/csvpath/references/functions/fields/run_dir_3.py +22 -0
  80. csvpath-0.0.621/csvpath/references/functions/fields/run_home_3.py +28 -0
  81. csvpath-0.0.621/csvpath/references/functions/fields/run_method_3.py +28 -0
  82. csvpath-0.0.621/csvpath/references/functions/fields/run_uuid_3.py +34 -0
  83. csvpath-0.0.621/csvpath/references/functions/fields/script_on_complete_all_3.py +30 -0
  84. csvpath-0.0.621/csvpath/references/functions/fields/script_on_complete_error_3.py +25 -0
  85. csvpath-0.0.621/csvpath/references/functions/fields/script_on_complete_invalid_3.py +25 -0
  86. csvpath-0.0.621/csvpath/references/functions/fields/script_on_complete_valid_3.py +25 -0
  87. csvpath-0.0.621/csvpath/references/functions/fields/scripts_3.py +27 -0
  88. csvpath-0.0.621/csvpath/references/functions/fields/serial_3.py +29 -0
  89. csvpath-0.0.621/csvpath/references/functions/fields/source_address_3.py +30 -0
  90. csvpath-0.0.621/csvpath/references/functions/fields/source_mode_preceding_3.py +19 -0
  91. csvpath-0.0.621/csvpath/references/functions/fields/source_password_3.py +24 -0
  92. csvpath-0.0.621/csvpath/references/functions/fields/source_port_3.py +24 -0
  93. csvpath-0.0.621/csvpath/references/functions/fields/source_username_3.py +24 -0
  94. csvpath-0.0.621/csvpath/references/functions/fields/sources_3.py +27 -0
  95. csvpath-0.0.621/csvpath/references/functions/fields/status_3.py +26 -0
  96. csvpath-0.0.621/csvpath/references/functions/fields/template_3.py +68 -0
  97. csvpath-0.0.621/csvpath/references/functions/fields/time_3.py +34 -0
  98. csvpath-0.0.621/csvpath/references/functions/fields/time_completed_3.py +33 -0
  99. csvpath-0.0.621/csvpath/references/functions/fields/transfer_on_complete_all_3.py +32 -0
  100. csvpath-0.0.621/csvpath/references/functions/fields/transfer_on_complete_error_3.py +29 -0
  101. csvpath-0.0.621/csvpath/references/functions/fields/transfer_on_complete_invalid_3.py +29 -0
  102. csvpath-0.0.621/csvpath/references/functions/fields/transfer_on_complete_valid_3.py +27 -0
  103. csvpath-0.0.621/csvpath/references/functions/fields/transfers_3.py +33 -0
  104. csvpath-0.0.621/csvpath/references/functions/fields/type_3.py +22 -0
  105. csvpath-0.0.621/csvpath/references/functions/fields/username_3.py +41 -0
  106. csvpath-0.0.621/csvpath/references/functions/fields/uuid_3.py +55 -0
  107. csvpath-0.0.621/csvpath/references/functions/fields/valid_3.py +33 -0
  108. csvpath-0.0.621/csvpath/references/functions/fields/webhooks_3.py +26 -0
  109. csvpath-0.0.621/csvpath/references/functions/fields/webhooks_on_complete_all_3.py +27 -0
  110. csvpath-0.0.621/csvpath/references/functions/fields/webhooks_on_complete_error_3.py +25 -0
  111. csvpath-0.0.621/csvpath/references/functions/fields/webhooks_on_complete_invalid_3.py +25 -0
  112. csvpath-0.0.621/csvpath/references/functions/fields/webhooks_on_complete_valid_3.py +25 -0
  113. csvpath-0.0.621/csvpath/references/functions/filters/__init__.py +0 -0
  114. csvpath-0.0.621/csvpath/references/functions/filters/empty_3.py +16 -0
  115. csvpath-0.0.621/csvpath/references/functions/filters/false_3.py +16 -0
  116. csvpath-0.0.621/csvpath/references/functions/filters/idchain_3.py +96 -0
  117. csvpath-0.0.621/csvpath/references/functions/filters/none_3.py +16 -0
  118. csvpath-0.0.621/csvpath/references/functions/filters/not_empty_3.py +16 -0
  119. csvpath-0.0.621/csvpath/references/functions/filters/not_none_3.py +21 -0
  120. csvpath-0.0.621/csvpath/references/functions/filters/predicate_function_3.py +22 -0
  121. csvpath-0.0.621/csvpath/references/functions/filters/true_3.py +29 -0
  122. csvpath-0.0.621/csvpath/references/functions/function_3.py +361 -0
  123. csvpath-0.0.621/csvpath/references/functions/reference_function_factory_3.py +347 -0
  124. csvpath-0.0.621/csvpath/references/functions/selectors/__init__.py +0 -0
  125. csvpath-0.0.621/csvpath/references/functions/selectors/all_3.py +39 -0
  126. csvpath-0.0.621/csvpath/references/functions/selectors/date_3.py +31 -0
  127. csvpath-0.0.621/csvpath/references/functions/selectors/first_3.py +19 -0
  128. csvpath-0.0.621/csvpath/references/functions/selectors/flatten_3.py +43 -0
  129. csvpath-0.0.621/csvpath/references/functions/selectors/from_3.py +68 -0
  130. csvpath-0.0.621/csvpath/references/functions/selectors/groups_3.py +41 -0
  131. csvpath-0.0.621/csvpath/references/functions/selectors/having_3.py +60 -0
  132. csvpath-0.0.621/csvpath/references/functions/selectors/index_3.py +25 -0
  133. csvpath-0.0.621/csvpath/references/functions/selectors/last_3.py +17 -0
  134. csvpath-0.0.621/csvpath/references/functions/selectors/name_3.py +71 -0
  135. csvpath-0.0.621/csvpath/references/functions/selectors/regex_3.py +92 -0
  136. csvpath-0.0.621/csvpath/references/functions/selectors/to_3.py +38 -0
  137. csvpath-0.0.621/csvpath/references/functions/values/__init__.py +0 -0
  138. csvpath-0.0.621/csvpath/references/functions/values/day_3.py +17 -0
  139. csvpath-0.0.621/csvpath/references/functions/values/day_name_3.py +17 -0
  140. csvpath-0.0.621/csvpath/references/functions/values/hour_24_3.py +18 -0
  141. csvpath-0.0.621/csvpath/references/functions/values/hour_3.py +19 -0
  142. csvpath-0.0.621/csvpath/references/functions/values/minute_3.py +17 -0
  143. csvpath-0.0.621/csvpath/references/functions/values/month_3.py +17 -0
  144. csvpath-0.0.621/csvpath/references/functions/values/month_name_3.py +17 -0
  145. csvpath-0.0.621/csvpath/references/functions/values/second_3.py +17 -0
  146. csvpath-0.0.621/csvpath/references/functions/values/today_3.py +23 -0
  147. csvpath-0.0.621/csvpath/references/functions/values/year_3.py +39 -0
  148. csvpath-0.0.621/csvpath/references/functions/values/yesterday_3.py +20 -0
  149. csvpath-0.0.621/csvpath/references/functions/well_known_files/__init__.py +0 -0
  150. csvpath-0.0.621/csvpath/references/functions/well_known_files/data_3.py +28 -0
  151. csvpath-0.0.621/csvpath/references/functions/well_known_files/definition_3.py +49 -0
  152. csvpath-0.0.621/csvpath/references/functions/well_known_files/errors_3.py +58 -0
  153. csvpath-0.0.621/csvpath/references/functions/well_known_files/file_3.py +45 -0
  154. csvpath-0.0.621/csvpath/references/functions/well_known_files/log_3.py +37 -0
  155. csvpath-0.0.621/csvpath/references/functions/well_known_files/manifest_3.py +65 -0
  156. csvpath-0.0.621/csvpath/references/functions/well_known_files/meta_3.py +27 -0
  157. csvpath-0.0.621/csvpath/references/functions/well_known_files/printouts_3.py +31 -0
  158. csvpath-0.0.621/csvpath/references/functions/well_known_files/unmatched_3.py +29 -0
  159. csvpath-0.0.621/csvpath/references/functions/well_known_files/vars_3.py +27 -0
  160. csvpath-0.0.621/csvpath/references/reference_3.py +598 -0
  161. csvpath-0.0.621/csvpath/references/reference_exceptions_3.py +37 -0
  162. csvpath-0.0.621/csvpath/references/reference_expression_3.py +382 -0
  163. csvpath-0.0.621/csvpath/references/reference_finder_3.py +874 -0
  164. csvpath-0.0.621/csvpath/references/reference_finder_factory_3.py +50 -0
  165. csvpath-0.0.621/csvpath/references/reference_grammar_3.py +199 -0
  166. csvpath-0.0.621/csvpath/references/reference_parser_3.py +112 -0
  167. csvpath-0.0.621/csvpath/references/reference_results_3.py +208 -0
  168. csvpath-0.0.621/csvpath/references/reference_transformer_3.py +267 -0
  169. csvpath-0.0.621/csvpath/references/results_reference_finder_3.py +1765 -0
  170. csvpath-0.0.621/csvpath/scanning/__init__.py +0 -0
  171. csvpath-0.0.621/csvpath/util/azure/azure_json_document_reader.py +8 -0
  172. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/cache.py +14 -9
  173. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/config.py +24 -0
  174. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/file_readers.py +8 -7
  175. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/file_writers.py +1 -1
  176. csvpath-0.0.621/csvpath/util/gcs/gcs_json_document_reader.py +8 -0
  177. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/json/json_data_reader.py +1 -5
  178. csvpath-0.0.621/csvpath/util/json/json_document_reader.py +38 -0
  179. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/json/json_reader_helper.py +28 -8
  180. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/last_line_stats.py +6 -2
  181. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/line_counter.py +6 -3
  182. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/line_monitor.py +3 -0
  183. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/line_spooler.py +93 -8
  184. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/nos.py +6 -2
  185. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/path_util.py +5 -1
  186. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/run_home_maker.py +1 -0
  187. csvpath-0.0.621/csvpath/util/s3/s3_json_document_reader.py +8 -0
  188. csvpath-0.0.621/csvpath/util/sftp/sftp_json_document_reader.py +8 -0
  189. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/sftp/sftp_nos.py +5 -3
  190. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/var_utility.py +1 -1
  191. {csvpath-0.0.619 → csvpath-0.0.621}/pyproject.toml +3 -1
  192. {csvpath-0.0.619 → csvpath-0.0.621}/LICENSE +0 -0
  193. {csvpath-0.0.619 → csvpath-0.0.621}/assets/.DS_Store +0 -0
  194. {csvpath-0.0.619 → csvpath-0.0.621}/assets/config/config.ini +0 -0
  195. {csvpath-0.0.619 → csvpath-0.0.621}/assets/config/extra-functions.imports +0 -0
  196. {csvpath-0.0.619 → csvpath-0.0.621}/assets/config/function.imports +0 -0
  197. {csvpath-0.0.619 → csvpath-0.0.621}/assets/config/jenkins-local-azure.ini +0 -0
  198. {csvpath-0.0.619 → csvpath-0.0.621}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
  199. {csvpath-0.0.619 → csvpath-0.0.621}/assets/config/jenkins-local-sftp.ini +0 -0
  200. {csvpath-0.0.619 → csvpath-0.0.621}/assets/config/jenkins-windows-azure.ini +0 -0
  201. {csvpath-0.0.619 → csvpath-0.0.621}/assets/config/jenkins-windows-gcs.ini +0 -0
  202. {csvpath-0.0.619 → csvpath-0.0.621}/assets/config/jenkins-windows-local.ini +0 -0
  203. {csvpath-0.0.619 → csvpath-0.0.621}/assets/config/jenkins-windows-s3.ini +0 -0
  204. {csvpath-0.0.619 → csvpath-0.0.621}/assets/config/jenkins-windows-sftp.ini +0 -0
  205. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/.DS_Store +0 -0
  206. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/Mac.goenvironment.json +0 -0
  207. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/Windows.goenvironment.json +0 -0
  208. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
  209. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/mac/azure.sh +0 -0
  210. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/mac/gcs.sh +0 -0
  211. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/mac/google-pipeline.gopipeline.json +0 -0
  212. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
  213. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/mac/local.sh +0 -0
  214. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
  215. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/mac/s3.sh +0 -0
  216. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
  217. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/mac/sftp.sh +0 -0
  218. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/windows/azure.bat +0 -0
  219. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/windows/gcs.bat +0 -0
  220. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/windows/local.bat +0 -0
  221. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/windows/s3.bat +0 -0
  222. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/windows/sftp.bat +0 -0
  223. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
  224. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
  225. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
  226. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
  227. {csvpath-0.0.619 → csvpath-0.0.621}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
  228. {csvpath-0.0.619 → csvpath-0.0.621}/assets/integrations/.DS_Store +0 -0
  229. {csvpath-0.0.619 → csvpath-0.0.621}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
  230. {csvpath-0.0.619 → csvpath-0.0.621}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
  231. {csvpath-0.0.619 → csvpath-0.0.621}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
  232. {csvpath-0.0.619 → csvpath-0.0.621}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
  233. {csvpath-0.0.619 → csvpath-0.0.621}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
  234. {csvpath-0.0.619 → csvpath-0.0.621}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
  235. {csvpath-0.0.619 → csvpath-0.0.621}/assets/integrations/sqlite/csvpath +0 -0
  236. {csvpath-0.0.619 → csvpath-0.0.621}/assets/integrations/sqlite/schema.sql +0 -0
  237. {csvpath-0.0.619 → csvpath-0.0.621}/assets/libs/release_candidate_maker-0.0.25-py3-none-any.whl +0 -0
  238. {csvpath-0.0.619 → csvpath-0.0.621}/assets/libs/release_candidate_maker-0.0.27-py3-none-any.whl +0 -0
  239. {csvpath-0.0.619 → csvpath-0.0.621}/assets/libs/release_candidate_maker-0.0.28-py3-none-any.whl +0 -0
  240. {csvpath-0.0.619 → csvpath-0.0.621}/assets/libs/release_candidate_maker-0.0.29-py3-none-any.whl +0 -0
  241. {csvpath-0.0.619 → csvpath-0.0.621}/assets/libs/release_candidate_maker-0.0.30.tar.gz +0 -0
  242. {csvpath-0.0.619 → csvpath-0.0.621}/assets/libs/release_candidate_maker-0.0.31.tar.gz +0 -0
  243. {csvpath-0.0.619 → csvpath-0.0.621}/assets/libs/release_candidate_maker-0.0.33.tar.gz +0 -0
  244. {csvpath-0.0.619 → csvpath-0.0.621}/assets/libs/release_candidate_maker-0.0.34.tar.gz +0 -0
  245. {csvpath-0.0.619 → csvpath-0.0.621}/assets/libs/release_candidate_maker-0.0.35.tar.gz +0 -0
  246. {csvpath-0.0.619 → csvpath-0.0.621}/assets/libs/release_candidate_maker-0.0.36.tar.gz +0 -0
  247. {csvpath-0.0.619 → csvpath-0.0.621}/config/config.ini +0 -0
  248. {csvpath-0.0.619 → csvpath-0.0.621}/config/env.json +0 -0
  249. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/__init__.py +0 -0
  250. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/cli/__init__.py +0 -0
  251. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/cli/asker.py +0 -0
  252. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/cli/cli.py +0 -0
  253. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/cli/const.py +0 -0
  254. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/cli/debug_config.py +0 -0
  255. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/cli/drill_down.py +0 -0
  256. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/cli/function_describer.py +0 -0
  257. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/cli/function_lister.py +0 -0
  258. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/cli/selecter.py +0 -0
  259. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/__init__.py +0 -0
  260. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/errors/error.py +0 -0
  261. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/errors/error_collector.py +0 -0
  262. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/errors/error_comms.py +0 -0
  263. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/errors/error_manager.py +0 -0
  264. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/files/file_activator.py +0 -0
  265. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/files/file_descriptor.py +0 -0
  266. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/files/file_metadata.py +0 -0
  267. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/files/file_names_rules.py +0 -0
  268. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/files/files_activation_listener.py +0 -0
  269. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/files/files_listener.py +0 -0
  270. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
  271. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ckan/ckan.py +0 -0
  272. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
  273. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ckan/datafile.py +0 -0
  274. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ckan/dataset.py +0 -0
  275. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ol/event.py +0 -0
  276. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ol/event_result.py +0 -0
  277. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
  278. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ol/job.py +0 -0
  279. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
  280. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
  281. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
  282. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
  283. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ol/run.py +0 -0
  284. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
  285. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ol/run_state.py +0 -0
  286. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/ol/sender.py +0 -0
  287. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
  288. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/otlp/metrics.py +0 -0
  289. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
  290. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
  291. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
  292. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
  293. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
  294. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
  295. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
  296. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/slack/event.py +0 -0
  297. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/slack/sender.py +0 -0
  298. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/sql/engine.py +0 -0
  299. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
  300. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
  301. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
  302. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
  303. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
  304. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/sql/tables.py +0 -0
  305. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/sql/updates.py +0 -0
  306. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
  307. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
  308. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
  309. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/integrations/webhook/webhook_results_listener.py +0 -0
  310. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/listener.py +0 -0
  311. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/metadata.py +0 -0
  312. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/paths/paths_describer.py +0 -0
  313. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/paths/paths_descriptor.py +0 -0
  314. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/paths/paths_listener.py +0 -0
  315. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/paths/paths_metadata.py +0 -0
  316. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/paths/paths_registrar.py +0 -0
  317. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/registrar.py +0 -0
  318. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
  319. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
  320. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
  321. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
  322. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/readers/readers.py +0 -0
  323. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/result.py +0 -0
  324. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/result_file_reader.py +0 -0
  325. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/result_metadata.py +0 -0
  326. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/result_serializer.py +0 -0
  327. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/results/transfers_manager.py +0 -0
  328. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/run/run_listener_stdout.py +0 -0
  329. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/run/run_metadata.py +0 -0
  330. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/run/run_registrar.py +0 -0
  331. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/server_config.py +0 -0
  332. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/managers/test_listener.py +0 -0
  333. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/__init__.py +0 -0
  334. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/__init__.py +0 -0
  335. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/args.py +0 -0
  336. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/args_helper.py +0 -0
  337. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/boolean/all.py +0 -0
  338. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/boolean/andf.py +0 -0
  339. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/boolean/any.py +0 -0
  340. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/boolean/between.py +0 -0
  341. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/boolean/empty.py +0 -0
  342. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/boolean/exists.py +0 -0
  343. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/boolean/inf.py +0 -0
  344. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/boolean/no.py +0 -0
  345. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/boolean/notf.py +0 -0
  346. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/boolean/orf.py +0 -0
  347. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/boolean/yes.py +0 -0
  348. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/counting/count.py +0 -0
  349. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/counting/count_bytes.py +0 -0
  350. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/counting/count_headers.py +0 -0
  351. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/counting/count_lines.py +0 -0
  352. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/counting/count_scans.py +0 -0
  353. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/counting/counter.py +0 -0
  354. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/counting/every.py +0 -0
  355. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/counting/has_matches.py +0 -0
  356. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/counting/increment.py +0 -0
  357. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/counting/tally.py +0 -0
  358. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/counting/total_lines.py +0 -0
  359. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/dates/now.py +0 -0
  360. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/dates/part.py +0 -0
  361. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/dates/roll.py +0 -0
  362. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/function.py +0 -0
  363. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/function_finder.py +0 -0
  364. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/function_focus.py +0 -0
  365. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/append.py +0 -0
  366. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/collect.py +0 -0
  367. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/empty_stack.py +0 -0
  368. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/end.py +0 -0
  369. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/header_name.py +0 -0
  370. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
  371. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/headers.py +0 -0
  372. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/headers_stack.py +0 -0
  373. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/insert.py +0 -0
  374. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/line_before.py +0 -0
  375. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/mismatch.py +0 -0
  376. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/remove.py +0 -0
  377. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/rename.py +0 -0
  378. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/replace.py +0 -0
  379. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/headers/reset_headers.py +0 -0
  380. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/json/jsonpath.py +0 -0
  381. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/lines/advance.py +0 -0
  382. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/lines/after_blank.py +0 -0
  383. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/lines/dups.py +0 -0
  384. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/lines/first.py +0 -0
  385. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/lines/first_line.py +0 -0
  386. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/lines/last.py +0 -0
  387. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/lines/stop.py +0 -0
  388. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/math/above.py +0 -0
  389. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/math/add.py +0 -0
  390. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/math/divide.py +0 -0
  391. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/math/equals.py +0 -0
  392. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/math/intf.py +0 -0
  393. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/math/mod.py +0 -0
  394. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/math/multiply.py +0 -0
  395. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/math/odd.py +0 -0
  396. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/math/round.py +0 -0
  397. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/math/subtotal.py +0 -0
  398. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/math/subtract.py +0 -0
  399. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/math/sum.py +0 -0
  400. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/misc/env.py +0 -0
  401. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/misc/importf.py +0 -0
  402. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/misc/metadata.py +0 -0
  403. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/misc/parquet.py +0 -0
  404. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/misc/random.py +0 -0
  405. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/misc/runtime.py +0 -0
  406. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/print/jinjaf.py +0 -0
  407. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/print/print_line.py +0 -0
  408. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/print/print_queue.py +0 -0
  409. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/print/printf.py +0 -0
  410. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/print/table.py +0 -0
  411. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/sql/select.py +0 -0
  412. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/sql/sql_in.py +0 -0
  413. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/stats/minf.py +0 -0
  414. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/stats/nminmax.py +0 -0
  415. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/stats/percent.py +0 -0
  416. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/stats/percent_unique.py +0 -0
  417. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/stats/stdev.py +0 -0
  418. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/strings/alter.py +0 -0
  419. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/strings/caps.py +0 -0
  420. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/strings/concat.py +0 -0
  421. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/strings/contains.py +0 -0
  422. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/strings/length.py +0 -0
  423. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/strings/lower.py +0 -0
  424. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/strings/metaphone.py +0 -0
  425. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/strings/regex.py +0 -0
  426. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/strings/starts_with.py +0 -0
  427. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/strings/strip.py +0 -0
  428. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/strings/substring.py +0 -0
  429. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/strings/upper.py +0 -0
  430. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/testing/debug.py +0 -0
  431. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/types/__init__.py +0 -0
  432. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/types/blank.py +0 -0
  433. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/types/boolean.py +0 -0
  434. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/types/datatype.py +0 -0
  435. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/types/datef.py +0 -0
  436. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/types/decimal.py +0 -0
  437. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/types/email.py +0 -0
  438. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/types/nonef.py +0 -0
  439. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/types/string.py +0 -0
  440. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/types/type.py +0 -0
  441. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/types/url.py +0 -0
  442. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/types/uuid.py +0 -0
  443. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/types/wildcard.py +0 -0
  444. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/validity/fail.py +0 -0
  445. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/validity/failed.py +0 -0
  446. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/validity/line.py +0 -0
  447. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/validity/matches.py +0 -0
  448. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/validity/percent_matching.py +0 -0
  449. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/variables/clear.py +0 -0
  450. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/variables/get.py +0 -0
  451. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/variables/index_of.py +0 -0
  452. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/variables/pushpop.py +0 -0
  453. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/variables/put.py +0 -0
  454. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/variables/slice.py +0 -0
  455. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/variables/sort.py +0 -0
  456. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/variables/track.py +0 -0
  457. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/variables/variables.py +0 -0
  458. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/functions/xml/xpath.py +0 -0
  459. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/lark_parser.py +0 -0
  460. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/lark_transformer.py +0 -0
  461. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/matcher.py +0 -0
  462. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/productions/__init__.py +0 -0
  463. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/productions/equality.py +0 -0
  464. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/productions/expression.py +0 -0
  465. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/productions/header.py +0 -0
  466. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/productions/matchable.py +0 -0
  467. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/productions/qualified.py +0 -0
  468. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/productions/reference.py +0 -0
  469. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/productions/term.py +0 -0
  470. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/productions/variable.py +0 -0
  471. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/util/exceptions.py +0 -0
  472. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/util/expression_encoder.py +0 -0
  473. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/util/expression_utility.py +0 -0
  474. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/util/lark_print_parser.py +0 -0
  475. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/util/parquet_utility.py +0 -0
  476. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/util/print_parser.py +0 -0
  477. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/matching/util/runtime_data_collector.py +0 -0
  478. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/modes/error_mode.py +0 -0
  479. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/modes/explain_mode.py +0 -0
  480. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/modes/logic_mode.py +0 -0
  481. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/modes/mode_controller.py +0 -0
  482. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/modes/print_mode.py +0 -0
  483. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/modes/return_mode.py +0 -0
  484. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/modes/run_mode.py +0 -0
  485. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/modes/source_mode.py +0 -0
  486. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/modes/transfer_mode.py +0 -0
  487. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/modes/unmatched_mode.py +0 -0
  488. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/modes/validation_mode.py +0 -0
  489. {csvpath-0.0.619/csvpath/scanning → csvpath-0.0.621/csvpath/references}/__init__.py +0 -0
  490. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/scanning/scanner2.py +0 -0
  491. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/scanning/scanner2_parser.py +0 -0
  492. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/scanning/scanner2_transformer.py +0 -0
  493. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/azure/azure_data_reader.py +0 -0
  494. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/azure/azure_data_writer.py +0 -0
  495. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/azure/azure_fingerprinter.py +0 -0
  496. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/azure/azure_json_data_reader.py +0 -0
  497. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/azure/azure_nos.py +0 -0
  498. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/azure/azure_timing_policy.py +0 -0
  499. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/azure/azure_utils.py +0 -0
  500. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
  501. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/backend_check.py +0 -0
  502. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/box.py +0 -0
  503. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/caser.py +0 -0
  504. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/class_loader.py +0 -0
  505. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/code.py +0 -0
  506. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/config_env.py +0 -0
  507. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/config_exception.py +0 -0
  508. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/date_util.py +0 -0
  509. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/exceptions.py +0 -0
  510. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/file_info.py +0 -0
  511. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/file_utility.py +0 -0
  512. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/gcs/gcs_data_reader.py +0 -0
  513. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/gcs/gcs_data_writer.py +0 -0
  514. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
  515. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/gcs/gcs_json_data_reader.py +0 -0
  516. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/gcs/gcs_nos.py +0 -0
  517. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/gcs/gcs_utils.py +0 -0
  518. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
  519. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/hasher.py +0 -0
  520. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/http/http_data_reader.py +0 -0
  521. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/intermediary.py +0 -0
  522. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/log_utility.py +0 -0
  523. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/metadata_parser.py +0 -0
  524. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/pandas_data_reader.py +0 -0
  525. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/printer.py +0 -0
  526. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/py_file_utility.py +0 -0
  527. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/files_reference_finder_2.py +0 -0
  528. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
  529. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/files_tools/range_finder.py +0 -0
  530. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/ref_utils.py +0 -0
  531. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/reference_exceptions.py +0 -0
  532. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/reference_grammar.py +0 -0
  533. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
  534. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/reference_parser.py +0 -0
  535. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/reference_results.py +0 -0
  536. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/reference_transformer.py +0 -0
  537. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/results_reference_finder_2.py +0 -0
  538. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/results_tools/data_finder.py +0 -0
  539. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/results_tools/date_filter.py +0 -0
  540. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/results_tools/identity_finder.py +0 -0
  541. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/results_tools/path_filter.py +0 -0
  542. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
  543. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/results_tools/token_filters.py +0 -0
  544. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
  545. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/references/tools/date_completer.py +0 -0
  546. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/referrer_printer.py +0 -0
  547. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/s3/s3_data_reader.py +0 -0
  548. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/s3/s3_data_writer.py +0 -0
  549. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/s3/s3_fingerprinter.py +0 -0
  550. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/s3/s3_json_data_reader.py +0 -0
  551. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/s3/s3_nos.py +0 -0
  552. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/s3/s3_utils.py +0 -0
  553. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
  554. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/sftp/sftp_config.py +0 -0
  555. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/sftp/sftp_data_reader.py +0 -0
  556. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/sftp/sftp_data_writer.py +0 -0
  557. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
  558. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/sftp/sftp_json_data_reader.py +0 -0
  559. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/sftp/sftp_server_creds.py +0 -0
  560. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/sftp/sftp_walk.py +0 -0
  561. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
  562. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/sqliter.py +0 -0
  563. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/stopwatch.py +0 -0
  564. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/template_util.py +0 -0
  565. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/xlsx/xlsx_data_reader.py +0 -0
  566. {csvpath-0.0.619 → csvpath-0.0.621}/csvpath/util/xlsx/xlsx_reader_helper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: csvpath
3
- Version: 0.0.619
3
+ Version: 0.0.621
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
@@ -33,6 +33,7 @@ Requires-Dist: jinja2 (==3.1.6)
33
33
  Requires-Dist: jsonlines (==4.0.0)
34
34
  Requires-Dist: jsonpath-ng (==1.8.0)
35
35
  Requires-Dist: jsonpickle (==4.1.1)
36
+ Requires-Dist: jsonschema (>=4.26.0,<5.0.0)
36
37
  Requires-Dist: lark (==1.3.1)
37
38
  Requires-Dist: lxml (==6.0.2)
38
39
  Requires-Dist: marquez-python (==0.50.0)
@@ -59,6 +60,7 @@ Requires-Dist: smart-open[all] (==7.5.1)
59
60
  Requires-Dist: sqlalchemy (==2.0.48)
60
61
  Requires-Dist: tabulate (==0.9.0)
61
62
  Requires-Dist: validators (==0.34.0)
63
+ Requires-Dist: xmlschema (>=4.3.2,<5.0.0)
62
64
  Project-URL: Csvpath.org, https://www.csvpath.org
63
65
  Project-URL: Github, https://github.com/csvpath/csvpath.git
64
66
  Description-Content-Type: text/markdown
@@ -113,8 +115,7 @@ If you need help getting started, there are lots of ways to reach us.
113
115
  - Email support@csvpath.org
114
116
  - Or reach out to one of our [sponsors, below](#sponsors).
115
117
 
116
- ![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)
117
-
118
+ ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/csvpath?logoColor=yellow&color=yellow) ![GitHub commit activity](https://img.shields.io/github/commit-activity/m/dk107dk/csvpath) ![PyPI - Version](https://img.shields.io/pypi/v/csvpath) [![PyPI Downloads](https://static.pepy.tech/personalized-badge/csvpath?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/csvpath)
118
119
 
119
120
  # Contents
120
121
 
@@ -48,8 +48,7 @@ If you need help getting started, there are lots of ways to reach us.
48
48
  - Email support@csvpath.org
49
49
  - Or reach out to one of our [sponsors, below](#sponsors).
50
50
 
51
- ![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)
52
-
51
+ ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/csvpath?logoColor=yellow&color=yellow) ![GitHub commit activity](https://img.shields.io/github/commit-activity/m/dk107dk/csvpath) ![PyPI - Version](https://img.shields.io/pypi/v/csvpath) [![PyPI Downloads](https://static.pepy.tech/personalized-badge/csvpath?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/csvpath)
53
52
 
54
53
  # Contents
55
54
 
@@ -31,7 +31,7 @@ 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
@@ -91,7 +91,7 @@ port = SFTPPLUS_PORT
91
91
  admin_username = SFTPPLUS_ADMIN_USERNAME
92
92
  admin_password = SFTPPLUS_ADMIN_PASSWORD
93
93
  api_url = https://. . . :10020/json
94
- scripts_dir =
94
+ scripts_dir =
95
95
  execute_timeout = 300
96
96
 
97
97
  [ckan]
@@ -106,5 +106,5 @@ timeout = 5
106
106
  verify = False
107
107
 
108
108
  [slack]
109
- webhook_url =
109
+ webhook_url =
110
110
 
@@ -31,7 +31,7 @@ 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
@@ -91,7 +91,7 @@ port = SFTPPLUS_PORT
91
91
  admin_username = SFTPPLUS_ADMIN_USERNAME
92
92
  admin_password = SFTPPLUS_ADMIN_PASSWORD
93
93
  api_url = https://. . . :10020/json
94
- scripts_dir =
94
+ scripts_dir =
95
95
  execute_timeout = 300
96
96
 
97
97
  [ckan]
@@ -106,5 +106,5 @@ timeout = 5
106
106
  verify = False
107
107
 
108
108
  [slack]
109
- webhook_url =
109
+ webhook_url =
110
110
 
@@ -1163,6 +1163,13 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
1163
1163
  lines = []
1164
1164
  self.lines = ListLineSpooler(lines=lines)
1165
1165
  for _ in self.next():
1166
+ if _ is None:
1167
+ raise ValueError("Next line cannot be None")
1168
+ #
1169
+ # the line can be a non list if it is not CSV data
1170
+ #
1171
+ elif not isinstance(_, (list, tuple)):
1172
+ _ = [_]
1166
1173
  _ = _[:]
1167
1174
  self.lines.append(_)
1168
1175
  if nexts == -1:
@@ -1311,22 +1318,26 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
1311
1318
  raise FileException("There is no filename")
1312
1319
  #
1313
1320
  # DataFileReader is abstract. instantiating it results in a concrete subclass.
1314
- # pylint doesn't like that just because it doesn't see what we're doing.
1315
- # otoh, is this a bad way to do it? it works fine.
1321
+ # ideally we use it as a context mgr.
1316
1322
  #
1323
+ """
1317
1324
  reader = DataFileReader( # pylint: disable=E0110
1318
1325
  self.scanner.filename, delimiter=self.delimiter, quotechar=self.quotechar
1319
1326
  )
1320
- for line in reader.next():
1321
- self.track_line(line=line)
1322
- #
1323
- # some formats embed headers in each line. JSONL headers are the dict keys in
1324
- # each line that uses a dict
1325
- #
1326
- if reader.updates_headers:
1327
- _ = reader.current_headers
1328
- self.headers = self.headers if _ is None else _
1329
- yield line
1327
+ """
1328
+ with DataFileReader(
1329
+ self.scanner.filename, delimiter=self.delimiter, quotechar=self.quotechar
1330
+ ) as reader:
1331
+ for line in reader.next():
1332
+ self.track_line(line=line)
1333
+ #
1334
+ # some formats embed headers in each line. JSONL headers are the dict keys in
1335
+ # each line that uses a dict
1336
+ #
1337
+ if reader.updates_headers:
1338
+ _ = reader.current_headers
1339
+ self.headers = self.headers if _ is None else _
1340
+ yield line
1330
1341
  self.finalize()
1331
1342
 
1332
1343
  def finalize(self) -> None:
@@ -867,6 +867,7 @@ Cache: {cache}
867
867
  file=file,
868
868
  run_uuid=run_uuid,
869
869
  method="collect_paths",
870
+ template=template,
870
871
  extra_data=extra_data,
871
872
  )
872
873
  #
@@ -1038,6 +1039,7 @@ Cache: {cache}
1038
1039
  filename=filename,
1039
1040
  run_uuid=run_uuid,
1040
1041
  method="fast_forward_paths",
1042
+ template=template,
1041
1043
  extra_data=extra_data,
1042
1044
  )
1043
1045
  #
@@ -1157,6 +1159,7 @@ Cache: {cache}
1157
1159
  filename=filename,
1158
1160
  run_uuid=run_uuid,
1159
1161
  method="next_paths",
1162
+ template=template,
1160
1163
  extra_data=extra_data,
1161
1164
  )
1162
1165
  #
@@ -1652,6 +1655,7 @@ Cache: {cache}
1652
1655
  filename=filename,
1653
1656
  run_uuid=run_uuid,
1654
1657
  method="next_paths",
1658
+ template=template,
1655
1659
  extra_data=extra_data,
1656
1660
  )
1657
1661
  #
@@ -1,4 +1,5 @@
1
1
  import json
2
+ import traceback
2
3
  from typing import NewType
3
4
 
4
5
  from csvpath.util.nos import Nos
@@ -57,16 +58,21 @@ class NamedFileDescriber:
57
58
  home = self.file_manager.named_file_home(name)
58
59
  path = Nos(home).join(self.JSON_FILE)
59
60
  nos = Nos(path)
60
- if nos.exists() is False:
61
- #
62
- # cannot return None (today) and we definitely should not
63
- # create+save a new json file. returning None may be better
64
- # for today this works.
65
- #
66
- return {}
67
- # self.store_json(name, {})
68
- with DataFileReader(path) as file:
69
- return json.load(file.source)
61
+ if nos.exists() is True:
62
+ with DataFileReader(path) as file:
63
+ try:
64
+ return json.load(file.source)
65
+ except Exception:
66
+ msg = "Error getting named-file discriptor JSON for {name}: {ex}"
67
+ self.file_manager.csvpaths.logger.error(msg)
68
+ msg = traceback.format_exc()
69
+ self.file_manager.csvpaths.logger.debug(msg)
70
+ #
71
+ # cannot return None (today; << explain?) and we definitely should not
72
+ # create+save a new json file. (<< reasoning?) returning None may be
73
+ # better (<< why?) but for today this works.
74
+ #
75
+ return {}
70
76
 
71
77
  # ========== Templates ============
72
78
 
@@ -57,7 +57,6 @@ class FileManager:
57
57
 
58
58
  @property
59
59
  def csvpaths(self):
60
- """@private"""
61
60
  return self._csvpaths
62
61
 
63
62
  #
@@ -65,7 +64,6 @@ class FileManager:
65
64
  #
66
65
  @property
67
66
  def named_files_dir(self) -> str:
68
- """@private"""
69
67
  return self._csvpaths.config.inputs_files_path
70
68
 
71
69
  #
@@ -75,7 +73,6 @@ class FileManager:
75
73
  #
76
74
  @property
77
75
  def files_root_manifest(self) -> dict:
78
- """@private"""
79
76
  p = self.files_root_manifest_path
80
77
  nos = Nos(p)
81
78
  if nos.exists():
@@ -85,7 +82,6 @@ class FileManager:
85
82
 
86
83
  @property
87
84
  def files_root_manifest_path(self) -> dict:
88
- """@private"""
89
85
  return Nos(self.named_files_dir).join("manifest.json")
90
86
 
91
87
  def _named_file_ref_to_uuid(self, ref: ReferenceParser) -> str:
@@ -203,6 +199,31 @@ class FileManager:
203
199
  return _["reference"]
204
200
  return None
205
201
 
202
+ @property
203
+ def files_root_manifest_path(self) -> str:
204
+ """@private"""
205
+ r = self.csvpaths.config.get(section="inputs", name="files")
206
+ p = Nos(r).join("manifest.json")
207
+ nos = Nos(r)
208
+ if not nos.dir_exists():
209
+ nos.makedirs()
210
+ nos.path = p
211
+ if not nos.exists():
212
+ with DataFileWriter(path=p) as file:
213
+ file.write("[]")
214
+ return p
215
+
216
+ @property
217
+ def files_root_manifest(self) -> list:
218
+ """the Named-File Arrivals Manifest -- a single global ledger
219
+ tracking every named-file arrival across every name, distinct
220
+ from get_manifest()'s per-name manifest. mirrors PathsManager's
221
+ paths_root_manifest. used by FilesReferenceFinder3 to resolve
222
+ "*" root_major references (bare :manifest(), optionally with a
223
+ pointer to select one entry by ordinal)."""
224
+ with DataFileReader(self.files_root_manifest_path) as reader:
225
+ return json.load(reader.source)
226
+
206
227
  def get_manifest(self, name: NamedFileName) -> json:
207
228
  if name is None:
208
229
  raise ValueError("Paths name cannot be None")
@@ -523,6 +544,7 @@ class FileManager:
523
544
  recurse=True,
524
545
  regex: str = None,
525
546
  ) -> list[str]:
547
+ self.csvpaths.logger.info("Starting add_named_files_from_dir for: %s", dirname)
526
548
  ret = []
527
549
  #
528
550
  # legal_name check handled at add_named_file
@@ -546,6 +568,9 @@ class FileManager:
546
568
  if regex is not None:
547
569
  m = re.search(regex, p)
548
570
  if not m:
571
+ self.csvpaths.logger.info(
572
+ "Skipping file: %s doesn't match %s", p, regex
573
+ )
549
574
  continue
550
575
  #
551
576
  #
@@ -564,6 +589,7 @@ class FileManager:
564
589
  # this should be consistent across backends, if ever not, fix it there, not here.
565
590
  #
566
591
  ref = self.add_named_file(name=n, path=p, template=template)
592
+ self.csvpaths.logger.info("add_named_files_from_dir added: %s", ref)
567
593
  if ref is not None:
568
594
  ret.append(ref)
569
595
  else:
@@ -713,7 +739,6 @@ class FileManager:
713
739
  http = str(http).strip().lower() in ["on", "yes", "true"]
714
740
  local = config.get(section="inputs", name="allow_local_files", default=False)
715
741
  local = str(local).strip().lower() in ["on", "yes", "true"]
716
- nos = Nos(path)
717
742
  self.csvpaths.logger.info(
718
743
  "Adding named file %s: checking permission, if needed, to register local and http files",
719
744
  name,
@@ -723,6 +748,7 @@ class FileManager:
723
748
  # no. the project may be controlled by a context like FlightPath Server, where
724
749
  # the user cannot just override certain settings.
725
750
  #
751
+ nos = Nos(path)
726
752
  if nos.is_http and http is not True:
727
753
  _ = {
728
754
  "name": name,
@@ -784,12 +810,10 @@ class FileManager:
784
810
  #
785
811
  config = self.describer.get_config(name)
786
812
  servers = config.sources
813
+ self.csvpaths.logger.debug(
814
+ "Adding named file. Available server configs: %s", servers
815
+ )
787
816
  nos.server_config = servers
788
- #
789
- # for _ in servers:
790
- # if _.matches(nos.path):
791
- # nos.do._config = SftpConfig(_)
792
- #
793
817
  isfile = nos.is_http or nos.isfile()
794
818
  self.csvpaths.logger.debug(
795
819
  "Adding named file %s: path %s is a file? %s", name, path, isfile
@@ -813,6 +837,7 @@ class FileManager:
813
837
  # create folder tree in inputs/named_files/name/filename
814
838
  #
815
839
  home = self.assure_file_home(name, path, template)
840
+ self.csvpaths.logger.debug("File home is %s", home)
816
841
  file_home = home
817
842
  mark = None
818
843
  #
@@ -828,6 +853,7 @@ class FileManager:
828
853
  if pm > -1:
829
854
  mark = path[pm + 1 :]
830
855
  path = path[0:pm]
856
+ self.csvpaths.logger.debug("File path, mark: %s, %s", path, mark)
831
857
  #
832
858
  # we're registering with a mark, so we need to be Xlsx and have a tab with that name.
833
859
  #
@@ -944,7 +970,7 @@ class FileManager:
944
970
  mdata.template = data.get("template") or ""
945
971
  mdata.uuid_string = data.get("registration_uuid")
946
972
  mdata.status = "Registration failed"
947
- self.csvpaths.logger.warn(
973
+ self.csvpaths.logger.warning(
948
974
  "[%s] Registration failed for %s", mdata.named_file_name, data
949
975
  )
950
976
  lst.metadata_update(mdata)
@@ -980,6 +1006,9 @@ class FileManager:
980
1006
  copy = pathu.parts(path)[0] == pathu.parts(home)[0]
981
1007
  copy = copy and nos.is_local
982
1008
  if copy:
1009
+ self.csvpaths.logger.debug(
1010
+ "Above nos copy: path: %s, name: %s, temp: %s", path, name, temp
1011
+ )
983
1012
  nos.path = path
984
1013
  config = self.describer.get_config(name)
985
1014
  servers = config.sources
@@ -1016,6 +1045,7 @@ class FileManager:
1016
1045
  #
1017
1046
  nos = Nos(path)
1018
1047
  if nos.is_sftp:
1048
+ self.csvpaths.logger.debug("Doing copy_down with sftp path %s", path)
1019
1049
  reader = DataFileReader(path)
1020
1050
  #
1021
1051
  # adding config to the reader allows the reader to look to the config
@@ -1032,6 +1062,7 @@ class FileManager:
1032
1062
  with DataFileWriter(path=temp, mode=mode) as writer:
1033
1063
  writer.write(lines)
1034
1064
  else:
1065
+ self.csvpaths.logger.debug("Doing copy_down with non-sftp path %s", path)
1035
1066
  with DataFileReader(path) as reader:
1036
1067
  with DataFileWriter(path=temp, mode=mode) as writer:
1037
1068
  for line in reader.next_raw():
@@ -131,6 +131,10 @@ class FileRegistrar(Registrar, Listener):
131
131
  if mark is not None:
132
132
  mani["mark"] = mark
133
133
  mani["template"] = mdata.template or ""
134
+ mani["manifest_path"] = manifest_path
135
+ mani["file_name"] = mdata.file_name
136
+ mani["username"] = mdata.username
137
+ mani["hostname"] = mdata.hostname
134
138
  jdata = self.get_manifest(manifest_path)
135
139
  jdata.append(mani)
136
140
  self.intermediary.put_json(manifest_path, jdata)
@@ -60,4 +60,6 @@ class OpenTelemetryResultsListener(OtlpListener):
60
60
  cmeta["time_completed"] = mdata.time_completed_string
61
61
  if mdata.named_paths_uuid_string:
62
62
  cmeta["named_paths_uuid_string"] = mdata.named_paths_uuid_string
63
+ if mdata.named_paths_fingerprint:
64
+ cmeta["named_paths_fingerprint"] = mdata.named_paths_fingerprint
63
65
  return cmeta
@@ -128,7 +128,7 @@ class WebhookListener(Listener, threading.Thread):
128
128
  url=url, payload=payload, headers=headers, timeout=self.timeout
129
129
  )
130
130
  # x = requests.post(url, json=payload, headers=headers, timeout=self.timeout)
131
- if x and x.status_code != 200:
131
+ if x and x.status_code >= 200 and x.status_code < 300:
132
132
  if self.csvpaths is not None:
133
133
  self.csvpaths.logger.warning(
134
134
  "WebhookListener received status code %s from %s",
@@ -0,0 +1,78 @@
1
+ from typing import NewType
2
+
3
+
4
+ from csvpath.util.nos import Nos
5
+ from csvpath.util.file_writers import DataFileWriter
6
+ from csvpath.util.file_readers import DataFileReader
7
+ from csvpath.util.references.reference_parser import ReferenceParser
8
+
9
+ NamedPathsName = NewType("NamedPathsName", str)
10
+
11
+ #
12
+ # TODO: scripts should be handled as assets, not config. move here
13
+ # from the describer.
14
+ #
15
+
16
+
17
+ class PathsAssetManager:
18
+ ASSETS = "assets"
19
+
20
+ def __init__(self, paths_manager) -> None:
21
+ self.paths_manager = paths_manager
22
+
23
+ def _name_for_name(self, name: NamedPathsName) -> str:
24
+ if name.startswith("$"):
25
+ ref = ReferenceParser(name, csvpaths=self.paths_manager.csvpaths)
26
+ return ref.root_major
27
+ return name
28
+
29
+ def assets_dir_path(self, name: NamedPathsName) -> str:
30
+ name = self._name_for_name(name)
31
+ if not self.paths_manager.has_named_paths(name):
32
+ raise ValueError(f"No such named-paths group: {name}")
33
+ home = self.paths_manager.named_paths_home(name)
34
+ return Nos(home).join(self.ASSETS)
35
+
36
+ def assure_assets_dir(self, name: NamedPathsName) -> None:
37
+ p = self.assets_dir_path
38
+ nos = Nos(p)
39
+ if not nos.direxists():
40
+ Nos(p).makedirs()
41
+
42
+ def make_asset_file_path(self, name: NamedPathsName, filename: str) -> str:
43
+ path = self.assets_dir_path(name)
44
+ if not Nos(path).dir_exists():
45
+ Nos(path).makedirs()
46
+ path = Nos(path).join(filename)
47
+ return path
48
+
49
+ def store_asset_file(
50
+ self,
51
+ *,
52
+ name: NamedPathsName,
53
+ filename: str,
54
+ contents: str,
55
+ mode: str = "w",
56
+ overwrite: bool = True,
57
+ ) -> None:
58
+ path = self.make_asset_file_path(name, filename)
59
+ if overwrite is False and Nos(path).exists():
60
+ raise ValueError(f"Cannot overwrite {path}")
61
+ with DataFileWriter(path=path, mode=mode) as writer:
62
+ writer.write(contents)
63
+
64
+ def get_asset_file(self, name: NamedPathsName, filename: str) -> None:
65
+ path = self.make_asset_file_path(name, filename)
66
+ if not Nos(path).exists():
67
+ return None
68
+ with DataFileReader(path=path) as reader:
69
+ return reader.read()
70
+
71
+ def delete_asset_file(self, name: NamedPathsName, filename: str) -> None:
72
+ path = self.make_asset_file_path(name, filename)
73
+ if Nos(path).exists():
74
+ return Nos(path).remove()
75
+
76
+ def list_asset_files(self, name: NamedPathsName) -> None:
77
+ path = self.assets_dir_path(name)
78
+ return Nos(path).listdir(files_only=True)
@@ -13,6 +13,7 @@ from csvpath.util.nos import Nos
13
13
  from .paths_registrar import PathsRegistrar
14
14
  from .paths_metadata import PathsMetadata
15
15
  from .paths_describer import NamedPathsDescriber
16
+ from .paths_asset_manager import PathsAssetManager
16
17
  from csvpath.util.template_util import TemplateUtility as temu
17
18
  from csvpath.matching.util.expression_utility import ExpressionUtility as expu
18
19
 
@@ -51,6 +52,17 @@ class PathsManager:
51
52
  def describer(self) -> NamedPathsDescriber:
52
53
  return NamedPathsDescriber(self)
53
54
 
55
+ @property
56
+ def asset_manager(self) -> PathsAssetManager:
57
+ return PathsAssetManager(self)
58
+
59
+ @property
60
+ def registrar(self) -> PathsRegistrar:
61
+ """@private"""
62
+ if self._registrar is None:
63
+ self._registrar = PathsRegistrar(self.csvpaths)
64
+ return self._registrar
65
+
54
66
  @property
55
67
  def last_add_metadata(self) -> PathsMetadata:
56
68
  #
@@ -115,18 +127,9 @@ class PathsManager:
115
127
  # home = os.path.join(home, "manifest.json")
116
128
  return self.registrar.get_manifest(home)
117
129
 
118
- @property
119
- def registrar(self) -> PathsRegistrar:
120
- """@private"""
121
- if self._registrar is None:
122
- self._registrar = PathsRegistrar(self.csvpaths)
123
- return self._registrar
124
-
125
130
  def named_paths_home(self, name: NamedPathsName) -> str:
126
131
  """@private"""
127
132
  home = Nos(self.named_paths_dir).join(name)
128
- # home = os.path.join(self.named_paths_dir, name)
129
- # nos = self.nos
130
133
  nos = Nos(home)
131
134
  b = nos.dir_exists()
132
135
  if not b:
@@ -148,7 +151,6 @@ class PathsManager:
148
151
 
149
152
  path = self.named_paths_home(name)
150
153
  path = Nos(path).join("manifest.json")
151
- # nos = self.nos
152
154
  nos = Nos(path)
153
155
  if nos.exists():
154
156
  with DataFileReader(path) as reader:
@@ -156,6 +158,39 @@ class PathsManager:
156
158
  return m[len(m) - 1]["uuid"]
157
159
  raise ValueError(f"No manifest for path named {name}")
158
160
 
161
+ def get_fingerprint_for_name(self, name: NamedPathsName) -> str:
162
+ """@private -- the most recently registered version's own
163
+ content fingerprint for named-paths group `name` (the group's
164
+ own group.csvpaths text, not any run's copy of it) -- mirrors
165
+ get_named_paths_uuid's own name/reference resolution exactly,
166
+ just returning "fingerprint" instead of "uuid" off the same last
167
+ manifest entry. Used by ResultsRegistrar to record which
168
+ named-paths CONTENT drove a run (Results Run Manifest's own
169
+ named_paths_fingerprint field), distinct from named_paths_uuid,
170
+ which only records the group version's registration identity --
171
+ two groups loaded from identical group.csvpaths text under
172
+ different names get different uuids but identical fingerprints."""
173
+ if name is None:
174
+ raise ValueError("Paths name cannot be None")
175
+ if name.find("#") > -1:
176
+ name = name[0 : name.find("#")]
177
+ if name.startswith("$"):
178
+ ref = ReferenceParser(name, csvpaths=self.csvpaths)
179
+ if ref.datatype != ReferenceParser.CSVPATHS:
180
+ raise ValueError(
181
+ "Must be a reference of type {ReferenceParser.CSVPATHS}"
182
+ )
183
+ name = ref.root_major
184
+
185
+ path = self.named_paths_home(name)
186
+ path = Nos(path).join("manifest.json")
187
+ nos = Nos(path)
188
+ if nos.exists():
189
+ with DataFileReader(path) as reader:
190
+ m = json.load(reader.source)
191
+ return m[len(m) - 1]["fingerprint"]
192
+ raise ValueError(f"No manifest for path named {name}")
193
+
159
194
  @property
160
195
  def named_paths_dir(self) -> str:
161
196
  """@private"""
@@ -592,6 +627,10 @@ class PathsManager:
592
627
  ####################################################
593
628
 
594
629
  def store_json_paths_file(self, name: NamedPathsName, jsonpath: str) -> None:
630
+ #
631
+ # this method stores the definition.json file. it is not general purpose
632
+ # for any other json files
633
+ #
595
634
  if name is None:
596
635
  raise ValueError("Name cannot be None")
597
636
  if name.startswith("$"):
@@ -702,7 +741,7 @@ class PathsManager:
702
741
  return self.total_named_paths()
703
742
 
704
743
  #
705
- # ================== internals =====================
744
+ # ==============================
706
745
  #
707
746
 
708
747
  def _get_named_paths(self, name: NamedPathsName) -> list[Csvpath]:
@@ -764,9 +803,30 @@ class PathsManager:
764
803
  return temp
765
804
 
766
805
  def _group_file_path(self, name: NamedPathsName) -> str:
806
+ #
807
+ # TODO: note that in principle name could be a reference. should we allow
808
+ # that? We would just check for '$' and use ReferenceParser.
809
+ #
767
810
  temp = Nos(self.named_paths_home(name)).join("group.csvpaths")
768
811
  return temp
769
812
 
813
+ def group_file_path(self, name: NamedPathsName) -> str:
814
+ #
815
+ # supports references as well as names
816
+ #
817
+ if name is None:
818
+ raise ValueError("Name cannot be None")
819
+ name = str(name).strip()
820
+ if len(name) == 0:
821
+ raise ValueError("Name cannot be length 0")
822
+ if name[0] == "$":
823
+ name = ReferenceParser(name, csvpaths=self.csvpaths).root_major
824
+ #
825
+ # TODO: future state references v3 can return * or a function. that might
826
+ # not be supported (quite reasonably) but it would be a legal root_major.
827
+ #
828
+ return self._group_file_path(name)
829
+
770
830
  def _get_csvpaths_from_file(self, file_path: str) -> list[Csvpath]:
771
831
  if self.can_load(file_path) is not True:
772
832
  return []
@@ -148,6 +148,8 @@ class ResultRegistrar(Registrar, Listener):
148
148
  m["number_of_files_generated"] = mdata.number_of_files_generated
149
149
  m["valid"] = mdata.valid if mdata.valid is not None else ""
150
150
  m["completed"] = mdata.completed
151
+ m["error_count"] = mdata.error_count
152
+ m["method"] = mdata.method
151
153
  m["source_mode_preceding"] = mdata.source_mode_preceding
152
154
  if mdata.source_mode_preceding:
153
155
  m["preceding_instance_identity"] = mdata.preceding_instance_identity