python-jack-knife 0.6.9__tar.gz → 0.6.11__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 (85) hide show
  1. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/PKG-INFO +1 -1
  2. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/join.py +23 -3
  3. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/stdout.py +0 -9
  4. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/json_source.py +6 -8
  5. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/version.py +1 -1
  6. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/python_jack_knife.egg-info/PKG-INFO +1 -1
  7. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/LICENSE +0 -0
  8. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/README.md +0 -0
  9. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/pyproject.toml +0 -0
  10. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/setup.cfg +0 -0
  11. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/__init__.py +0 -0
  12. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/common.py +0 -0
  13. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/components.py +0 -0
  14. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/integrations/opensearch_client.py +0 -0
  15. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/integrations/opensearch_index_sink.py +0 -0
  16. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/integrations/opensearch_query_pipe.py +0 -0
  17. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/integrations/postgres_pipe.py +0 -0
  18. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/integrations/snowflake_pipe.py +0 -0
  19. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/log.py +0 -0
  20. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/main.py +0 -0
  21. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/man_page.py +0 -0
  22. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/parser.py +0 -0
  23. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/__init__.py +0 -0
  24. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/denorm.py +0 -0
  25. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/factory.py +0 -0
  26. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/filter.py +0 -0
  27. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/head.py +0 -0
  28. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/let_reduce.py +0 -0
  29. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/map.py +0 -0
  30. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/move_field.py +0 -0
  31. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/progress_pipe.py +0 -0
  32. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/query_pipe.py +0 -0
  33. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/remove_field.py +0 -0
  34. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/sample.py +0 -0
  35. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/select.py +0 -0
  36. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/sort.py +0 -0
  37. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/tail.py +0 -0
  38. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/user_pipe_factory.py +0 -0
  39. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/pipes/where.py +0 -0
  40. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/progress.py +0 -0
  41. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/registry.py +0 -0
  42. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/__init__.py +0 -0
  43. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/create_sink.py +0 -0
  44. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/csv_sink.py +0 -0
  45. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/devnull.py +0 -0
  46. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/dir_sink.py +0 -0
  47. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/expect.py +0 -0
  48. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/factory.py +0 -0
  49. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/format_sink.py +0 -0
  50. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/graph.py +0 -0
  51. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/graph_bar_line.py +0 -0
  52. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/graph_cumulative.py +0 -0
  53. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/graph_hist.py +0 -0
  54. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/graph_scatter.py +0 -0
  55. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/json_sink.py +0 -0
  56. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/s3_sink.py +0 -0
  57. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/s3_stream.py +0 -0
  58. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/sinks.py +0 -0
  59. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/tsv_sink.py +0 -0
  60. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sinks/user_sink_factory.py +0 -0
  61. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/__init__.py +0 -0
  62. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/configs_source.py +0 -0
  63. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/csv_source.py +0 -0
  64. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/dir_source.py +0 -0
  65. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/factory.py +0 -0
  66. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/favorite_source.py +0 -0
  67. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/format_source.py +0 -0
  68. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/inline_source.py +0 -0
  69. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/lazy_file.py +0 -0
  70. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/lazy_file_local.py +0 -0
  71. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/lazy_file_s3.py +0 -0
  72. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/macro_source.py +0 -0
  73. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/npy_source.py +0 -0
  74. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/parquet_source.py +0 -0
  75. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/s3_source.py +0 -0
  76. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/source_list.py +0 -0
  77. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/sql_source.py +0 -0
  78. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/tsv_source.py +0 -0
  79. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/sources/user_source_factory.py +0 -0
  80. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/pjk/usage.py +0 -0
  81. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/python_jack_knife.egg-info/SOURCES.txt +0 -0
  82. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/python_jack_knife.egg-info/dependency_links.txt +0 -0
  83. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/python_jack_knife.egg-info/entry_points.txt +0 -0
  84. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/python_jack_knife.egg-info/requires.txt +0 -0
  85. {python_jack_knife-0.6.9 → python_jack_knife-0.6.11}/src/python_jack_knife.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-jack-knife
3
- Version: 0.6.9
3
+ Version: 0.6.11
4
4
  Summary: Python Jack Knife – a command line data processor
5
5
  Author-email: Mike Schultz <mike.schultz@gmail.com>
6
6
  License:
@@ -14,13 +14,13 @@ class JoinPipe(Pipe):
14
14
  def usage(cls):
15
15
  usage = Usage(
16
16
  name='join',
17
- desc="Join records against a keyed source on shared fields",
17
+ desc="Join records against a keyed source or concatentate sources",
18
18
  component_class=cls
19
19
  )
20
20
  usage.def_arg(
21
21
  name='mode',
22
- usage="'left', 'inner', or 'outer' join behavior",
23
- valid_values={'left', 'inner', 'outer'}
22
+ usage="'left', 'inner', 'outer' or 'concat' behavior.",
23
+ valid_values={'left', 'inner', 'outer', 'concat'}
24
24
  )
25
25
  usage.def_syntax("pjk <left_source> <map_source> [mapby|groupby]:<key> join:<mode> <sink>")
26
26
 
@@ -49,6 +49,14 @@ class JoinPipe(Pipe):
49
49
  "join:outer"
50
50
  ],
51
51
  expect="[{color:'blue', price:50}, {color:'green'}, {color:'red', price: 20}]")
52
+
53
+ usage.def_example(expr_tokens=
54
+ [
55
+ "[{color:'blue'},{color:'green'}]",
56
+ "[{color:'blue', price:50}, {color:'red', price:20}]",
57
+ "join:concat"
58
+ ],
59
+ expect="[{color:'blue'}, {color:'green'}, {color: 'blue', price:50}, {color:'red', price: 20}]")
52
60
  return usage
53
61
 
54
62
  def __init__(self, ptok: ParsedToken, usage: Usage):
@@ -68,7 +76,19 @@ class JoinPipe(Pipe):
68
76
  self._pending_right = None
69
77
  self._check_right = False
70
78
 
79
+ def concat_iter(self):
80
+ for rec in self.left:
81
+ self.recs_out.increment()
82
+ yield rec
83
+ for rec in self.right:
84
+ self.recs_out.increment()
85
+ yield rec
86
+
71
87
  def __iter__(self):
88
+ if self.mode == 'concat':
89
+ yield from self.concat_iter()
90
+ return
91
+
72
92
  if not isinstance(self.right, KeyedSource):
73
93
  raise UsageError("right source must be a KeyedSource")
74
94
 
@@ -29,16 +29,7 @@ class StdoutSink(Sink):
29
29
  with pager_stdout(self.use_pager):
30
30
  for record in self.input:
31
31
  try:
32
- # if it's a simple single-key map whose value is a string, print raw
33
- # kind of hack to make 'pjk macros -' cut-n-pastable
34
- if isinstance(record, dict) and len(record) == 1:
35
- (k, v), = record.items()
36
- if isinstance(v, str):
37
- sys.stdout.write(f"{k}: {v}\n---\n")
38
- continue
39
-
40
32
  # everything else -> normal YAML
41
- print('foo')
42
33
  yaml.dump(
43
34
  record,
44
35
  sys.stdout,
@@ -33,11 +33,9 @@ class JsonSource(FormatSource):
33
33
  try:
34
34
  yield json.loads(line)
35
35
  except json.JSONDecodeError as e:
36
- break
37
-
38
- # attempt to decode the file as a whole
39
- try:
40
- yield from self.as_whole_file()
41
-
42
- except:
43
- logger.error(f'cannot decode {self.lazy_file.path}')
36
+ try:
37
+ yield from self.as_whole_file()
38
+ return
39
+ except:
40
+ logger.error(f'cannot decode {self.lazy_file.path}')
41
+ break
@@ -1,4 +1,4 @@
1
1
  # SPDX-License-Identifier: Apache-2.0
2
2
  # Copyright 2024 Mike Schultz
3
3
 
4
- __version__ = "0.6.9"
4
+ __version__ = "0.6.11"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-jack-knife
3
- Version: 0.6.9
3
+ Version: 0.6.11
4
4
  Summary: Python Jack Knife – a command line data processor
5
5
  Author-email: Mike Schultz <mike.schultz@gmail.com>
6
6
  License: