csvpath 0.0.579__tar.gz → 0.0.581__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 (376) hide show
  1. {csvpath-0.0.579 → csvpath-0.0.581}/PKG-INFO +3 -1
  2. csvpath-0.0.581/assets/config/extra-functions.imports +2 -0
  3. {csvpath-0.0.579 → csvpath-0.0.581}/assets/config/jenkins-local-s3.ini +3 -3
  4. {csvpath-0.0.579 → csvpath-0.0.581}/config/config.ini +4 -6
  5. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/cli/const.py +2 -0
  6. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/cli/function_describer.py +100 -28
  7. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/csvpath.py +74 -9
  8. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/csvpaths.py +5 -3
  9. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/errors/error_manager.py +3 -3
  10. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/files/file_manager.py +10 -7
  11. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/files/file_metadata.py +7 -2
  12. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/files/file_registrar.py +1 -1
  13. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/files/files_listener.py +1 -1
  14. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/paths/paths_manager.py +28 -10
  15. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/paths/paths_registrar.py +4 -2
  16. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/results/result.py +1 -2
  17. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/boolean/all.py +0 -3
  18. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/boolean/andf.py +1 -3
  19. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/boolean/any.py +0 -1
  20. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/boolean/between.py +0 -2
  21. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/boolean/empty.py +0 -1
  22. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/boolean/exists.py +0 -1
  23. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/boolean/inf.py +0 -1
  24. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/boolean/no.py +0 -1
  25. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/boolean/notf.py +0 -1
  26. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/boolean/orf.py +0 -1
  27. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/boolean/yes.py +0 -1
  28. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/counting/count.py +0 -1
  29. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/counting/count_bytes.py +0 -1
  30. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/counting/count_headers.py +0 -2
  31. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/counting/count_lines.py +0 -2
  32. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/counting/count_scans.py +0 -1
  33. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/counting/has_matches.py +0 -1
  34. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/counting/increment.py +0 -1
  35. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/counting/tally.py +0 -1
  36. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/dates/now.py +0 -2
  37. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/dates/part.py +0 -2
  38. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/dates/roll.py +0 -1
  39. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/function.py +12 -1
  40. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/function_factory.py +46 -9
  41. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/function_finder.py +2 -11
  42. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/append.py +0 -1
  43. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/collect.py +0 -1
  44. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/empty_stack.py +0 -2
  45. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/end.py +0 -1
  46. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -1
  47. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/headers.py +0 -1
  48. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/headers_stack.py +0 -1
  49. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/insert.py +0 -1
  50. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/line_before.py +0 -1
  51. csvpath-0.0.581/csvpath/matching/functions/headers/remove.py +71 -0
  52. csvpath-0.0.581/csvpath/matching/functions/json/jsonpath.py +54 -0
  53. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/lines/advance.py +0 -2
  54. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/lines/after_blank.py +0 -1
  55. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/lines/dups.py +0 -4
  56. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/lines/first.py +0 -1
  57. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/lines/first_line.py +0 -3
  58. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/lines/last.py +8 -5
  59. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/lines/stop.py +0 -4
  60. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/math/above.py +0 -5
  61. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/math/add.py +0 -1
  62. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/math/divide.py +0 -1
  63. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/math/equals.py +0 -1
  64. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/math/intf.py +0 -1
  65. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/math/mod.py +0 -1
  66. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/math/multiply.py +0 -1
  67. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/math/odd.py +0 -1
  68. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/math/round.py +0 -1
  69. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/math/subtotal.py +0 -2
  70. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/misc/fingerprint.py +0 -3
  71. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/misc/importf.py +0 -1
  72. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/misc/random.py +0 -2
  73. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/print/jinjaf.py +0 -1
  74. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/print/print_line.py +4 -2
  75. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/print/print_queue.py +0 -1
  76. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/print/table.py +0 -4
  77. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/stats/minf.py +0 -1
  78. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/stats/nminmax.py +0 -2
  79. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/stats/percent.py +0 -1
  80. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/stats/percent_unique.py +0 -1
  81. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/stats/stdev.py +0 -2
  82. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/strings/alter.py +0 -1
  83. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/strings/caps.py +0 -1
  84. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/strings/concat.py +0 -1
  85. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/strings/contains.py +0 -1
  86. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/strings/format.py +0 -1
  87. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/strings/length.py +0 -1
  88. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/strings/lower.py +0 -1
  89. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/strings/metaphone.py +0 -1
  90. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/strings/starts_with.py +0 -2
  91. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/testing/debug.py +0 -5
  92. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/types/__init__.py +3 -1
  93. csvpath-0.0.581/csvpath/matching/functions/types/blank.py +113 -0
  94. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/types/boolean.py +30 -20
  95. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/types/datatype.py +1 -5
  96. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/types/datef.py +12 -3
  97. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/types/decimal.py +7 -4
  98. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/types/email.py +2 -1
  99. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/types/nonef.py +23 -37
  100. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/types/string.py +2 -0
  101. csvpath-0.0.581/csvpath/matching/functions/types/type.py +32 -0
  102. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/types/url.py +2 -1
  103. csvpath-0.0.581/csvpath/matching/functions/types/wildcard.py +59 -0
  104. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/validity/line.py +36 -9
  105. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/variables/clear.py +0 -1
  106. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/variables/get.py +0 -1
  107. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/variables/index_of.py +0 -1
  108. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/variables/pushpop.py +0 -5
  109. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/variables/put.py +2 -3
  110. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/variables/track.py +0 -1
  111. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/variables/variables.py +0 -1
  112. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/xml/xpath.py +0 -1
  113. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/matcher.py +10 -5
  114. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/productions/qualified.py +26 -4
  115. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/class_loader.py +1 -1
  116. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/config.py +2 -1
  117. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/line_spooler.py +85 -42
  118. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/log_utility.py +19 -10
  119. {csvpath-0.0.579 → csvpath-0.0.581}/pyproject.toml +3 -1
  120. csvpath-0.0.579/csvpath/matching/functions/types/type.py +0 -10
  121. {csvpath-0.0.579 → csvpath-0.0.581}/LICENSE +0 -0
  122. {csvpath-0.0.579 → csvpath-0.0.581}/README.md +0 -0
  123. {csvpath-0.0.579 → csvpath-0.0.581}/assets/config/config.ini +0 -0
  124. {csvpath-0.0.579 → csvpath-0.0.581}/assets/config/function.imports +0 -0
  125. {csvpath-0.0.579 → csvpath-0.0.581}/assets/config/jenkins-local-azure.ini +0 -0
  126. {csvpath-0.0.579 → csvpath-0.0.581}/assets/config/jenkins-local-filesystem-mysql.ini +0 -0
  127. {csvpath-0.0.579 → csvpath-0.0.581}/assets/config/jenkins-local-gcs.ini +0 -0
  128. {csvpath-0.0.579 → csvpath-0.0.581}/assets/config/jenkins-local-sftp.ini +0 -0
  129. {csvpath-0.0.579 → csvpath-0.0.581}/assets/config/jenkins-windows-azure.ini +0 -0
  130. {csvpath-0.0.579 → csvpath-0.0.581}/assets/config/jenkins-windows-gcs.ini +0 -0
  131. {csvpath-0.0.579 → csvpath-0.0.581}/assets/config/jenkins-windows-local.ini +0 -0
  132. {csvpath-0.0.579 → csvpath-0.0.581}/assets/config/jenkins-windows-s3.ini +0 -0
  133. {csvpath-0.0.579 → csvpath-0.0.581}/assets/config/jenkins-windows-sftp.ini +0 -0
  134. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
  135. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/mac/azure.sh +0 -0
  136. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/mac/gcs-pipeline.gopipeline.json +0 -0
  137. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/mac/gcs.sh +0 -0
  138. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
  139. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/mac/local.sh +0 -0
  140. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
  141. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/mac/s3.sh +0 -0
  142. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
  143. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/mac/sftp.sh +0 -0
  144. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/windows/azure.bat +0 -0
  145. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/windows/gcs.bat +0 -0
  146. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/windows/local.bat +0 -0
  147. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/windows/s3.bat +0 -0
  148. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/windows/sftp.bat +0 -0
  149. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
  150. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
  151. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
  152. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
  153. {csvpath-0.0.579 → csvpath-0.0.581}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
  154. {csvpath-0.0.579 → csvpath-0.0.581}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
  155. {csvpath-0.0.579 → csvpath-0.0.581}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
  156. {csvpath-0.0.579 → csvpath-0.0.581}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
  157. {csvpath-0.0.579 → csvpath-0.0.581}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
  158. {csvpath-0.0.579 → csvpath-0.0.581}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
  159. {csvpath-0.0.579 → csvpath-0.0.581}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
  160. {csvpath-0.0.579 → csvpath-0.0.581}/assets/integrations/sqlite/csvpath +0 -0
  161. {csvpath-0.0.579 → csvpath-0.0.581}/assets/integrations/sqlite/schema.sql +0 -0
  162. {csvpath-0.0.579 → csvpath-0.0.581}/config/env.json +0 -0
  163. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/__init__.py +0 -0
  164. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/cli/__init__.py +0 -0
  165. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/cli/asker.py +0 -0
  166. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/cli/cli.py +0 -0
  167. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/cli/debug_config.py +0 -0
  168. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/cli/drill_down.py +0 -0
  169. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/cli/function_lister.py +0 -0
  170. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/cli/selecter.py +0 -0
  171. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/__init__.py +0 -0
  172. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/errors/error.py +0 -0
  173. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/errors/error_collector.py +0 -0
  174. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/errors/error_comms.py +0 -0
  175. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/files/lines_and_headers_cacher.py +0 -0
  176. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ckan/ckan.py +0 -0
  177. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
  178. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ckan/datafile.py +0 -0
  179. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ckan/dataset.py +0 -0
  180. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ol/event.py +0 -0
  181. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ol/event_result.py +0 -0
  182. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
  183. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ol/job.py +0 -0
  184. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
  185. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
  186. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
  187. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
  188. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ol/run.py +0 -0
  189. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
  190. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ol/run_state.py +0 -0
  191. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/ol/sender.py +0 -0
  192. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
  193. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/otlp/metrics.py +0 -0
  194. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
  195. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
  196. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
  197. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
  198. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
  199. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
  200. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/scripts/scripts_results_listener.py +0 -0
  201. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
  202. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
  203. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sftpplus/rpc.py +0 -0
  204. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
  205. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
  206. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
  207. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/slack/event.py +0 -0
  208. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/slack/sender.py +0 -0
  209. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sql/engine.py +0 -0
  210. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
  211. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
  212. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sql/sql_paths_listener.py +0 -0
  213. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
  214. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
  215. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sql/tables.py +0 -0
  216. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sql/updates.py +0 -0
  217. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
  218. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
  219. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
  220. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/webhook/webhook_listener.py +0 -0
  221. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/integrations/webhook/webhook_results_listener.py +0 -0
  222. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/listener.py +0 -0
  223. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/metadata.py +0 -0
  224. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/paths/paths_listener.py +0 -0
  225. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/paths/paths_metadata.py +0 -0
  226. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/registrar.py +0 -0
  227. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
  228. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
  229. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
  230. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
  231. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/results/readers/readers.py +0 -0
  232. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/results/result_file_reader.py +0 -0
  233. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/results/result_metadata.py +0 -0
  234. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/results/result_registrar.py +0 -0
  235. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/results/result_serializer.py +0 -0
  236. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/results/results_manager.py +0 -0
  237. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/results/results_metadata.py +0 -0
  238. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/results/results_registrar.py +0 -0
  239. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/run/run_listener_stdout.py +0 -0
  240. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/run/run_metadata.py +0 -0
  241. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/run/run_registrar.py +0 -0
  242. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/managers/test_listener.py +0 -0
  243. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/__init__.py +0 -0
  244. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/__init__.py +0 -0
  245. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/args.py +0 -0
  246. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/args_helper.py +0 -0
  247. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/counting/counter.py +0 -0
  248. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/counting/every.py +0 -0
  249. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/counting/total_lines.py +0 -0
  250. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/function_focus.py +0 -0
  251. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/header_name.py +0 -0
  252. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/mismatch.py +0 -0
  253. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/rename.py +0 -0
  254. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/replace.py +0 -0
  255. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/headers/reset_headers.py +0 -0
  256. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/math/subtract.py +0 -0
  257. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/math/sum.py +0 -0
  258. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/print/printf.py +0 -0
  259. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/strings/regex.py +0 -0
  260. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/strings/strip.py +0 -0
  261. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/strings/substring.py +0 -0
  262. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/strings/upper.py +0 -0
  263. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/validity/fail.py +0 -0
  264. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/functions/validity/failed.py +0 -0
  265. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/lark_parser.py +0 -0
  266. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/lark_transformer.py +0 -0
  267. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/productions/__init__.py +0 -0
  268. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/productions/equality.py +0 -0
  269. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/productions/expression.py +0 -0
  270. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/productions/header.py +0 -0
  271. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/productions/matchable.py +0 -0
  272. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/productions/reference.py +0 -0
  273. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/productions/term.py +0 -0
  274. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/productions/variable.py +0 -0
  275. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/util/exceptions.py +0 -0
  276. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/util/expression_encoder.py +0 -0
  277. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/util/expression_utility.py +0 -0
  278. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/util/lark_print_parser.py +0 -0
  279. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/util/print_parser.py +0 -0
  280. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/matching/util/runtime_data_collector.py +0 -0
  281. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/modes/error_mode.py +0 -0
  282. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/modes/explain_mode.py +0 -0
  283. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/modes/files_mode.py +0 -0
  284. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/modes/logic_mode.py +0 -0
  285. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/modes/mode_controller.py +0 -0
  286. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/modes/print_mode.py +0 -0
  287. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/modes/return_mode.py +0 -0
  288. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/modes/run_mode.py +0 -0
  289. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/modes/source_mode.py +0 -0
  290. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/modes/transfer_mode.py +0 -0
  291. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/modes/unmatched_mode.py +0 -0
  292. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/modes/validation_mode.py +0 -0
  293. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/scanning/__init__.py +0 -0
  294. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/scanning/scanner2.py +0 -0
  295. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/scanning/scanner2_parser.py +0 -0
  296. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/scanning/scanner2_transformer.py +0 -0
  297. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/azure/azure_data_reader.py +0 -0
  298. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/azure/azure_data_writer.py +0 -0
  299. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/azure/azure_fingerprinter.py +0 -0
  300. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/azure/azure_json_data_reader.py +0 -0
  301. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/azure/azure_nos.py +0 -0
  302. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/azure/azure_utils.py +0 -0
  303. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
  304. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/backend_check.py +0 -0
  305. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/box.py +0 -0
  306. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/cache.py +0 -0
  307. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/caser.py +0 -0
  308. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/code.py +0 -0
  309. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/config_env.py +0 -0
  310. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/config_exception.py +0 -0
  311. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/date_util.py +0 -0
  312. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/exceptions.py +0 -0
  313. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/file_info.py +0 -0
  314. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/file_readers.py +0 -0
  315. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/file_writers.py +0 -0
  316. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/gcs/gcs_data_reader.py +0 -0
  317. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/gcs/gcs_data_writer.py +0 -0
  318. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
  319. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/gcs/gcs_json_data_reader.py +0 -0
  320. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/gcs/gcs_nos.py +0 -0
  321. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/gcs/gcs_utils.py +0 -0
  322. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
  323. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/hasher.py +0 -0
  324. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/http/http_data_reader.py +0 -0
  325. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/intermediary.py +0 -0
  326. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/json/json_data_reader.py +0 -0
  327. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/json/json_reader_helper.py +0 -0
  328. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/last_line_stats.py +0 -0
  329. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/line_counter.py +0 -0
  330. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/line_monitor.py +0 -0
  331. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/metadata_parser.py +0 -0
  332. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/nos.py +0 -0
  333. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/pandas_data_reader.py +0 -0
  334. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/path_util.py +0 -0
  335. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/printer.py +0 -0
  336. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/py_file_utility.py +0 -0
  337. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/files_reference_finder_2.py +0 -0
  338. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
  339. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/files_tools/range_finder.py +0 -0
  340. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/ref_utils.py +0 -0
  341. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/reference_exceptions.py +0 -0
  342. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/reference_grammar.py +0 -0
  343. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
  344. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/reference_parser.py +0 -0
  345. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/reference_results.py +0 -0
  346. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/reference_transformer.py +0 -0
  347. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/results_reference_finder_2.py +0 -0
  348. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/results_tools/data_finder.py +0 -0
  349. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/results_tools/date_filter.py +0 -0
  350. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/results_tools/identity_finder.py +0 -0
  351. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/results_tools/path_filter.py +0 -0
  352. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
  353. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/results_tools/token_filters.py +0 -0
  354. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
  355. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/references/tools/date_completer.py +0 -0
  356. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/run_home_maker.py +0 -0
  357. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/s3/s3_data_reader.py +0 -0
  358. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/s3/s3_data_writer.py +0 -0
  359. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/s3/s3_fingerprinter.py +0 -0
  360. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/s3/s3_json_data_reader.py +0 -0
  361. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/s3/s3_nos.py +0 -0
  362. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/s3/s3_utils.py +0 -0
  363. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
  364. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/sftp/sftp_config.py +0 -0
  365. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/sftp/sftp_data_reader.py +0 -0
  366. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/sftp/sftp_data_writer.py +0 -0
  367. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
  368. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/sftp/sftp_json_data_reader.py +0 -0
  369. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/sftp/sftp_nos.py +0 -0
  370. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/sftp/sftp_walk.py +0 -0
  371. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
  372. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/sqliter.py +0 -0
  373. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/template_util.py +0 -0
  374. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/var_utility.py +0 -0
  375. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/xlsx/xlsx_data_reader.py +0 -0
  376. {csvpath-0.0.579 → csvpath-0.0.581}/csvpath/util/xlsx/xlsx_reader_helper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: csvpath
3
- Version: 0.0.579
3
+ Version: 0.0.581
4
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
5
  Author: David Kershaw
6
6
  Author-email: info@csvpath.org
@@ -29,6 +29,7 @@ Requires-Dist: google-cloud-storage (>=3.1.0,<4.0.0)
29
29
  Requires-Dist: inflect (>=7.4.0,<8.0.0)
30
30
  Requires-Dist: jinja2 (>=3.1.6,<4.0.0)
31
31
  Requires-Dist: jsonlines (>=4.0.0,<5.0.0)
32
+ Requires-Dist: jsonpath-ng (>=1.7.0,<2.0.0)
32
33
  Requires-Dist: lark (>=1.2.2,<2.0.0)
33
34
  Requires-Dist: lxml (>=6.0.2,<7.0.0)
34
35
  Requires-Dist: marquez-python (>=0.50.0,<0.51.0)
@@ -41,6 +42,7 @@ Requires-Dist: paramiko (>=3.5.0,<4.0.0)
41
42
  Requires-Dist: pdoc (>=15.0.1,<16.0.0)
42
43
  Requires-Dist: prompt-toolkit (>=3.0.50,<4.0.0)
43
44
  Requires-Dist: psycopg2-binary (>=2.9.10,<3.0.0)
45
+ Requires-Dist: pyjson5 (>=2.0.0,<3.0.0)
44
46
  Requires-Dist: pylightxl (>=1.61,<2.0)
45
47
  Requires-Dist: pytest (>=8.3.3,<9.0.0)
46
48
  Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
@@ -0,0 +1,2 @@
1
+ from t1.one.yes import Yes as A
2
+
@@ -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
@@ -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
 
@@ -4,9 +4,8 @@ gcs.skip = yes
4
4
  s3.skip = yes
5
5
  sftp.skip = yes
6
6
 
7
-
8
7
  [extensions]
9
- csvpath_files] = txt, csvpath, csvpaths
8
+ csvpath_files = txt, csvpath, csvpaths
10
9
  csv_files = csv, tsv, dat, tab, psv, ssv
11
10
 
12
11
  [errors]
@@ -33,7 +32,7 @@ path = cache
33
32
  use_cache = yes
34
33
 
35
34
  [functions]
36
- imports = assets/config/extra-functions.imports
35
+ imports =
37
36
 
38
37
  [results]
39
38
  archive = tmp/local/archive
@@ -103,7 +102,7 @@ port = SFTPPLUS_PORT
103
102
  admin_username = SFTPPLUS_ADMIN_USERNAME
104
103
  admin_password = SFTPPLUS_ADMIN_PASSWORD
105
104
  api_url = https://. . . :10020/json
106
- scripts_dir =
105
+ scripts_dir =
107
106
  execute_timeout = 300
108
107
 
109
108
  [ckan]
@@ -118,10 +117,9 @@ timeout = 5
118
117
  verify = False
119
118
 
120
119
  [slack]
121
- webhook_url =
120
+ webhook_url =
122
121
 
123
122
  [scripts]
124
123
  run_scripts = yes
125
124
  shell = /bin/bash
126
125
 
127
-
@@ -14,6 +14,8 @@ For help see https://www.csvpath.org
14
14
  """
15
15
 
16
16
  ITALIC = "\033[3m"
17
+ BOLD = "\033[1m"
18
+ UNBOLD = "\033[22m"
17
19
  SIDEBAR_COLOR = "\033[36m"
18
20
  REVERT = "\033[0m"
19
21
  STOP_HERE = f"{SIDEBAR_COLOR}{ITALIC}... done picking dir{REVERT}"
@@ -8,8 +8,18 @@ from .const import Const
8
8
 
9
9
 
10
10
  class FunctionDescriber:
11
+
12
+ CONST = Const
13
+
14
+ @classmethod
15
+ def const(cls):
16
+ return FunctionDescriber.CONST
17
+
11
18
  @classmethod
12
- def describe(cls, function: Function) -> None:
19
+ def describe(
20
+ cls, function: Function, *, markdown=False, const=None, links: dict = None
21
+ ) -> None:
22
+ print("")
13
23
  if not function.args:
14
24
  #
15
25
  # today this will most of the time blow up because we're
@@ -21,16 +31,25 @@ class FunctionDescriber:
21
31
  function.check_valid()
22
32
  except Exception:
23
33
  ...
34
+ if markdown is True:
35
+ print(f"## {function.name}()\n")
36
+ else:
37
+ print(f"{cls.const().BOLD}{function.name}(){cls.const().REVERT}\n")
24
38
  if function.description and len(function.description) > 0:
25
39
  for i, _ in enumerate(function.description):
26
40
  print(_)
27
- print()
28
- cls.print_tables(function)
41
+ print("")
42
+ cls.print_tables(function, markdown=markdown, links=links)
43
+ print("")
44
+ print(
45
+ "[[Back to index](https://github.com/csvpath/csvpath/blob/main/docs/func_gen/index.md)]"
46
+ )
29
47
 
30
48
  @classmethod
31
- def sigs(cls, function):
49
+ def sigs(cls, function, *, markdown=False, links: dict = None):
32
50
  sigs = []
33
51
  args = function.args
52
+ PIPE = " ǁ " if markdown else "|"
34
53
  if not args:
35
54
  #
36
55
  # this is possibly due to the very small number of unrefactored functions. (3?)
@@ -45,11 +64,17 @@ class FunctionDescriber:
45
64
  t += f"{_.name}: "
46
65
  for j, act in enumerate(_.actuals):
47
66
  an = cls._actual_name(act)
67
+ #
68
+ # add link if exact match and we have links
69
+ #
70
+ if markdown and links and an in links:
71
+ an = f"$${{\\color{{green}}{an}}}$$"
72
+
48
73
  if an == "":
49
74
  an = "''"
50
- t += f"{Const.SIDEBAR_COLOR}{Const.ITALIC}{an}{Const.REVERT}"
75
+ t += f"{cls.const().SIDEBAR_COLOR}{cls.const().ITALIC}{an}{cls.const().REVERT}"
51
76
  if j < len(_.actuals) - 1:
52
- t += "|"
77
+ t += PIPE
53
78
  if _.is_noneable:
54
79
  pa += f"[{t}]"
55
80
  else:
@@ -65,9 +90,12 @@ class FunctionDescriber:
65
90
  return sigs
66
91
 
67
92
  @classmethod
68
- def funcs(cls, function):
93
+ def funcs(cls, function, *, markdown=False, links=None):
69
94
  sigs = []
70
95
  args = function.args
96
+ PIPE = " ǁ " if markdown else "|"
97
+ if not args or not args.argsets or len(args.argsets) == 0:
98
+ return sigs
71
99
  argsets = args.argsets
72
100
  for ai, a in enumerate(argsets):
73
101
  pa = ""
@@ -79,9 +107,12 @@ class FunctionDescriber:
79
107
  an = cls._actual_name(act)
80
108
  if an == "":
81
109
  an = "''"
82
- t += f"{Const.SIDEBAR_COLOR}{Const.ITALIC}{an}{Const.REVERT}"
110
+ if markdown and links and an in links:
111
+ an = f"[{an}]({links[an]})"
112
+
113
+ t += f"{cls.const().SIDEBAR_COLOR}{cls.const().ITALIC}{an}{cls.const().REVERT}"
83
114
  if j < len(_.types) - 1:
84
- t += "|"
115
+ t += PIPE
85
116
  if _.is_noneable:
86
117
  pa += f"[{t}]"
87
118
  else:
@@ -97,7 +128,7 @@ class FunctionDescriber:
97
128
  return sigs
98
129
 
99
130
  @classmethod
100
- def focus_stmt(cls, function):
131
+ def focus_stmt(cls, function, *, markdown=False, links=None):
101
132
  stmts = []
102
133
  vp = isinstance(function, ValueProducer)
103
134
  md = isinstance(function, MatchDecider)
@@ -114,7 +145,7 @@ class FunctionDescriber:
114
145
  return stmts
115
146
 
116
147
  @classmethod
117
- def type_stmt(cls, function):
148
+ def type_stmt(cls, function, *, markdown=False, links: dict = None):
118
149
  stmts = []
119
150
  if isinstance(function, Type):
120
151
  t = f"{function.name[0].upper()}{function.name[1:]}"
@@ -122,77 +153,118 @@ class FunctionDescriber:
122
153
  return stmts
123
154
 
124
155
  @classmethod
125
- def aliases_stmt(cls, function):
156
+ def aliases_stmt(cls, function, *, markdown=False, links=None):
126
157
  stmts = []
127
158
  if len(function.aliases) > 0:
128
159
  stmts.append(", ".join(function.aliases))
129
160
  return stmts
130
161
 
131
162
  @classmethod
132
- def print_tables(cls, function):
163
+ def print_tables(cls, function, *, markdown=False, links: dict = None):
133
164
  #
134
165
  # data sigs
135
166
  #
136
167
  headers = ["Data signatures"]
137
168
  rows = []
138
- sigs = cls.sigs(function)
169
+ sigs = cls.sigs(function, markdown=markdown, links=links)
139
170
  for v in sigs:
140
171
  v = str(v)
141
172
  rows.append([v])
142
173
  if len(rows) > 0:
143
- print(tabulate(rows, headers=headers, tablefmt="simple_grid"))
174
+ print(
175
+ tabulate(
176
+ rows,
177
+ headers=headers,
178
+ tablefmt="pipe" if markdown else "simple_grid",
179
+ )
180
+ )
181
+ print("")
144
182
  #
145
183
  # call sigs
146
184
  #
147
185
  headers = ["Call signatures"]
148
186
  rows = []
149
- sigs = cls.funcs(function)
187
+ sigs = cls.funcs(function, markdown=markdown, links=links)
150
188
  for v in sigs:
151
189
  v = str(v)
152
190
  rows.append([v])
153
191
  if len(rows) > 0:
154
- print(tabulate(rows, headers=headers, tablefmt="simple_grid"))
192
+ print(
193
+ tabulate(
194
+ rows,
195
+ headers=headers,
196
+ tablefmt="pipe" if markdown else "simple_grid",
197
+ )
198
+ )
199
+ print("")
155
200
  #
156
201
  # type and focus
157
202
  #
158
203
  rows = []
159
- headers = []
160
- stmts = cls.focus_stmt(function)
204
+ headers = ["Purpose", "Value"]
205
+ stmts = cls.focus_stmt(function, links=links)
161
206
  for v in stmts:
162
207
  v = str(v)
163
- rows.append(["Focus", v])
164
- stmts = cls.type_stmt(function)
208
+ rows.append(["Main focus", v])
209
+ stmts = cls.type_stmt(function, links=links)
165
210
  for v in stmts:
166
211
  v = str(v)
167
212
  rows.append(["Type", v])
168
- stmts = cls.aliases_stmt(function)
213
+ stmts = cls.aliases_stmt(function, links=links)
169
214
  for v in stmts:
170
215
  v = str(v)
171
216
  rows.append(["Aliases", v])
172
217
  if len(rows) > 0:
173
- print(tabulate(rows, headers=headers, tablefmt="simple_grid"))
218
+ print(
219
+ tabulate(
220
+ rows,
221
+ headers=headers,
222
+ tablefmt="pipe" if markdown else "simple_grid",
223
+ )
224
+ )
225
+ print("")
174
226
  #
175
227
  # qualifiers
176
228
  #
177
229
  rows = []
178
- headers = []
230
+ headers = ["Context", "Qualifier"]
179
231
  stmts = function.match_qualifiers
180
- stmts = [f"{Const.SIDEBAR_COLOR}{Const.ITALIC}{s}{Const.REVERT}" for s in stmts]
232
+ stmts = [
233
+ f"{cls.const().SIDEBAR_COLOR}{cls.const().ITALIC}{s}{cls.const().REVERT}"
234
+ for s in stmts
235
+ ]
181
236
  if len(stmts) > 0:
237
+ for i, s in enumerate(stmts):
238
+ if markdown and links and s in links:
239
+ stmts[i] = f"[{s}]({links[s]})"
240
+
182
241
  rows.append(["Match qualifiers", ", ".join(stmts)])
183
242
  stmts = function.value_qualifiers
184
- stmts = [f"{Const.SIDEBAR_COLOR}{Const.ITALIC}{s}{Const.REVERT}" for s in stmts]
243
+ stmts = [
244
+ f"{cls.const().SIDEBAR_COLOR}{cls.const().ITALIC}{s}{cls.const().REVERT}"
245
+ for s in stmts
246
+ ]
185
247
  if len(stmts) > 0:
248
+ for i, s in enumerate(stmts):
249
+ if markdown and links and s in links:
250
+ stmts[i] = f"[{s}]({links[s]})"
186
251
  rows.append(["Value qualifiers", ", ".join(stmts)])
187
252
  if function.name_qualifier:
188
253
  rows.append(
189
254
  [
190
255
  "Name qualifier",
191
- f"{Const.SIDEBAR_COLOR}{Const.ITALIC}optionally expected{Const.REVERT}",
256
+ f"{cls.const().SIDEBAR_COLOR}{cls.const().ITALIC}optionally expected{cls.const().REVERT}",
192
257
  ]
193
258
  )
194
259
  if len(rows) > 0:
195
- print(tabulate(rows, headers=headers, tablefmt="simple_grid"))
260
+ print(
261
+ tabulate(
262
+ rows,
263
+ headers=headers,
264
+ tablefmt="pipe" if markdown else "simple_grid",
265
+ )
266
+ )
267
+ print("")
196
268
 
197
269
  @classmethod
198
270
  def _actual_name(cls, a) -> str:
@@ -54,11 +54,14 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
54
54
  print_default=True,
55
55
  # config=None,
56
56
  error_manager=None,
57
+ project_context="no_project_context",
58
+ project="no_project_name",
57
59
  ):
58
- # re: R0913: all reasonable pass-ins with sensible defaults
59
60
  #
60
- # the config.ini file loaded as a ConfigParser instance
61
+ # these identifiers are for the logging system. they are optional but useful
61
62
  #
63
+ self.project = project
64
+ self.project_context = project_context
62
65
  """
