csvpath 0.0.458__tar.gz → 0.0.459__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 (193) hide show
  1. {csvpath-0.0.458 → csvpath-0.0.459}/PKG-INFO +1 -1
  2. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/print/printf.py +12 -9
  3. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/productions/qualified.py +2 -2
  4. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/util/printer.py +19 -0
  5. {csvpath-0.0.458 → csvpath-0.0.459}/pyproject.toml +1 -1
  6. {csvpath-0.0.458 → csvpath-0.0.459}/LICENSE +0 -0
  7. {csvpath-0.0.458 → csvpath-0.0.459}/README.md +0 -0
  8. {csvpath-0.0.458 → csvpath-0.0.459}/config/config.ini +0 -0
  9. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/__init__.py +0 -0
  10. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/csvpath.py +0 -0
  11. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/csvpaths.py +0 -0
  12. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/managers/__init__.py +0 -0
  13. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/managers/csvpath_result.py +0 -0
  14. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/managers/csvpaths_manager.py +0 -0
  15. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/managers/files_manager.py +0 -0
  16. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/managers/results_manager.py +0 -0
  17. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/__init__.py +0 -0
  18. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/__init__.py +0 -0
  19. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/boolean/all.py +0 -0
  20. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/boolean/andf.py +0 -0
  21. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/boolean/any.py +0 -0
  22. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/boolean/between.py +0 -0
  23. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/boolean/empty.py +0 -0
  24. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/boolean/exists.py +0 -0
  25. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/boolean/inf.py +0 -0
  26. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/boolean/no.py +0 -0
  27. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/boolean/notf.py +0 -0
  28. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/boolean/orf.py +0 -0
  29. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/boolean/yes.py +0 -0
  30. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/counting/count.py +0 -0
  31. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/counting/count_headers.py +0 -0
  32. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/counting/count_lines.py +0 -0
  33. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/counting/count_scans.py +0 -0
  34. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/counting/every.py +0 -0
  35. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/counting/increment.py +0 -0
  36. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/counting/tally.py +0 -0
  37. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/counting/total_lines.py +0 -0
  38. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/function.py +0 -0
  39. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/function_factory.py +0 -0
  40. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/function_focus.py +0 -0
  41. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/headers/end.py +0 -0
  42. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/headers/header_name.py +0 -0
  43. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/headers/header_names_mismatch.py +0 -0
  44. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/headers/headers.py +0 -0
  45. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/headers/mismatch.py +0 -0
  46. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/headers/reset_headers.py +0 -0
  47. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/lines/advance.py +0 -0
  48. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/lines/after_blank.py +0 -0
  49. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/lines/dups.py +0 -0
  50. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/lines/first.py +0 -0
  51. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/lines/first_line.py +0 -0
  52. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/lines/last.py +0 -0
  53. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/lines/stop.py +0 -0
  54. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/math/above.py +0 -0
  55. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/math/add.py +0 -0
  56. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/math/divide.py +0 -0
  57. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/math/equals.py +0 -0
  58. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/math/mod.py +0 -0
  59. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/math/multiply.py +0 -0
  60. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/math/round.py +0 -0
  61. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/math/subtract.py +0 -0
  62. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/math/sum.py +0 -0
  63. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/misc/collect.py +0 -0
  64. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/misc/datef.py +0 -0
  65. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/misc/get.py +0 -0
  66. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/misc/importf.py +0 -0
  67. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/misc/intf.py +0 -0
  68. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/misc/nonef.py +0 -0
  69. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/misc/now.py +0 -0
  70. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/misc/pushpop.py +0 -0
  71. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/misc/random.py +0 -0
  72. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/misc/regex.py +0 -0
  73. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/misc/replace.py +0 -0
  74. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/misc/track.py +0 -0
  75. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/misc/variables.py +0 -0
  76. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/print/jinjaf.py +0 -0
  77. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/print/print_line.py +0 -0
  78. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/print/print_queue.py +0 -0
  79. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/stats/correlate.py +0 -0
  80. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/stats/minf.py +0 -0
  81. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/stats/percent.py +0 -0
  82. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/stats/percent_unique.py +0 -0
  83. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/stats/stdev.py +0 -0
  84. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/strings/concat.py +0 -0
  85. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/strings/length.py +0 -0
  86. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/strings/lower.py +0 -0
  87. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/strings/metaphone.py +0 -0
  88. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/strings/starts_with.py +0 -0
  89. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/strings/strip.py +0 -0
  90. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/strings/substring.py +0 -0
  91. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/strings/upper.py +0 -0
  92. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/validation.py +0 -0
  93. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/validity/fail.py +0 -0
  94. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/functions/validity/failed.py +0 -0
  95. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/lark_parser.py +0 -0
  96. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/lark_transformer.py +0 -0
  97. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/matcher.py +0 -0
  98. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/productions/__init__.py +0 -0
  99. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/productions/equality.py +0 -0
  100. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/productions/expression.py +0 -0
  101. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/productions/header.py +0 -0
  102. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/productions/matchable.py +0 -0
  103. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/productions/reference.py +0 -0
  104. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/productions/term.py +0 -0
  105. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/productions/variable.py +0 -0
  106. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/util/exceptions.py +0 -0
  107. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/util/expression_encoder.py +0 -0
  108. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/util/expression_utility.py +0 -0
  109. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/util/lark_print_parser.py +0 -0
  110. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/matching/util/print_parser.py +0 -0
  111. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/scanning/__init__.py +0 -0
  112. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/scanning/exceptions.py +0 -0
  113. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/scanning/parser.out +0 -0
  114. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/scanning/parsetab.py +0 -0
  115. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/scanning/scanner.py +0 -0
  116. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/scanning/scanning_lexer.py +0 -0
  117. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/util/config.py +0 -0
  118. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/util/config_exception.py +0 -0
  119. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/util/error.py +0 -0
  120. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/util/exceptions.py +0 -0
  121. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/util/last_line_stats.py +0 -0
  122. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/util/line_monitor.py +0 -0
  123. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/util/log_utility.py +0 -0
  124. {csvpath-0.0.458 → csvpath-0.0.459}/csvpath/util/metadata_parser.py +0 -0
  125. {csvpath-0.0.458 → csvpath-0.0.459}/docs/asbool.md +0 -0
  126. {csvpath-0.0.458 → csvpath-0.0.459}/docs/assignment.md +0 -0
  127. {csvpath-0.0.458 → csvpath-0.0.459}/docs/config.md +0 -0
  128. {csvpath-0.0.458 → csvpath-0.0.459}/docs/examples.md +0 -0
  129. {csvpath-0.0.458 → csvpath-0.0.459}/docs/files.md +0 -0
  130. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/above.md +0 -0
  131. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/advance.md +0 -0
  132. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/after_blank.md +0 -0
  133. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/all.md +0 -0
  134. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/andor.md +0 -0
  135. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/any.md +0 -0
  136. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/average.md +0 -0
  137. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/between.md +0 -0
  138. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/collect.md +0 -0
  139. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/correlate.md +0 -0
  140. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/count.md +0 -0
  141. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/count_headers.md +0 -0
  142. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/date.md +0 -0
  143. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/empty.md +0 -0
  144. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/end.md +0 -0
  145. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/every.md +0 -0
  146. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/fail.md +0 -0
  147. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/first.md +0 -0
  148. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/get.md +0 -0
  149. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/has_dups.md +0 -0
  150. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/header.md +0 -0
  151. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/header_name.md +0 -0
  152. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/header_names_mismatch.md +0 -0
  153. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/implementing_functions.md +0 -0
  154. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/import.md +0 -0
  155. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/in.md +0 -0
  156. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/increment.md +0 -0
  157. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/jinja.md +0 -0
  158. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/last.md +0 -0
  159. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/line_number.md +0 -0
  160. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/max.md +0 -0
  161. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/metaphone.md +0 -0
  162. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/mismatch.md +0 -0
  163. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/no.md +0 -0
  164. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/not.md +0 -0
  165. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/now.md +0 -0
  166. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/percent_unique.md +0 -0
  167. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/pop.md +0 -0
  168. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/print.md +0 -0
  169. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/print_line.md +0 -0
  170. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/print_queue.md +0 -0
  171. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/regex.md +0 -0
  172. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/replace.md +0 -0
  173. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/reset_headers.md +0 -0
  174. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/stdev.md +0 -0
  175. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/stop.md +0 -0
  176. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/string_functions.md +0 -0
  177. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/subtract.md +0 -0
  178. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/sum.md +0 -0
  179. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/tally.md +0 -0
  180. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/total_lines.md +0 -0
  181. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/track.md +0 -0
  182. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/variables.md +0 -0
  183. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions/variables_and_headers.md +0 -0
  184. {csvpath-0.0.458 → csvpath-0.0.459}/docs/functions.md +0 -0
  185. {csvpath-0.0.458 → csvpath-0.0.459}/docs/grammar.md +0 -0
  186. {csvpath-0.0.458 → csvpath-0.0.459}/docs/headers.md +0 -0
  187. {csvpath-0.0.458 → csvpath-0.0.459}/docs/images/logo-wordmark-white-on-black-trimmed-padded.png +0 -0
  188. {csvpath-0.0.458 → csvpath-0.0.459}/docs/images/logo-wordmark-white-trimmed.png +0 -0
  189. {csvpath-0.0.458 → csvpath-0.0.459}/docs/paths.md +0 -0
  190. {csvpath-0.0.458 → csvpath-0.0.459}/docs/qualifiers.md +0 -0
  191. {csvpath-0.0.458 → csvpath-0.0.459}/docs/references.md +0 -0
  192. {csvpath-0.0.458 → csvpath-0.0.459}/docs/terms.md +0 -0
  193. {csvpath-0.0.458 → csvpath-0.0.459}/docs/variables.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: csvpath
3
- Version: 0.0.458
3
+ Version: 0.0.459
4
4
  Summary: A declarative language for data extraction and validation of CSV files
5
5
  Author: David Kershaw
6
6
  Author-email: dk107dk@hotmail.com
@@ -30,13 +30,16 @@ class Print(SideEffect):
30
30
  if isinstance(self.children[0], Equality):
31
31
  right = self.children[0].right
32
32
  if self.do_onchange():
33
- v = self.to_value(skip=skip)
34
- #
35
- # we intentionally add a single char suffix
36
- #
37
- if v[len(v) - 1] == " ":
38
- v = v[0 : len(v) - 1]
39
- self.matcher.csvpath.print(f"{v}")
40
- if right:
41
- right.matches(skip=skip)
33
+ if self.do_once():
34
+ v = self.to_value(skip=skip)
35
+ #
36
+ # we intentionally add a single char suffix
37
+ #
38
+ if v[len(v) - 1] == " ":
39
+ v = v[0 : len(v) - 1]
40
+ self.matcher.csvpath.print(f"{v}")
41
+ if right:
42
+ right.matches(skip=skip)
43
+ self._set_has_happened()
44
+
42
45
  self.match = True
@@ -327,7 +327,7 @@ class Qualified:
327
327
  #
328
328
  # supports ONCE
