python-jack-knife 0.6.7__tar.gz → 0.6.8__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.
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/PKG-INFO +1 -1
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/stdout.py +31 -7
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/version.py +1 -1
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/python_jack_knife.egg-info/PKG-INFO +1 -1
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/LICENSE +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/README.md +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/pyproject.toml +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/setup.cfg +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/__init__.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/common.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/components.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/integrations/opensearch_client.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/integrations/opensearch_index_sink.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/integrations/opensearch_query_pipe.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/integrations/postgres_pipe.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/integrations/snowflake_pipe.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/log.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/main.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/man_page.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/parser.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/__init__.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/denorm.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/factory.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/filter.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/head.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/join.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/let_reduce.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/map.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/move_field.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/progress_pipe.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/query_pipe.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/remove_field.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/sample.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/select.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/sort.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/tail.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/user_pipe_factory.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/pipes/where.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/progress.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/registry.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/__init__.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/create_sink.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/csv_sink.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/devnull.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/dir_sink.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/expect.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/factory.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/format_sink.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/graph.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/graph_bar_line.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/graph_cumulative.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/graph_hist.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/graph_scatter.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/json_sink.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/s3_sink.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/s3_stream.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/sinks.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/tsv_sink.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sinks/user_sink_factory.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/__init__.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/configs_source.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/csv_source.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/dir_source.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/factory.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/favorite_source.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/format_source.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/inline_source.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/json_source.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/lazy_file.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/lazy_file_local.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/lazy_file_s3.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/macro_source.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/npy_source.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/parquet_source.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/s3_source.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/source_list.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/sql_source.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/tsv_source.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/sources/user_source_factory.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/usage.py +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/python_jack_knife.egg-info/SOURCES.txt +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/python_jack_knife.egg-info/dependency_links.txt +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/python_jack_knife.egg-info/entry_points.txt +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/python_jack_knife.egg-info/requires.txt +0 -0
- {python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/python_jack_knife.egg-info/top_level.txt +0 -0
|
@@ -3,10 +3,36 @@
|
|
|
3
3
|
|
|
4
4
|
import sys
|
|
5
5
|
import yaml
|
|
6
|
+
from yaml.representer import SafeRepresenter
|
|
6
7
|
from pjk.components import Sink, Source
|
|
7
8
|
from pjk.usage import ParsedToken, Usage
|
|
8
9
|
from pjk.common import pager_stdout
|
|
9
10
|
|
|
11
|
+
# --- NEW: minimal custom dumper that block-quotes only "tricky" strings ---
|
|
12
|
+
class _PjkDumper(yaml.SafeDumper):
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
def _needs_block(s: str) -> bool:
|
|
16
|
+
# Strings that are annoying to copy if quoted/escaped:
|
|
17
|
+
# - contain YAML structural chars or JSON-ish payloads
|
|
18
|
+
# - contain colon-space (key-like), braces, brackets, quotes, or backslashes
|
|
19
|
+
# - multi-line strings
|
|
20
|
+
return (
|
|
21
|
+
"\n" in s
|
|
22
|
+
or ": " in s
|
|
23
|
+
or any(c in s for c in "{}[]'\"\\")
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
def _represent_str(dumper, data: str):
|
|
27
|
+
if _needs_block(data):
|
|
28
|
+
# Literal block scalar preserves content exactly, no escaping
|
|
29
|
+
return dumper.represent_scalar("tag:yaml.org,2002:str", data, style="|")
|
|
30
|
+
# Default behavior for ordinary strings
|
|
31
|
+
return SafeRepresenter.represent_str(dumper, data)
|
|
32
|
+
|
|
33
|
+
_PjkDumper.add_representer(str, _represent_str)
|
|
34
|
+
# --------------------------------------------------------------------------
|
|
35
|
+
|
|
10
36
|
class StdoutSink(Sink):
|
|
11
37
|
@classmethod
|
|
12
38
|
def usage(cls):
|
|
@@ -21,25 +47,23 @@ class StdoutSink(Sink):
|
|
|
21
47
|
|
|
22
48
|
def __init__(self, ptok: ParsedToken, usage: Usage):
|
|
23
49
|
super().__init__(ptok, usage)
|
|
24
|
-
|
|
25
|
-
# NOTE: self.use_pager is hardcoded for now; override via constructor if needed
|
|
26
50
|
self.use_pager = True if usage.get_param('less') == None else usage.get_param('less') == 'true'
|
|
27
51
|
|
|
28
52
|
def process(self) -> None:
|
|
29
|
-
# Route all stdout into `less` while dumping
|
|
30
53
|
try:
|
|
31
54
|
with pager_stdout(self.use_pager):
|
|
32
55
|
for record in self.input:
|
|
33
56
|
try:
|
|
34
57
|
yaml.dump(
|
|
35
58
|
record,
|
|
36
|
-
sys.stdout,
|
|
59
|
+
sys.stdout,
|
|
60
|
+
Dumper=_PjkDumper, # <-- use the custom dumper
|
|
37
61
|
sort_keys=False,
|
|
38
62
|
explicit_start=True,
|
|
39
|
-
|
|
63
|
+
allow_unicode=True,
|
|
64
|
+
width=10**9
|
|
40
65
|
)
|
|
41
66
|
except BrokenPipeError:
|
|
42
|
-
break
|
|
67
|
+
break
|
|
43
68
|
except BrokenPipeError:
|
|
44
|
-
# Swallow if pager closed early
|
|
45
69
|
pass
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/integrations/opensearch_client.py
RENAMED
|
File without changes
|
{python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/integrations/opensearch_index_sink.py
RENAMED
|
File without changes
|
{python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/pjk/integrations/opensearch_query_pipe.py
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|
{python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/python_jack_knife.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/python_jack_knife.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/python_jack_knife.egg-info/requires.txt
RENAMED
|
File without changes
|
{python_jack_knife-0.6.7 → python_jack_knife-0.6.8}/src/python_jack_knife.egg-info/top_level.txt
RENAMED
|
File without changes
|