63
66
  #
64
67
  # passing in the config actually nets us nothing but a little unnecessary complexity that we don't use.
@@ -205,7 +208,7 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
205
208
  # line, a.k.a columns) then are available. limiting headers returned
206
209
  # can impact named results, reset_headers(), and other considerations.
207
210
  #
208
- self._limit_collection_to = []
211
+ self._limit_collection_to = None # []
209
212
  #
210
213
  # error collecting is at the CsvPath instance by default. CsvPath
211
214
  # instances that are managed by a CsvPaths have their errors collected
@@ -705,6 +708,42 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
705
708
  # - files-mode: all | no-data | no-unmatched | no-printouts | data | unmatched | errors | meta | vars | printouts
706
709
  #
707
710
  self.modes.update()
711
+ #
712
+ # if we find "use-delimiter" or "use-quotechar" we need to update ourselves. this is primarily for
713
+ # flightpath server (and other similar non-programmatic uses). these could be modes but it doesn't
714
+ # feel like we're changing the behavior of the framework so much as just passing a parameter
715
+ # declaratively, similar to the integrations and "test-delimiter", "test-quotechar".
716
+ #
717
+ d = self.metadata.get("use-delimiter")
718
+ if d:
719
+ v = ["pipe", "bar", "semi", "comma", "colon", "tab", "space"]
720
+ if d not in v:
721
+ raise ValueError(f"The use-delimiter directive must be one of {v}")
722
+ v = {
723
+ "pipe": "|",
724
+ "bar": "|",
725
+ "semi": ";",
726
+ "comma": ",",
727
+ "colon": ":",
728
+ "tab": "\t",
729
+ "space": " ",
730
+ }
731
+ self.delimiter = v[d]
732
+
733
+ q = self.metadata.get("use-quotechar")
734
+ if q:
735
+ v = ["quotes", "quote", "single-quote", "singlequote", "single", "tick"]
736
+ if q not in v:
737
+ raise ValueError(f"The use-quotechar directive must be one of {v}")
738
+ v = {
739
+ "quotes": '"',
740
+ "quote": '"',
741
+ "single-quote": "'",
742
+ "singlequote": "'",
743
+ "single": "'",
744
+ "tick": "`",
745
+ }
746
+ self.quotechar = v[q]
708
747
 
709
748
  # =====================
710
749
  # in principle the modes should come through the mode controller like:
@@ -1001,8 +1040,8 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
1001
1040
  def limit_collection_to(self, indexes: List[int]) -> None:
1002
1041
  """@private"""
1003
1042
  self._limit_collection_to = indexes
1004
- if self._limit_collection_to and self._limit_collection_to != indexes:
1005
- self.logger.info("Limiting headers collected: %s", indexes)
1043
+ # if self._limit_collection_to and self._limit_collection_to != indexes:
1044
+ self.logger.info("Limiting headers collected: %s", indexes)
1006
1045
 
1007
1046
  def stop(self) -> None:
1008
1047
  """@private"""
@@ -1101,16 +1140,34 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
1101
1140
  if self.will_run is True:
1102
1141
  for line in self._next_line():
1103
1142
  b = self._consider_line(line)
1143
+ #
1144
+ # exp. not workable. matcher doesn't hold the last match
1145
+ # value. we cannot look at the expressions because a) encapsulation and
1146
+ # b) too darn complex. so we cannot double check that b is actually the
1147
+ # result and not just the instruction to not return line.
1148
+ #
1149
+ # self.matcher.
1150
+ #
1151
+ #
1152
+ #
1104
1153
  if b:
1105
1154
  line = self.limit_collection(line)
1106
1155
  if line is None:
1107
1156
  msg = "Line cannot be None"
1108
1157
  self.logger.error(msg)
1109
1158
  raise MatchException(msg)
1159
+ #
1160
+ # with remove() now added we're allowing [] lines. why you might want one?
1161
+ # maybe you're removing all the data in order to put a blank line? maybe
1162
+ # collecting unexpected headers only? (imagine removing known headers and
1163
+ # skipping if no header mismatch, maybe?)
1164
+ #
1165
+ """
1110
1166
  if len(line) == 0:
1111
1167
  msg = "Line cannot be len() == 0"
1112
1168
  self.logger.error(msg)
1113
1169
  raise MatchException(msg)
1170
+ """
1114
1171
  yield line
1115
1172
  elif self.collecting and self.unmatched_available:
1116
1173
  if self.unmatched is None:
@@ -1295,19 +1352,27 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
1295
1352
  that the csvpath says to collect. headers for collection are indicated using
1296
1353
  the collect() function.
1297
1354
  """
1298
- if len(self.limit_collection_to) == 0:
1355
+ if self.limit_collection_to is None: # len(self.limit_collection_to) == 0:
1299
1356
  return line
1300
1357
  ls = []
1301
1358
  for k in self.limit_collection_to:
1302
- if k is None or k >= len(line):
1359
+ if k is None:
1303
1360
  #
1304
1361
  # FP change. didn't do do_i_raise and didn't handle w/error mgr
1305
1362
  #
1306
- msg = f"[{self.identity}] Line {self.line_monitor.physical_line_number}: unknown header name: {k} of {self.limit_collection_to} in headers {self.headers}"
1363
+ msg = f"[{self.identity}] Line {self.line_monitor.physical_line_number}: header index: {k} >= {len(line)}. Attempting to limit line values {line} to: {self.limit_collection_to} in headers {self.headers}"
1307
1364
  self.error_manager.handle_error(source=self, msg=msg)
1308
1365
  if self.ecoms.do_i_raise():
1309
1366
  raise InputException(msg)
1310
- ls.append(line[k])
1367
+ #
1368
+ # should we crash out here? what would cause k to be None? would we ever be
1369
+ # in a recoverable state that would make it better to continue iterating?
1370
+ #
1371
+ break
1372
+ elif k >= len(line):
1373
+ ls.append("")
1374
+ else:
1375
+ ls.append(line[k])
1311
1376
  return ls
1312
1377
 
1313
1378
  def advance(self, ff: int = -1) -> None:
@@ -107,8 +107,8 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
107
107
  quotechar='"',
108
108
  skip_blank_lines=True,
109
109
  print_default=True,
110
- project_name=None,
111
- project_context=None
110
+ project_context=None,
111
+ project=None
112
112
  # config: Config = None,
113
113
  ):
114
114
  if CsvPaths.METRICS_WRAP_REG is False:
@@ -126,7 +126,7 @@ class CsvPaths(CsvPathsCoordinator, ErrorCollector):
126
126
  #
127
127
  # the expectation is that FlightPath Server will use API key as project context.
128
128
  #
129
- self._project = project_name if project_name else "project"
129
+ self._project = project if project else "project"
130
130
  self._project_context = project_context if project_context else "csvpaths"
131
131
  #
132
132
  # in a few cases, mainly s3 and sftp connection or config sharing
@@ -416,6 +416,8 @@ Cache: {cache}
416
416
  # config=None,
417
417
  print_default=self.print_default,
418
418
  error_manager=self.error_manager,
419
+ project=self.project,
420
+ project_context=self.project_context,
419
421
  )
420
422
  if path.config.configpath != self.config.configpath:
421
423
  path.config.set_config_path_and_reload(self.config.configpath)
@@ -123,9 +123,9 @@ class ErrorManager(Registrar, Listener):
123
123
  instance = ""
124
124
  chain = ""
125
125
  line = (
126
- self.csvpath.line_monitor.physical_line_number
127
- if self.csvpath is not None
128
- else -1
126
+ -1
127
+ if (not self.csvpath or not self.csvpath.line_monitor)
128
+ else self.csvpath.line_monitor.physical_line_number
129
129
  )
130
130
  try:
131
131
  if isinstance(source, Matchable):
@@ -387,8 +387,6 @@ class FileManager:
387
387
  #
388
388
  self.legal_name(name)
389
389
  p = Nos(self.named_files_dir).join(name)
390
- # p = os.path.join(self.named_files_dir, name)
391
- # nos = self.nos
392
390
  nos = Nos(p)
393
391
  if nos.dir_exists():
394
392
  nos.remove()
@@ -458,7 +456,8 @@ class FileManager:
458
456
  #
459
457
  def add_named_files_from_dir(
460
458
  self, dirname: str, *, name=None, template: str = None, recurse=True
461
- ):
459
+ ) -> list[str]:
460
+ ret = []
462
461
  #
463
462
  # legal_name handled at add_named_file
464
463
  #
@@ -474,7 +473,6 @@ class FileManager:
474
473
  dlist = nos.listdir(files_only=True, recurse=recurse)
475
474
  for i, _ in enumerate(dlist):
476
475
  dlist[i] = f"{nos.join(_)}"
477
-
478
476
  base = dirname
479
477
  #
480
478
  # collect all full paths that are files and have correct extensions
@@ -499,11 +497,14 @@ class FileManager:
499
497
  else:
500
498
  # path = os.path.join(base, p)
501
499
  path = Nos(base).join(p)
502
- self.add_named_file(name=n, path=path, template=template)
500
+ ref = self.add_named_file(name=n, path=path, template=template)
501
+ if ref is not None:
502
+ ret.append(ref)
503
503
  else:
504
504
  self._csvpaths.logger.debug(
505
505
  "%s is not in accept list", Nos(base).join(p)
506
506
  )
507
+ return ret
507
508
 
508
509
  def can_load(self, path: str) -> bool:
509
510
  #
@@ -533,7 +534,7 @@ class FileManager:
533
534
 
534
535
  def add_named_file(
535
536
  self, *, name: NamedFileName, path: str, template: str = None
536
- ) -> None:
537
+ ) -> str | None:
537
538
  self.csvpaths.logger.info("Adding named file %s from %s", name, path)
538
539
  if not self.can_load(path):
539
540
  #
@@ -607,8 +608,11 @@ class FileManager:
607
608
  name_home = self.named_file_home(name)
608
609
  rpath, h = self._fingerprint(home)
609
610
  self.csvpaths.logger.debug("Fingerprint of %s: %s", path, h)
611
+ ret = f"${name}.files.{h}"
612
+ self.csvpaths.logger.debug("Reference to named-file: %s", ret)
610
613
  mdata = FileMetadata(self.csvpaths.config)
611
614
  mdata.named_file_name = name
615
+ mdata.named_file_ref = ret
612
616
  #
613
617
  # we need the declared path, incl. any extra path info, in order
614
618
  # to know if we are being pointed at a sub-portion of the data, e.g.
@@ -634,7 +638,6 @@ class FileManager:
634
638
  # the fingerprint is the most precise way of referencing a particular
635
639
  # named-file version.
636
640
  #
637
- ret = f"${name}.files.{h}"
638
641
  self.csvpaths.logger.debug("Registered %s", ret)
639
642
  return ret
640
643
  except Exception as ex:
@@ -22,6 +22,11 @@ class FileMetadata(Metadata):
22
22
  self.mark: str = None
23
23
  # like csv
24
24
  self.type: str = None
25
- self.file_size = 0
25
+ self.file_size: int = 0
26
26
  self.template: str = None
27
- self.fingerprint = None
27
+ self.fingerprint: str = None
28
+ #
29
+ # named_file_ref is the most specific reference possible it is
30
+ # in the form $name.files.fingerprint
31
+ #
32
+ self.named_file_ref: str = None
@@ -38,7 +38,6 @@ class FileRegistrar(Registrar, Listener):
38
38
  if nos.physical_dirs() and not nos.dir_exists():
39
39
  raise InputException(f"Named file home does not exist: {home}")
40
40
  mf = Nos(home).join("manifest.json")
41
- # mf = os.path.join(home, "manifest.json")
42
41
  nos.path = mf
43
42
  if not nos.exists():
44
43
  self.intermediary.put_json(mf, [])
@@ -124,6 +123,7 @@ class FileRegistrar(Registrar, Listener):
124
123
  manifest_path = mdata.manifest_path
125
124
  mani = {}
126
125
  mani["type"] = t
126
+ mani["reference"] = mdata.named_file_ref
127
127
  mani["file"] = rpath
128
128
  mani["file_home"] = mdata.file_home
129
129
  mani["fingerprint"] = h
@@ -33,7 +33,6 @@ class FilesListener(Listener): # Registrar,
33
33
  def manifest_path(self) -> str:
34
34
  root = self.config.get(section="inputs", name="files")
35
35
  mf = Nos(root).join("manifest.json")
36
- # mf = os.path.join(root, "manifest.json")
37
36
  if not Nos(mf).exists():
38
37
  with DataFileWriter(path=mf, mode="w") as writer:
39
38
  writer.append("[]")
@@ -63,6 +62,7 @@ class FilesListener(Listener): # Registrar,
63
62
  mani["named_file_name"] = mdata.named_file_name
64
63
  mani["origin_path"] = mdata.origin_path
65
64
  mani["fingerprint"] = mdata.fingerprint
65
+ mani["reference"] = mdata.named_file_ref
66
66
  mani["file_path"] = mdata.file_path
67
67
  mani["file_home"] = mdata.file_home
68
68
  mani["file_name"] = mdata.file_name