329
329
  #
330
- _id = self.get_id() # pylint: disable=E1101
330
+ _id = f"{self.get_id()}_once" # pylint: disable=E1101
331
331
  v = self.matcher.get_variable(_id, set_if_none=True) # pylint: disable=E1101
332
332
  return v
333
333
 
@@ -335,6 +335,6 @@ class Qualified:
335
335
  #
336
336
  # supports ONCE
337
337
  #
338
- _id = self.get_id() # pylint: disable=E1101
338
+ _id = f"{self.get_id()}_once" # pylint: disable=E1101
339
339
  self.matcher.set_variable(_id, value=False) # pylint: disable=E1101
340
340
  # re: E1101: inheritance structure. good point, but not the time to fix it.
@@ -54,3 +54,22 @@ class StdOutPrinter(Printer):
54
54
  else:
55
55
  print(string)
56
56
  self._last_line = string
57
+
58
+
59
+ class TestPrinter(Printer):
60
+ def __init__(self):
61
+ self.lines = []
62
+
63
+ @property
64
+ def lines_printed(self) -> int:
65
+ return len(self.lines)
66
+
67
+ @property
68
+ def last_line(self) -> str:
69
+ return self.lines[len(self.lines) - 1] if len(self.lines) > 0 else ""
70
+
71
+ def print(self, string: str) -> None:
72
+ self.print_to(None, string)
73
+
74
+ def print_to(self, name: str, string: str) -> None:
75
+ self.lines.append(string)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "csvpath"
3
- version = "0.0.458"
3
+ version = "0.0.459"
4
4
  description = "A declarative language for data extraction and validation of CSV files"
5
5
  authors = ["David Kershaw <dk107dk@hotmail.com>"]
6
6
  readme = "README.md"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes