csvpath 0.0.595__tar.gz → 0.0.599__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 (394) hide show
  1. {csvpath-0.0.595 → csvpath-0.0.599}/PKG-INFO +39 -36
  2. csvpath-0.0.599/assets/.DS_Store +0 -0
  3. {csvpath-0.0.595 → csvpath-0.0.599}/assets/config/config.ini +2 -2
  4. {csvpath-0.0.595 → csvpath-0.0.599}/assets/config/jenkins-local-azure.ini +2 -2
  5. {csvpath-0.0.595 → csvpath-0.0.599}/assets/config/jenkins-local-filesystem-mysql.ini +2 -2
  6. {csvpath-0.0.595 → csvpath-0.0.599}/assets/config/jenkins-local-gcs.ini +6 -7
  7. {csvpath-0.0.595 → csvpath-0.0.599}/assets/config/jenkins-local-s3.ini +2 -2
  8. {csvpath-0.0.595 → csvpath-0.0.599}/assets/config/jenkins-local-sftp.ini +7 -8
  9. {csvpath-0.0.595 → csvpath-0.0.599}/assets/config/jenkins-windows-azure.ini +2 -2
  10. {csvpath-0.0.595 → csvpath-0.0.599}/assets/config/jenkins-windows-gcs.ini +2 -2
  11. {csvpath-0.0.595 → csvpath-0.0.599}/assets/config/jenkins-windows-local.ini +3 -4
  12. {csvpath-0.0.595 → csvpath-0.0.599}/assets/config/jenkins-windows-s3.ini +2 -2
  13. {csvpath-0.0.595 → csvpath-0.0.599}/assets/config/jenkins-windows-sftp.ini +3 -3
  14. csvpath-0.0.599/assets/gocd/.DS_Store +0 -0
  15. csvpath-0.0.599/assets/gocd/Mac.goenvironment.json +11 -0
  16. csvpath-0.0.599/assets/gocd/Windows.goenvironment.json +12 -0
  17. csvpath-0.0.599/assets/integrations/.DS_Store +0 -0
  18. {csvpath-0.0.595 → csvpath-0.0.599}/config/config.ini +5 -5
  19. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/csvpath.py +29 -9
  20. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/csvpaths.py +3 -1
  21. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/errors/error_comms.py +30 -17
  22. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/errors/error_manager.py +26 -13
  23. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/files/file_describer.py +24 -2
  24. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/files/file_manager.py +12 -3
  25. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/files/lines_and_headers_cacher.py +22 -20
  26. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/scripts/scripts_results_listener.py +3 -1
  27. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sftpplus/rpc.py +3 -1
  28. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sql/engine.py +15 -8
  29. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sql/sql_paths_listener.py +1 -1
  30. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/metadata.py +7 -3
  31. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/paths/paths_describer.py +6 -1
  32. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/results/results_manager.py +12 -1
  33. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/dates/now.py +3 -1
  34. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/function_factory.py +2 -1
  35. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/lines/dups.py +1 -1
  36. csvpath-0.0.599/csvpath/matching/functions/sql/sql_in.py +115 -0
  37. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/modes/mode_controller.py +7 -1
  38. csvpath-0.0.599/csvpath/util/cache.py +87 -0
  39. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/config.py +42 -20
  40. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/config_env.py +12 -2
  41. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/date_util.py +24 -3
  42. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/file_readers.py +4 -2
  43. csvpath-0.0.599/csvpath/util/file_utility.py +30 -0
  44. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/line_counter.py +6 -14
  45. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/line_spooler.py +21 -9
  46. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/log_utility.py +16 -13
  47. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/nos.py +2 -0
  48. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/pandas_data_reader.py +3 -0
  49. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/files_reference_finder_2.py +6 -3
  50. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/ref_utils.py +5 -3
  51. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/results_tools/token_filters.py +5 -2
  52. csvpath-0.0.599/csvpath/util/referrer_printer.py +112 -0
  53. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/run_home_maker.py +4 -2
  54. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/var_utility.py +116 -6
  55. {csvpath-0.0.595 → csvpath-0.0.599}/pyproject.toml +44 -43
  56. csvpath-0.0.595/csvpath/util/cache.py +0 -84
  57. {csvpath-0.0.595 → csvpath-0.0.599}/LICENSE +0 -0
  58. {csvpath-0.0.595 → csvpath-0.0.599}/README.md +0 -0
  59. {csvpath-0.0.595 → csvpath-0.0.599}/assets/config/extra-functions.imports +0 -0
  60. {csvpath-0.0.595 → csvpath-0.0.599}/assets/config/function.imports +0 -0
  61. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/mac/azure-pipeline.gopipeline.json +0 -0
  62. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/mac/azure.sh +0 -0
  63. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/mac/gcs.sh +0 -0
  64. /csvpath-0.0.595/assets/gocd/mac/gcs-pipeline.gopipeline.json → /csvpath-0.0.599/assets/gocd/mac/google-pipeline.gopipeline.json +0 -0
  65. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/mac/local-pipeline.gopipeline copy.json +0 -0
  66. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/mac/local.sh +0 -0
  67. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/mac/s3-pipeline.gopipeline.json +0 -0
  68. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/mac/s3.sh +0 -0
  69. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/mac/sftp-pipeline.gopipeline.json +0 -0
  70. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/mac/sftp.sh +0 -0
  71. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/windows/azure.bat +0 -0
  72. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/windows/gcs.bat +0 -0
  73. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/windows/local.bat +0 -0
  74. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/windows/s3.bat +0 -0
  75. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/windows/sftp.bat +0 -0
  76. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/windows/windows-azure.gopipeline.json +0 -0
  77. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/windows/windows-gcs.gopipeline.json +0 -0
  78. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/windows/windows-local.gopipeline.json +0 -0
  79. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/windows/windows-s3.gopipeline.json +0 -0
  80. {csvpath-0.0.595 → csvpath-0.0.599}/assets/gocd/windows/windows-sftp.gopipeline.json +0 -0
  81. {csvpath-0.0.595 → csvpath-0.0.599}/assets/integrations/sftpplus/handle_auto_arrival.bat +0 -0
  82. {csvpath-0.0.595 → csvpath-0.0.599}/assets/integrations/sftpplus/handle_auto_arrival.py +0 -0
  83. {csvpath-0.0.595 → csvpath-0.0.599}/assets/integrations/sftpplus/handle_auto_arrival.sh +0 -0
  84. {csvpath-0.0.595 → csvpath-0.0.599}/assets/integrations/sftpplus/handle_mailbox_arrival.bat +0 -0
  85. {csvpath-0.0.595 → csvpath-0.0.599}/assets/integrations/sftpplus/handle_mailbox_arrival.py +0 -0
  86. {csvpath-0.0.595 → csvpath-0.0.599}/assets/integrations/sftpplus/handle_mailbox_arrival.sh +0 -0
  87. {csvpath-0.0.595 → csvpath-0.0.599}/assets/integrations/sqlite/csvpath +0 -0
  88. {csvpath-0.0.595 → csvpath-0.0.599}/assets/integrations/sqlite/schema.sql +0 -0
  89. {csvpath-0.0.595 → csvpath-0.0.599}/config/env.json +0 -0
  90. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/__init__.py +0 -0
  91. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/cli/__init__.py +0 -0
  92. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/cli/asker.py +0 -0
  93. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/cli/cli.py +0 -0
  94. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/cli/const.py +0 -0
  95. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/cli/debug_config.py +0 -0
  96. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/cli/drill_down.py +0 -0
  97. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/cli/function_describer.py +0 -0
  98. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/cli/function_lister.py +0 -0
  99. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/cli/selecter.py +0 -0
  100. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/__init__.py +0 -0
  101. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/errors/error.py +0 -0
  102. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/errors/error_collector.py +0 -0
  103. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/files/file_activator.py +0 -0
  104. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/files/file_metadata.py +0 -0
  105. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/files/file_registrar.py +0 -0
  106. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/files/files_activation_listener.py +0 -0
  107. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/files/files_listener.py +0 -0
  108. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ckan/ckan.py +0 -0
  109. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ckan/ckan_listener.py +0 -0
  110. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ckan/datafile.py +0 -0
  111. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ckan/dataset.py +0 -0
  112. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ol/event.py +0 -0
  113. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ol/event_result.py +0 -0
  114. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ol/file_listener_ol.py +0 -0
  115. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ol/job.py +0 -0
  116. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ol/ol_listener.py +0 -0
  117. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ol/paths_listener_ol.py +0 -0
  118. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ol/result_listener_ol.py +0 -0
  119. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ol/results_listener_ol.py +0 -0
  120. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ol/run.py +0 -0
  121. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ol/run_listener_ol.py +0 -0
  122. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ol/run_state.py +0 -0
  123. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/ol/sender.py +0 -0
  124. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/otlp/error_metrics.py +0 -0
  125. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/otlp/metrics.py +0 -0
  126. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/otlp/otlp_error_listener.py +0 -0
  127. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/otlp/otlp_file_listener.py +0 -0
  128. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/otlp/otlp_listener.py +0 -0
  129. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/otlp/otlp_paths_listener.py +0 -0
  130. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/otlp/otlp_result_listener.py +0 -0
  131. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/otlp/otlp_results_listener.py +0 -0
  132. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sftp/sftp_sender.py +0 -0
  133. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sftpplus/arrival_handler.py +0 -0
  134. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sftpplus/sftpplus_listener.py +0 -0
  135. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sftpplus/transfer_creator.py +0 -0
  136. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sftpplus/transfers.py +0 -0
  137. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/slack/event.py +0 -0
  138. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/slack/sender.py +0 -0
  139. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sql/sql_file_listener.py +0 -0
  140. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sql/sql_listener.py +0 -0
  141. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sql/sql_result_listener.py +0 -0
  142. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sql/sql_results_listener.py +0 -0
  143. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sql/tables.py +0 -0
  144. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sql/updates.py +0 -0
  145. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sqlite/schema.sql +0 -0
  146. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sqlite/sqlite_result_listener.py +0 -0
  147. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/sqlite/sqlite_results_listener.py +0 -0
  148. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/webhook/webhook_listener.py +0 -0
  149. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/integrations/webhook/webhook_results_listener.py +0 -0
  150. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/listener.py +0 -0
  151. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/paths/paths_listener.py +0 -0
  152. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/paths/paths_manager.py +0 -0
  153. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/paths/paths_metadata.py +0 -0
  154. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/paths/paths_registrar.py +0 -0
  155. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/registrar.py +0 -0
  156. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/results/readers/file_errors_reader.py +0 -0
  157. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/results/readers/file_lines_reader.py +0 -0
  158. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/results/readers/file_printouts_reader.py +0 -0
  159. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/results/readers/file_unmatched_reader.py +0 -0
  160. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/results/readers/readers.py +0 -0
  161. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/results/result.py +0 -0
  162. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/results/result_file_reader.py +0 -0
  163. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/results/result_metadata.py +0 -0
  164. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/results/result_registrar.py +0 -0
  165. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/results/result_serializer.py +0 -0
  166. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/results/results_metadata.py +0 -0
  167. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/results/results_registrar.py +0 -0
  168. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/run/run_listener_stdout.py +0 -0
  169. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/run/run_metadata.py +0 -0
  170. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/run/run_registrar.py +0 -0
  171. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/managers/test_listener.py +0 -0
  172. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/__init__.py +0 -0
  173. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/__init__.py +0 -0
  174. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/args.py +0 -0
  175. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/args_helper.py +0 -0
  176. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/boolean/all.py +0 -0
  177. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/boolean/andf.py +0 -0
  178. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/boolean/any.py +0 -0
  179. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/boolean/between.py +0 -0
  180. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/boolean/empty.py +0 -0
  181. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/boolean/exists.py +0 -0
  182. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/boolean/inf.py +0 -0
  183. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/boolean/no.py +0 -0
  184. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/boolean/notf.py +0 -0
  185. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/boolean/orf.py +0 -0
  186. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/boolean/yes.py +0 -0
  187. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/counting/count.py +0 -0
  188. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/counting/count_bytes.py +0 -0
  189. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/counting/count_headers.py +0 -0
  190. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/counting/count_lines.py +0 -0
  191. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/counting/count_scans.py +0 -0
  192. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/counting/counter.py +0 -0
  193. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/counting/every.py +0 -0
  194. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/counting/has_matches.py +0 -0
  195. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/counting/increment.py +0 -0
  196. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/counting/tally.py +0 -0
  197. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/counting/total_lines.py +0 -0
  198. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/dates/part.py +0 -0
  199. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/dates/roll.py +0 -0
  200. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/function.py +0 -0
  201. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/function_finder.py +0 -0
  202. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/function_focus.py +0 -0
  203. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/append.py +0 -0
  204. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/collect.py +0 -0
  205. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/empty_stack.py +0 -0
  206. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/end.py +0 -0
  207. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/header_name.py +0 -0
  208. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
  209. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/headers.py +0 -0
  210. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/headers_stack.py +0 -0
  211. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/insert.py +0 -0
  212. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/line_before.py +0 -0
  213. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/mismatch.py +0 -0
  214. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/remove.py +0 -0
  215. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/rename.py +0 -0
  216. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/replace.py +0 -0
  217. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/headers/reset_headers.py +0 -0
  218. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/json/jsonpath.py +0 -0
  219. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/lines/advance.py +0 -0
  220. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/lines/after_blank.py +0 -0
  221. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/lines/first.py +0 -0
  222. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/lines/first_line.py +0 -0
  223. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/lines/last.py +0 -0
  224. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/lines/stop.py +0 -0
  225. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/math/above.py +0 -0
  226. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/math/add.py +0 -0
  227. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/math/divide.py +0 -0
  228. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/math/equals.py +0 -0
  229. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/math/intf.py +0 -0
  230. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/math/mod.py +0 -0
  231. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/math/multiply.py +0 -0
  232. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/math/odd.py +0 -0
  233. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/math/round.py +0 -0
  234. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/math/subtotal.py +0 -0
  235. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/math/subtract.py +0 -0
  236. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/math/sum.py +0 -0
  237. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/misc/fingerprint.py +0 -0
  238. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/misc/importf.py +0 -0
  239. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/misc/parquet.py +0 -0
  240. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/misc/random.py +0 -0
  241. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/print/jinjaf.py +0 -0
  242. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/print/print_line.py +0 -0
  243. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/print/print_queue.py +0 -0
  244. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/print/printf.py +0 -0
  245. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/print/table.py +0 -0
  246. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/stats/minf.py +0 -0
  247. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/stats/nminmax.py +0 -0
  248. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/stats/percent.py +0 -0
  249. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/stats/percent_unique.py +0 -0
  250. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/stats/stdev.py +0 -0
  251. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/strings/alter.py +0 -0
  252. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/strings/caps.py +0 -0
  253. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/strings/concat.py +0 -0
  254. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/strings/contains.py +0 -0
  255. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/strings/format.py +0 -0
  256. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/strings/length.py +0 -0
  257. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/strings/lower.py +0 -0
  258. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/strings/metaphone.py +0 -0
  259. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/strings/regex.py +0 -0
  260. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/strings/starts_with.py +0 -0
  261. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/strings/strip.py +0 -0
  262. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/strings/substring.py +0 -0
  263. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/strings/upper.py +0 -0
  264. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/testing/debug.py +0 -0
  265. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/types/__init__.py +0 -0
  266. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/types/blank.py +0 -0
  267. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/types/boolean.py +0 -0
  268. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/types/datatype.py +0 -0
  269. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/types/datef.py +0 -0
  270. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/types/decimal.py +0 -0
  271. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/types/email.py +0 -0
  272. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/types/nonef.py +0 -0
  273. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/types/string.py +0 -0
  274. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/types/type.py +0 -0
  275. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/types/url.py +0 -0
  276. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/types/wildcard.py +0 -0
  277. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/validity/fail.py +0 -0
  278. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/validity/failed.py +0 -0
  279. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/validity/line.py +0 -0
  280. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/validity/matches.py +0 -0
  281. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/validity/percent_matching.py +0 -0
  282. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/variables/clear.py +0 -0
  283. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/variables/get.py +0 -0
  284. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/variables/index_of.py +0 -0
  285. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/variables/pushpop.py +0 -0
  286. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/variables/put.py +0 -0
  287. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/variables/slice.py +0 -0
  288. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/variables/sort.py +0 -0
  289. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/variables/track.py +0 -0
  290. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/variables/variables.py +0 -0
  291. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/functions/xml/xpath.py +0 -0
  292. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/lark_parser.py +0 -0
  293. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/lark_transformer.py +0 -0
  294. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/matcher.py +0 -0
  295. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/productions/__init__.py +0 -0
  296. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/productions/equality.py +0 -0
  297. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/productions/expression.py +0 -0
  298. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/productions/header.py +0 -0
  299. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/productions/matchable.py +0 -0
  300. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/productions/qualified.py +0 -0
  301. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/productions/reference.py +0 -0
  302. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/productions/term.py +0 -0
  303. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/productions/variable.py +0 -0
  304. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/util/exceptions.py +0 -0
  305. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/util/expression_encoder.py +0 -0
  306. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/util/expression_utility.py +0 -0
  307. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/util/lark_print_parser.py +0 -0
  308. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/util/parquet_utility.py +0 -0
  309. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/util/print_parser.py +0 -0
  310. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/matching/util/runtime_data_collector.py +0 -0
  311. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/modes/error_mode.py +0 -0
  312. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/modes/explain_mode.py +0 -0
  313. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/modes/files_mode.py +0 -0
  314. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/modes/logic_mode.py +0 -0
  315. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/modes/print_mode.py +0 -0
  316. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/modes/return_mode.py +0 -0
  317. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/modes/run_mode.py +0 -0
  318. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/modes/source_mode.py +0 -0
  319. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/modes/transfer_mode.py +0 -0
  320. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/modes/unmatched_mode.py +0 -0
  321. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/modes/validation_mode.py +0 -0
  322. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/scanning/__init__.py +0 -0
  323. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/scanning/scanner2.py +0 -0
  324. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/scanning/scanner2_parser.py +0 -0
  325. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/scanning/scanner2_transformer.py +0 -0
  326. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/azure/azure_data_reader.py +0 -0
  327. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/azure/azure_data_writer.py +0 -0
  328. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/azure/azure_fingerprinter.py +0 -0
  329. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/azure/azure_json_data_reader.py +0 -0
  330. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/azure/azure_nos.py +0 -0
  331. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/azure/azure_utils.py +0 -0
  332. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/azure/azure_xlsx_data_reader.py +0 -0
  333. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/backend_check.py +0 -0
  334. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/box.py +0 -0
  335. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/caser.py +0 -0
  336. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/class_loader.py +0 -0
  337. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/code.py +0 -0
  338. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/config_exception.py +0 -0
  339. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/exceptions.py +0 -0
  340. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/file_info.py +0 -0
  341. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/file_writers.py +0 -0
  342. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/gcs/gcs_data_reader.py +0 -0
  343. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/gcs/gcs_data_writer.py +0 -0
  344. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/gcs/gcs_fingerprinter.py +0 -0
  345. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/gcs/gcs_json_data_reader.py +0 -0
  346. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/gcs/gcs_nos.py +0 -0
  347. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/gcs/gcs_utils.py +0 -0
  348. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/gcs/gcs_xlsx_data_reader.py +0 -0
  349. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/hasher.py +0 -0
  350. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/http/http_data_reader.py +0 -0
  351. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/intermediary.py +0 -0
  352. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/json/json_data_reader.py +0 -0
  353. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/json/json_reader_helper.py +0 -0
  354. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/last_line_stats.py +0 -0
  355. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/line_monitor.py +0 -0
  356. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/metadata_parser.py +0 -0
  357. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/path_util.py +0 -0
  358. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/printer.py +0 -0
  359. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/py_file_utility.py +0 -0
  360. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/files_tools/fingerprint_finder.py +0 -0
  361. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/files_tools/range_finder.py +0 -0
  362. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/reference_exceptions.py +0 -0
  363. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/reference_grammar.py +0 -0
  364. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/reference_manifest_entry_finder.py +0 -0
  365. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/reference_parser.py +0 -0
  366. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/reference_results.py +0 -0
  367. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/reference_transformer.py +0 -0
  368. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/results_reference_finder_2.py +0 -0
  369. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/results_tools/data_finder.py +0 -0
  370. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/results_tools/date_filter.py +0 -0
  371. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/results_tools/identity_finder.py +0 -0
  372. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/results_tools/path_filter.py +0 -0
  373. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/results_tools/resolve_possibles.py +0 -0
  374. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/results_tools/yesterday_or_today_translator.py +0 -0
  375. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/references/tools/date_completer.py +0 -0
  376. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/s3/s3_data_reader.py +0 -0
  377. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/s3/s3_data_writer.py +0 -0
  378. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/s3/s3_fingerprinter.py +0 -0
  379. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/s3/s3_json_data_reader.py +0 -0
  380. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/s3/s3_nos.py +0 -0
  381. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/s3/s3_utils.py +0 -0
  382. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/s3/s3_xlsx_data_reader.py +0 -0
  383. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/sftp/sftp_config.py +0 -0
  384. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/sftp/sftp_data_reader.py +0 -0
  385. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/sftp/sftp_data_writer.py +0 -0
  386. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/sftp/sftp_fingerprinter.py +0 -0
  387. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/sftp/sftp_json_data_reader.py +0 -0
  388. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/sftp/sftp_nos.py +0 -0
  389. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/sftp/sftp_walk.py +0 -0
  390. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/sftp/sftp_xlsx_data_reader.py +0 -0
  391. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/sqliter.py +0 -0
  392. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/template_util.py +0 -0
  393. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/xlsx/xlsx_data_reader.py +0 -0
  394. {csvpath-0.0.595 → csvpath-0.0.599}/csvpath/util/xlsx/xlsx_reader_helper.py +0 -0
@@ -1,7 +1,8 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: csvpath
3
- Version: 0.0.595
3
+ Version: 0.0.599
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
+ License-File: LICENSE
5
6
  Author: David Kershaw
6
7
  Author-email: info@csvpath.org
7
8
  Requires-Python: >3.10,<4.0
@@ -13,6 +14,7 @@ Classifier: Programming Language :: Python :: 3
13
14
  Classifier: Programming Language :: Python :: 3.11
14
15
  Classifier: Programming Language :: Python :: 3.12
15
16
  Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
16
18
  Classifier: Topic :: File Formats
17
19
  Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
18
20
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
@@ -21,40 +23,41 @@ Classifier: Topic :: Software Development :: Testing
21
23
  Classifier: Topic :: Text Processing
22
24
  Classifier: Topic :: Utilities
23
25
  Provides-Extra: pandas
24
- Requires-Dist: azure-storage-blob (>=12.24.1,<13.0.0)
25
- Requires-Dist: boto3 (>=1.35.91,<2.0.0)
26
- Requires-Dist: ckanapi (>=4.8,<5.0)
27
- Requires-Dist: email-validator (>=2.2.0,<3.0.0)
28
- Requires-Dist: google-cloud-storage (>=3.1.0,<4.0.0)
29
- Requires-Dist: inflect (>=7.4.0,<8.0.0)
30
- Requires-Dist: jinja2 (>=3.1.6,<4.0.0)
31
- Requires-Dist: jsonlines (>=4.0.0,<5.0.0)
32
- Requires-Dist: jsonpath-ng (>=1.7.0,<2.0.0)
33
- Requires-Dist: jsonpickle (>=4.1.1,<5.0.0)
34
- Requires-Dist: lark (>=1.2.2,<2.0.0)
35
- Requires-Dist: lxml (>=6.0.2,<7.0.0)
36
- Requires-Dist: marquez-python (>=0.50.0,<0.51.0)
37
- Requires-Dist: metaphone (>=0.6,<0.7)
38
- Requires-Dist: mysqlclient (>=2.2.7,<3.0.0)
39
- Requires-Dist: openlineage-python (>=1.25.0,<2.0.0)
40
- Requires-Dist: opentelemetry-distro[otlp] (>=0.50b0,<0.51)
41
- Requires-Dist: pandas (>=2.2.2,<3.0.0) ; extra == "pandas"
42
- Requires-Dist: paramiko (>=3.5.0,<4.0.0)
43
- Requires-Dist: pdoc (>=15.0.1,<16.0.0)
44
- Requires-Dist: prompt-toolkit (>=3.0.50,<4.0.0)
45
- Requires-Dist: psycopg2-binary (>=2.9.10,<3.0.0)
46
- Requires-Dist: pyarrow (>=23.0.1,<24.0.0)
47
- Requires-Dist: pydantic (>=2.12.5,<3.0.0)
48
- Requires-Dist: pyjson5 (>=2.0.0,<3.0.0)
49
- Requires-Dist: pylightxl (>=1.61,<2.0)
50
- Requires-Dist: pytest (>=8.3.3,<9.0.0)
51
- Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
52
- Requires-Dist: pytz (>=2024.2,<2025.0)
53
- Requires-Dist: requests (>=2.32.3,<3.0.0)
54
- Requires-Dist: smart-open[all] (>=7.1.0,<8.0.0)
55
- Requires-Dist: sqlalchemy (>=2.0.38,<3.0.0)
56
- Requires-Dist: tabulate (>=0.9.0,<0.10.0)
57
- Requires-Dist: validators (>=0.34.0,<0.35.0)
26
+ Requires-Dist: azure-storage-blob (==12.28.0)
27
+ Requires-Dist: boto3 (==1.42.65)
28
+ Requires-Dist: ckanapi (==4.9)
29
+ Requires-Dist: email-validator (==2.3.0)
30
+ Requires-Dist: google-cloud-storage (==3.9.0)
31
+ Requires-Dist: inflect (==7.5.0)
32
+ Requires-Dist: jinja2 (==3.1.6)
33
+ Requires-Dist: jsonlines (==4.0.0)
34
+ Requires-Dist: jsonpath-ng (==1.8.0)
35
+ Requires-Dist: jsonpickle (==4.1.1)
36
+ Requires-Dist: lark (==1.3.1)
37
+ Requires-Dist: lxml (==6.0.2)
38
+ Requires-Dist: marquez-python (==0.50.0)
39
+ Requires-Dist: metaphone (==0.6)
40
+ Requires-Dist: mysqlclient (==2.2.8)
41
+ Requires-Dist: openlineage-python (==1.45.0)
42
+ Requires-Dist: opentelemetry-distro[otlp] (==0.50b0)
43
+ Requires-Dist: pandas (==2.3.3) ; extra == "pandas"
44
+ Requires-Dist: paramiko (==3.5.1)
45
+ Requires-Dist: pdoc (==15.0.4)
46
+ Requires-Dist: prompt-toolkit (==3.0.52)
47
+ Requires-Dist: psutil (>=7.2.2,<8.0.0)
48
+ Requires-Dist: psycopg2-binary (==2.9.11)
49
+ Requires-Dist: pyarrow (==23.0.1)
50
+ Requires-Dist: pydantic (==2.12.5)
51
+ Requires-Dist: pyjson5 (==2.0.0)
52
+ Requires-Dist: pylightxl (==1.61)
53
+ Requires-Dist: pytest (==8.4.2)
54
+ Requires-Dist: python-dateutil (==2.9.0.post0)
55
+ Requires-Dist: pytz (==2024.2)
56
+ Requires-Dist: requests (==2.32.5)
57
+ Requires-Dist: smart-open[all] (==7.5.1)
58
+ Requires-Dist: sqlalchemy (==2.0.48)
59
+ Requires-Dist: tabulate (==0.9.0)
60
+ Requires-Dist: validators (==0.34.0)
58
61
  Project-URL: Csvpath.org, https://www.csvpath.org
59
62
  Project-URL: Github, https://github.com/csvpath/csvpath.git
60
63
  Description-Content-Type: text/markdown
Binary file
@@ -81,8 +81,8 @@ slack.results = from csvpath.managers.integrations.slack.sender import SlackSend
81
81
  [gcs]
82
82
 
83
83
  [sftp]
84
- server = 192.168.1.152
85
- port = 2022
84
+ server = SFTP_SERVER
85
+ port = SFTP_PORT
86
86
  username = python
87
87
  password = hangzhou
88
88
 
@@ -74,8 +74,8 @@ scripts.results = from csvpath.managers.integrations.scripts.scripts_results_lis
74
74
  [gcs]
75
75
 
76
76
  [sftp]
77
- server = 192.168.1.152
78
- port = 2022
77
+ server = SFTP_SERVER
78
+ port = SFTP_PORT
79
79
  username = python
80
80
  password = hangzhou
81
81
 
@@ -77,8 +77,8 @@ scripts.results = from csvpath.managers.integrations.scripts.scripts_results_lis
77
77
  #
78
78
 
79
79
  [sftp]
80
- server = 192.168.1.152
81
- port = 2022
80
+ server = SFTP_SERVER
81
+ port = SFTP_PORT
82
82
  username = python
83
83
  password = hangzhou
84
84
 
@@ -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
@@ -44,7 +44,7 @@ allow_http_files = True
44
44
  allow_local_files = True
45
45
 
46
46
  [listeners]
47
- groups =
47
+ groups = default
48
48
  sqlite.result = from csvpath.managers.integrations.sqlite.sqlite_result_listener import SqliteResultListener
49
49
  sqlite.results = from csvpath.managers.integrations.sqlite.sqlite_results_listener import SqliteResultsListener
50
50
  default.file = from csvpath.managers.files.files_listener import FilesListener
@@ -74,12 +74,11 @@ scripts.results = from csvpath.managers.integrations.scripts.scripts_results_lis
74
74
  [gcs]
75
75
 
76
76
  [sftp]
77
- server = 192.168.1.152
78
- port = 2022
77
+ server = SFTP_SERVER
78
+ port = SFTP_PORT
79
79
  username = python
80
80
  password = hangzhou
81
81
 
82
-
83
82
  [sqlite]
84
83
  db = archive/csvpath.db
85
84
 
@@ -91,7 +90,7 @@ port = SFTPPLUS_PORT
91
90
  admin_username = SFTPPLUS_ADMIN_USERNAME
92
91
  admin_password = SFTPPLUS_ADMIN_PASSWORD
93
92
  api_url = https://. . . :10020/json
94
- scripts_dir =
93
+ scripts_dir =
95
94
  execute_timeout = 300
96
95
 
97
96
  [ckan]
@@ -106,5 +105,5 @@ timeout = 5
106
105
  verify = False
107
106
 
108
107
  [slack]
109
- webhook_url =
108
+ webhook_url =
110
109
 
@@ -74,8 +74,8 @@ scripts.results = from csvpath.managers.integrations.scripts.scripts_results_lis
74
74
  [gcs]
75
75
 
76
76
  [sftp]
77
- server = 192.168.1.152
78
- port = 2022
77
+ server = SFTP_SERVER
78
+ port = SFTP_PORT
79
79
  username = python
80
80
  password = hangzhou
81
81
 
@@ -4,7 +4,7 @@ csv_files = csv, tsv, dat, tab, psv, ssv
4
4
 
5
5
  [errors]
6
6
  csvpath = raise, collect, print
7
- csvpaths = raise, print
7
+ csvpaths = raise, collect, print
8
8
  use_format = full
9
9
  pattern = {time}:{file}:{line}:{paths}:{instance}:{chain}: {message}
10
10
 
@@ -25,14 +25,13 @@ path = cache
25
25
  use_cache = no
26
26
 
27
27
  [functions]
28
- imports =
28
+ imports =
29
29
 
30
30
  [results]
31
- #archive = sftp://192.168.1.152:2022/mac/sftp/archive
32
31
  archive = tmp/sftp/archive
33
32
 
34
33
  [inputs]
35
- files = sftp://192.168.1.152:2022/mac/inputs/named_files
34
+ files = sftp://{SFTP_SERVER}:{SFTP_PORT}/mac/inputs/named_files
36
35
  csvpaths = tmp/sftp/inputs/named_paths
37
36
  on_unmatched_file_fingerprints = halt
38
37
  allow_http_files = True
@@ -79,8 +78,8 @@ shell = /bin/bash
79
78
  [gcs]
80
79
 
81
80
  [sftp]
82
- server = 192.168.1.152
83
- port = 2022
81
+ server = SFTP_SERVER
82
+ port = SFTP_PORT
84
83
  username = python
85
84
  password = hangzhou
86
85
 
@@ -95,7 +94,7 @@ port = SFTPPLUS_PORT
95
94
  admin_username = SFTPPLUS_ADMIN_USERNAME
96
95
  admin_password = SFTPPLUS_ADMIN_PASSWORD
97
96
  api_url = https://. . . :10020/json
98
- scripts_dir =
97
+ scripts_dir =
99
98
  execute_timeout = 300
100
99
 
101
100
  [ckan]
@@ -110,5 +109,5 @@ timeout = 5
110
109
  verify = False
111
110
 
112
111
  [slack]
113
- webhook_url =
112
+ webhook_url =
114
113
 
@@ -72,8 +72,8 @@ scripts.results = from csvpath.managers.integrations.scripts.scripts_results_lis
72
72
  run_scripts=yes
73
73
 
74
74
  [sftp]
75
- server = 192.168.1.152
76
- port = 2022
75
+ server = SFTP_SERVER
76
+ port = SFTP_PORT
77
77
  username = python
78
78
  password = hangzhou
79
79
 
@@ -111,8 +111,8 @@ slack.results = from csvpath.managers.integrations.slack.sender import SlackSend
111
111
  #
112
112
 
113
113
  [sftp]
114
- server = 192.168.1.152
115
- port = 2022
114
+ server = SFTP_SERVER
115
+ port = SFTP_PORT
116
116
  username = python
117
117
  password = hangzhou
118
118
 
@@ -4,7 +4,7 @@ csv_files = csv, tsv, dat, tab, psv, ssv
4
4
 
5
5
  [errors]
6
6
  csvpath = raise, collect, print
7
- csvpaths = raise, print
7
+ csvpaths = raise, collect, print
8
8
  use_format = full
9
9
  pattern = {time}:{file}:{line}:{paths}:{instance}:{chain}: {message}
10
10
 
@@ -69,8 +69,8 @@ slack.results = from csvpath.managers.integrations.slack.sender import SlackSend
69
69
  [gcs]
70
70
 
71
71
  [sftp]
72
- server = 192.168.1.152
73
- port = 2022
72
+ server = SFTP_SERVER
73
+ port = SFTP_PORT
74
74
  username = python
75
75
  password = hangzhou
76
76
 
@@ -106,4 +106,3 @@ webhook_url =
106
106
  run_scripts = yes
107
107
  shell = /bin/bash
108
108
 
109
-
@@ -74,8 +74,8 @@ scripts.results = from csvpath.managers.integrations.scripts.scripts_results_lis
74
74
  [gcs]
75
75
 
76
76
  [sftp]
77
- server = 192.168.1.152
78
- port = 2022
77
+ server = SFTP_SERVER
78
+ port = SFTP_PORT
79
79
  username = python
80
80
  password = hangzhou
81
81
 
@@ -40,7 +40,7 @@ imports =
40
40
  archive = tmp\sftp\archive
41
41
 
42
42
  [inputs]
43
- files = sftp://192.168.1.152:2022/windows/inputs\named_files
43
+ files = sftp://{SFTP_SERVER}:{SFTP_PORT}/windows/inputs/named_files
44
44
  csvpaths = tmp\sftp\inputs\named_paths
45
45
  on_unmatched_file_fingerprints = halt
46
46
  allow_http_files=True
@@ -112,8 +112,8 @@ scripts.results = from csvpath.managers.integrations.scripts.scripts_results_lis
112
112
  #
113
113
 
114
114
  [sftp]
115
- server = 192.168.1.152
116
- port = 2022
115
+ server = SFTP_SERVER
116
+ port = SFTP_PORT
117
117
  username = python
118
118
  password = hangzhou
119
119
 
Binary file
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "Mac",
3
+ "pipelines": [
4
+ "azure-pipeline",
5
+ "google-pipeline",
6
+ "s3-pipeline",
7
+ "sftp-pipeline"
8
+ ],
9
+ "agents": []
10
+ }
11
+
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "Windows",
3
+ "pipelines": [
4
+ "windows-azure",
5
+ "windows-gcs",
6
+ "windows-s3",
7
+ "windows-sftp",
8
+ "windows-local"
9
+ ],
10
+ "agents": []
11
+ }
12
+
@@ -13,7 +13,7 @@ csv_files = csv, tsv, dat, tab, psv, ssv
13
13
 
14
14
  [errors]
15
15
  csvpath = raise, collect, print
16
- csvpaths = raise, print
16
+ csvpaths = raise, collect, print
17
17
  use_format = full
18
18
  pattern = {time}:{file}:{line}:{paths}:{instance}:{chain}: {message}
19
19
 
@@ -35,7 +35,7 @@ path = cache
35
35
  use_cache = yes
36
36
 
37
37
  [functions]
38
- imports =
38
+ imports =
39
39
 
40
40
  [results]
41
41
  archive = tmp/local/archive
@@ -85,7 +85,7 @@ slack.results = from csvpath.managers.integrations.slack.sender import SlackSend
85
85
  [gcs]
86
86
 
87
87
  [sftp]
88
- server = 192.168.1.152
88
+ server = SFTP_SERVER
89
89
  port = 2022
90
90
  username = python
91
91
  password = hangzhou
@@ -105,7 +105,7 @@ port = SFTPPLUS_PORT
105
105
  admin_username = SFTPPLUS_ADMIN_USERNAME
106
106
  admin_password = SFTPPLUS_ADMIN_PASSWORD
107
107
  api_url = https://. . . :10020/json
108
- scripts_dir =
108
+ scripts_dir =
109
109
  execute_timeout = 300
110
110
 
111
111
  [ckan]
@@ -120,7 +120,7 @@ timeout = 5
120
120
  verify = False
121
121
 
122
122
  [slack]
123
- webhook_url =
123
+ webhook_url =
124
124
 
125
125
  [scripts]
126
126
  run_scripts = yes
@@ -35,6 +35,7 @@ from .util.exceptions import (
35
35
  from csvpath.managers.files.lines_and_headers_cacher import LinesAndHeadersCacher
36
36
  from .matching.util.exceptions import MatchException
37
37
  from .managers.errors.error_collector import ErrorCollector
38
+ from csvpath.util.date_util import DateUtility as daut
38
39
 
39
40
 
40
41
  class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
@@ -53,6 +54,13 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
53
54
  skip_blank_lines=True,
54
55
  print_default=True,
55
56
  # config=None,
57
+ #
58
+ # atm, we don't use this error manager reference. instead we make
59
+ # an error manager for this csvpath, and if we have a csvpaths we
60
+ # add its error_manager as an internal listener for error events
61
+ #
62
+ # we can refactor this reference away
63
+ #
56
64
  error_manager=None,
57
65
  project_context="no_project_context",
58
66
  project="no_project_name",
@@ -262,7 +270,8 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
262
270
  # _function_times_value collects the time a function spends doing its to_value()
263
271
  #
264
272
  self._function_times_value = {}
265
- self._created_at = datetime.now(timezone.utc)
273
+ self._created_at = daut.now()
274
+ # self._created_at = datetime.now(timezone.utc)
266
275
  self._run_started_at = None
267
276
  self._collecting = False
268
277
  #
@@ -271,6 +280,7 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
271
280
  # by collect(), but is the lines not returned by collect().
272
281
  #
273
282
  self._unmatched = None
283
+ self._cacher = None
274
284
 
275
285
  @property
276
286
  def logger(self):
@@ -307,6 +317,17 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
307
317
  self.config.save_config()
308
318
  self.config.reload()
309
319
 
320
+ @property
321
+ def cacher(self) -> LinesAndHeadersCacher:
322
+ if self._cacher is None:
323
+ if self.csvpaths:
324
+ self._cacher = self.csvpaths.file_manager.lines_and_headers_cacher
325
+ else:
326
+ self._cacher = LinesAndHeadersCacher(
327
+ self, line_counter=LineCounter(self)
328
+ )
329
+ return self._cacher
330
+
310
331
  @property
311
332
  def data_from_preceding(self) -> bool:
312
333
  """@private"""
@@ -1315,7 +1336,8 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
1315
1336
  last_line = self.matcher.line
1316
1337
  self.line_monitor.next_line(last_line=last_line, data=line)
1317
1338
  if self.line_monitor.physical_line_number == 0:
1318
- self._run_started_at = datetime.now(timezone.utc)
1339
+ self._run_started_at = daut.now()
1340
+ # self._run_started_at = datetime.now(timezone.utc)
1319
1341
 
1320
1342
  def _consider_line(self, line): # pylint: disable=R0912, R0911
1321
1343
  """@private"""
@@ -1492,13 +1514,11 @@ class CsvPath(ErrorCollector, Printer): # pylint: disable=R0902, R0904
1492
1514
  self.logger.debug(
1493
1515
  f"Using cache to get total lines and headers for {filename}"
1494
1516
  )
1495
- lahc = (
1496
- self.csvpaths.file_manager.lines_and_headers_cacher
1497
- if self.csvpaths
1498
- else LinesAndHeadersCacher(self, line_counter=LineCounter(self))
1499
- )
1500
- self.line_monitor = lahc.get_new_line_monitor(filename)
1501
- self.headers = lahc.get_original_headers(filename)
1517
+ cacher = self.cacher
1518
+ print(f"cassff: {cacher}: {filename}")
1519
+ self.line_monitor = cacher.get_new_line_monitor(filename)
1520
+ self.headers = cacher.get_original_headers(filename)
1521
+ print(f"cassff: {self.line_monitor}: {self.headers}")
1502
1522
  else:
1503
1523
  self.logger.debug(
1504
1524
  f"Not using cache to get total lines and headers for {filename}"
@@ -422,6 +422,9 @@ Cache: {cache}
422
422
  #
423
423
  # config=None,
424
424
  print_default=self.print_default,
425
+ #
426
+ # we don't use this error manager reference atm.
427
+ #
425
428
  error_manager=self.error_manager,
426
429
  project=self.project,
427
430
  project_context=self.project_context,
@@ -545,7 +548,6 @@ Cache: {cache}
545
548
  box = Box()
546
549
  ds = []
547
550
  for k, v in box.get_my_stuff().items():
548
- self.logger.debug(f"csvpaths.wrapping up: {k}: {v}")
549
551
  if hasattr(v, "close"):
550
552
  ds.append(k)
551
553
  for _ in ds:
@@ -1,3 +1,6 @@
1
+
2
+ import weakref
3
+
1
4
  from typing import Any, List
2
5
  from csvpath.util.config import OnError
3
6
  from csvpath.modes.error_mode import ErrorMode
@@ -22,32 +25,42 @@ class ErrorCommunications:
22
25
  """
23
26
 
24
27
  def __init__(self, csvpath=None, csvpaths=None) -> None:
25
- self._csvpath = csvpath
26
- self._csvpaths = csvpaths
27
28
  if not csvpath and not csvpaths:
28
29
  raise ValueError("Must have either a CsvPath or CsvPaths instance")
30
+ if csvpath and csvpaths:
31
+ raise ValueError("Cannot have both a csvpath and csvpaths handling the same errors")
32
+ self._csvpath = None if csvpath is None else weakref.ref(csvpath)
33
+ self._csvpaths = None if csvpaths is None else weakref.ref(csvpaths)
34
+
35
+ @property
36
+ def csvpath(self):
37
+ return None if self._csvpath is None else self._csvpath()
38
+
39
+ @property
40
+ def csvpaths(self):
41
+ return None if self._csvpaths is None else self._csvpaths()
29
42
 
30
43
  def do_i_quiet(self) -> bool:
31
44
  return self.in_policy(OnError.QUIET.value)
32
45
 
33
46
  def do_i_raise(self) -> bool:
34
- if self._csvpath and self._csvpath.raise_validation_errors is not None:
35
- return self._csvpath.raise_validation_errors
47
+ if self.csvpath and self.csvpath.raise_validation_errors is not None:
48
+ return self.csvpath.raise_validation_errors
36
49
  return self.in_policy(OnError.RAISE.value)
37
50
 
38
51
  def do_i_collect(self) -> bool:
39
- if self._csvpath and self._csvpath.collect_validation_errors is not None:
40
- return self._csvpath.collect_validation_errors
52
+ if self.csvpath and self.csvpath.collect_validation_errors is not None:
53
+ return self.csvpath.collect_validation_errors
41
54
  return self.in_policy(OnError.COLLECT.value)
42
55
 
43
56
  def do_i_print(self) -> bool:
44
- if self._csvpath and self._csvpath.print_validation_errors is not None:
45
- return self._csvpath.print_validation_errors
57
+ if self.csvpath and self.csvpath.print_validation_errors is not None:
58
+ return self.csvpath.print_validation_errors
46
59
  return self.in_policy(OnError.PRINT.value)
47
60
 
48
61
  def do_i_print_expanded(self) -> bool:
49
62
  ret = False
50
- c = self._csvpath if self._csvpath is not None else self._csvpaths
63
+ c = self.csvpath if self.csvpath is not None else self.csvpaths
51
64
  if c is not None:
52
65
  ret = (
53
66
  c.config.get(
@@ -55,7 +68,7 @@ class ErrorCommunications:
55
68
  )
56
69
  == ErrorMode.FULL
57
70
  )
58
- if self._csvpath and self._csvpath.error_mode == ErrorMode.FULL:
71
+ if self.csvpath and self.csvpath.error_mode == ErrorMode.FULL:
59
72
  ret = True
60
73
  return ret
61
74
 
@@ -63,8 +76,8 @@ class ErrorCommunications:
63
76
  #
64
77
  # stop is having problems. copying raise, which works fine.
65
78
  #
66
- if self._csvpath and self._csvpath.stop_on_validation_errors is not None:
67
- return self._csvpath.stop_on_validation_errors
79
+ if self.csvpath and self.csvpath.stop_on_validation_errors is not None:
80
+ return self.csvpath.stop_on_validation_errors
68
81
  return self.in_policy(OnError.STOP.value)
69
82
  """
70
83
  mode = None
@@ -83,11 +96,11 @@ class ErrorCommunications:
83
96
  """
84
97
 
85
98
  def do_i_fail(self) -> bool:
86
- if self._csvpath and self._csvpath.fail_on_validation_errors is not None:
87
- return self._csvpath.fail_on_validation_errors
99
+ if self.csvpath and self.csvpath.fail_on_validation_errors is not None:
100
+ return self.csvpath.fail_on_validation_errors
88
101
  return self.in_policy(OnError.FAIL.value)
89
102
 
90
103
  def in_policy(self, v) -> bool:
91
- if self._csvpath:
92
- return v in self._csvpath.config.csvpath_errors_policy
93
- return v in self._csvpaths.config.csvpaths_errors_policy
104
+ if self.csvpath:
105
+ return v in self.csvpath.config.csvpath_errors_policy
106
+ return v in self.csvpaths.config.csvpaths_errors_policy