From c6893e1bd5283d982a7ecd6f84bdfdd0054ce7a7 Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Wed, 19 May 2021 16:13:05 -0700 Subject: [PATCH 01/13] add LibraryNotInstalled exception --- jc/exceptions.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/jc/exceptions.py b/jc/exceptions.py index f7dd2571..32218db6 100644 --- a/jc/exceptions.py +++ b/jc/exceptions.py @@ -3,3 +3,7 @@ class ParseError(Exception): pass + + +class LibraryNotInstalled(Exception): + pass From 5eef7bd769f8ffb03ba396833d1b33484041a99f Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Wed, 19 May 2021 16:14:26 -0700 Subject: [PATCH 02/13] use LibraryNotInstalled exception instead of exiting via sys.exit --- jc/parsers/xml.py | 16 ++++++++-------- jc/parsers/yaml.py | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/jc/parsers/xml.py b/jc/parsers/xml.py index e662f7d4..6db0b590 100644 --- a/jc/parsers/xml.py +++ b/jc/parsers/xml.py @@ -65,19 +65,13 @@ Examples: ... } """ -import sys import jc.utils -# check if xml library is installed and fail gracefully if it is not -try: - import xmltodict -except Exception: - jc.utils.error_message('The xmltodict library is not installed.') - sys.exit(1) +from jc.exceptions import LibraryNotInstalled class info(): """Provides parser metadata (version, author, etc.)""" - version = '1.4' + version = '1.5' description = 'XML file parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -121,6 +115,12 @@ def parse(data, raw=False, quiet=False): Dictionary. Raw or processed structured data. """ + # check if xml library is installed and fail gracefully if it is not + try: + import xmltodict + except Exception: + raise LibraryNotInstalled('The xmltodict library is not installed.') + if not quiet: jc.utils.compatibility(__name__, info.compatible) diff --git a/jc/parsers/yaml.py b/jc/parsers/yaml.py index f25294e0..bfcbe85a 100644 --- a/jc/parsers/yaml.py +++ b/jc/parsers/yaml.py @@ -79,19 +79,13 @@ Examples: } ] """ -import sys import jc.utils -# check if yaml library is installed and fail gracefully if it is not -try: - from ruamel.yaml import YAML -except Exception: - jc.utils.error_message('The ruamel.yaml library is not installed.') - sys.exit(1) +from jc.exceptions import LibraryNotInstalled class info(): """Provides parser metadata (version, author, etc.)""" - version = '1.4' + version = '1.5' description = 'YAML file parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -135,6 +129,12 @@ def parse(data, raw=False, quiet=False): List of Dictionaries representing the YAML documents. """ + # check if yaml library is installed and fail gracefully if it is not + try: + from ruamel.yaml import YAML + except Exception: + raise LibraryNotInstalled('The ruamel.yaml library is not installed.') + if not quiet: jc.utils.compatibility(__name__, info.compatible) From 72a37b928924c3edde3a4edb952f98c94aa05f0b Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Wed, 19 May 2021 16:23:34 -0700 Subject: [PATCH 03/13] version bump --- CHANGELOG | 3 +++ jc/__init__.py | 2 +- setup.py | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 9f30bcf8..0fb92fef 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,8 @@ jc changelog +20210520 v1.15.5 +- Fix issue where help and about information would not display if a 3rd party parser library was missing. (e.g. xmltodict) + 20210517 v1.15.4 - Update ping parser to support error responses in OSX and BSD - Update ping parser to be more resilient against parsing errors for unknown error types diff --git a/jc/__init__.py b/jc/__init__.py index 0c8ac89a..6e6938ff 100644 --- a/jc/__init__.py +++ b/jc/__init__.py @@ -86,4 +86,4 @@ Module Example: """ name = 'jc' -__version__ = '1.15.4' +__version__ = '1.15.5' diff --git a/setup.py b/setup.py index 6dd19f30..325f8141 100755 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ with open('README.md', 'r') as f: setuptools.setup( name='jc', - version='1.15.4', + version='1.15.5', author='Kelly Brazil', author_email='kellyjonbrazil@gmail.com', description='Converts the output of popular command-line tools and file-types to JSON.', From 0924d822a30c8806f65574c010561cd6f7c8e181 Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Thu, 20 May 2021 15:36:27 -0700 Subject: [PATCH 04/13] add windows example --- templates/readme_template | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/templates/readme_template b/templates/readme_template index d1f6cfa6..5311c344 100644 --- a/templates/readme_template +++ b/templates/readme_template @@ -194,11 +194,16 @@ If a UTC timezone can be detected in the text of the command output, the timesta ## Compatibility Some parsers like `dig`, `xml`, `csv`, etc. will work on any platform. Other parsers that convert platform-specific output will generate a warning message if they are run on an unsupported platform. To see all parser information, including compatibility, run `jc -ap`. -You may still use a parser on an unsupported platform - for example, you may want to parse a file with linux `lsof` output on an macOS laptop. In that case you can suppress the warning message with the `-q` cli option or the `quiet=True` function parameter in `parse()`: +You may still use a parser on an unsupported platform - for example, you may want to parse a file with linux `lsof` output on an macOS or Windows laptop. In that case you can suppress the warning message with the `-q` cli option or the `quiet=True` function parameter in `parse()`: +macOS: ```bash cat lsof.out | jc --lsof -q ``` +or Windows: +```bash +type lsof.out | jc --lsof -q +``` Tested on: - Centos 7.7 @@ -210,6 +215,8 @@ Tested on: - NixOS - FreeBSD12 - Windows 10 +- Windows 2016 Server +- Windows 2019 Server ## Contributions Feel free to add/improve code or parsers! You can use the [`jc/parsers/foo.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/foo.py) parser as a template and submit your parser with a pull request. From 6002af0dca334c0affaff3e9acdca416238c7d82 Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Thu, 20 May 2021 15:46:31 -0700 Subject: [PATCH 05/13] add more error message detail to the user for ParseError and LibraryNotFound exceptions --- jc/cli.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/jc/cli.py b/jc/cli.py index e11b09b3..14f7b983 100644 --- a/jc/cli.py +++ b/jc/cli.py @@ -16,6 +16,7 @@ import jc import jc.appdirs as appdirs import jc.utils import jc.tracebackplus +from jc.exceptions import LibraryNotInstalled, ParseError # make pygments import optional try: @@ -603,6 +604,16 @@ def main(): try: result = parser.parse(data, raw=raw, quiet=quiet) + except (ParseError, LibraryNotInstalled) as e: + if debug: + raise + else: + jc.utils.error_message( + f'Parser issue with {parser_name}:\n' + f' {e}\n' + ' For details use the -d or -dd option. Use "jc -h" for help.') + sys.exit(combined_exit_code(magic_exit_code, JC_ERROR_EXIT)) + except Exception: if debug: raise From 1b8d654444ff8c8b8171c7ac63e2736447a36c09 Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Thu, 20 May 2021 15:49:18 -0700 Subject: [PATCH 06/13] add error message info --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 0fb92fef..70233f3c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ jc changelog 20210520 v1.15.5 - Fix issue where help and about information would not display if a 3rd party parser library was missing. (e.g. xmltodict) +- Add more error message detail to the user when encountering ParseError and LibraryNotFound exceptions 20210517 v1.15.4 - Update ping parser to support error responses in OSX and BSD From d6f4ed9ab55fe9b7c2766fb437172af62a1d5c87 Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Fri, 21 May 2021 09:46:34 -0700 Subject: [PATCH 07/13] add long-form UTC test --- tests/test_utils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_utils.py b/tests/test_utils.py index bc1ea123..45aa738d 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -18,6 +18,8 @@ class MyTests(unittest.TestCase): '3/22/2021, 1:15:51 PM (UTC-0600)': {'string': '3/22/2021, 1:15:51 PM (UTC-0600)', 'format': 1700, 'naive': 1616444151, 'utc': None}, # Windows english format with UTC tz (found in systeminfo cli output) '3/22/2021, 1:15:51 PM (UTC)': {'string': '3/22/2021, 1:15:51 PM (UTC)', 'format': 1705, 'naive': 1616444151, 'utc': 1616418951}, + # Windows english format with UTC tz in long-form (found in systeminfo cli output) + '3/22/2021, 1:15:51 PM (Coordinated Universal Time)': {'string': '3/22/2021, 1:15:51 PM (Coordinated Universal Time)', 'format': 1705, 'naive': 1616444151, 'utc': 1616418951}, # Windows english format with UTC tz (found in systeminfo cli output) '3/22/2021, 1:15:51 PM (UTC+0000)': {'string': '3/22/2021, 1:15:51 PM (UTC+0000)', 'format': 1710, 'naive': 1616444151, 'utc': 1616418951}, # en_US.UTF-8 local format (found in upower cli output) From 14f3d442cb86250b8f2cdfd7977938634b8abd6d Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Fri, 21 May 2021 09:46:51 -0700 Subject: [PATCH 08/13] formatting --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 70233f3c..19c37f84 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,7 +2,7 @@ jc changelog 20210520 v1.15.5 - Fix issue where help and about information would not display if a 3rd party parser library was missing. (e.g. xmltodict) -- Add more error message detail to the user when encountering ParseError and LibraryNotFound exceptions +- Add more error message detail when encountering ParseError and LibraryNotFound exceptions 20210517 v1.15.4 - Update ping parser to support error responses in OSX and BSD From 473a6431425fc24a4cc83939ff592e0d49535b9c Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Fri, 21 May 2021 10:16:08 -0700 Subject: [PATCH 09/13] add windows msi info --- README.md | 11 +++++++++-- jc/man/jc.1.gz | Bin 2664 -> 2676 bytes man/jc.1.gz | Bin 2664 -> 2676 bytes templates/readme_template | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4bac69df..48cde3c6 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ Use Cases: - [Nornir command output parsing](https://blog.kellybrazil.com/2020/12/09/parsing-command-output-in-nornir-with-jc/) ## Installation -There are several ways to get `jc`. You can install via `pip`; other OS package repositories like `apt-get`, `dnf`, `zypper`, `pacman`, `nix-env`, `guix`, `brew`, or `portsnap`; via DEB/RPM packaged binaries; or by downloading the correct binary for your architecture and running it anywhere on your filesystem. +There are several ways to get `jc`. You can install via `pip`; other OS package repositories like `apt-get`, `dnf`, `zypper`, `pacman`, `nix-env`, `guix`, `brew`, or `portsnap`; via DEB, RPM, and MSI packaged binaries for linux and Windows; or by downloading the correct binary for your architecture and running it anywhere on your filesystem. ### Pip (macOS, linux, unix, Windows) ```bash @@ -266,11 +266,16 @@ If a UTC timezone can be detected in the text of the command output, the timesta ## Compatibility Some parsers like `dig`, `xml`, `csv`, etc. will work on any platform. Other parsers that convert platform-specific output will generate a warning message if they are run on an unsupported platform. To see all parser information, including compatibility, run `jc -ap`. -You may still use a parser on an unsupported platform - for example, you may want to parse a file with linux `lsof` output on an macOS laptop. In that case you can suppress the warning message with the `-q` cli option or the `quiet=True` function parameter in `parse()`: +You may still use a parser on an unsupported platform - for example, you may want to parse a file with linux `lsof` output on an macOS or Windows laptop. In that case you can suppress the warning message with the `-q` cli option or the `quiet=True` function parameter in `parse()`: +macOS: ```bash cat lsof.out | jc --lsof -q ``` +or Windows: +```bash +type lsof.out | jc --lsof -q +``` Tested on: - Centos 7.7 @@ -282,6 +287,8 @@ Tested on: - NixOS - FreeBSD12 - Windows 10 +- Windows 2016 Server +- Windows 2019 Server ## Contributions Feel free to add/improve code or parsers! You can use the [`jc/parsers/foo.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/foo.py) parser as a template and submit your parser with a pull request. diff --git a/jc/man/jc.1.gz b/jc/man/jc.1.gz index 967b30c97df1189b7f881a9149625a5fab41786c..474805543777a4be65f7475a1663d5564957da06 100644 GIT binary patch literal 2676 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 literal 2664 zcmV-u3YYaCiwFpYilSfw|7v3{F#w%eZExE+68^4VK?Dn20@!j=Tz7H7^>D6}ZM~b= zLF{&0v_(Tnw9P~kRg$u!#r^o38B(%rBv#N5iHFiNFB}brGh{e_&+cP(#$KJiI_sal z?w|d}&cd_T;Xm2YAG7I%jjqN_m9{7?E3HhWt&W0l_MT0K*Ovise(f{F$%Pb#*_Eil zYQZv|SHy3XN)6+A!WJ?WeOnd6kdWEu$@FG6o&}@n_4ROa!TyKF+zfALm$&T8^kzPu zPG;YNKxq)Rlrb|^Zu#SRfSQ~4%yS1M^Wt(gx*gLiME#U;YylbtH&SR;aBXD1WHM(a z*0QiBL?d||3!qsc3z5J}6uZzWV_z30vhQ%ra%aVVX+ElB&#Oa4Qhz!{y%uTJBkm(|&XM;Hi+Ro>!Ab*$MHR{} zM4sRrz;2L-EM5-|BOK*xp{+r z+3`eKao)V(spJN{%7GzQmYK3B6skK3-8b`JG6>%WH{foe&3O>s&H{Klzrm;Af_|UJ zg#;G_cSzhd(hK6)gG!AW9NN*WKYkHU-|TXk4lZ3dye@FKL_p*i9ld3!L;MhDzue_*;n_yo6$X{Azu%q&vqs+0?BnxV5{MmAfW+ac zBnt;zbim}&;pDOls69}305h40SS8-jdep&GJS_XE;{cNN(+<4zb5b6LiJW|T2fv4b z=y5_K(FM(yLVGZh9dIqYWFR`ArjEUVuWPCt-0g;djXKy{|5WDFc*n%9#h9zRnzQ8{j zi*F2H9Ok}PkyD1mVdw*`us=mL_{h^zJU@w)8@Hbz;S(~F(P8I3z_=q{VpGU+J1LRXh|?nNiZsY z5ccIl%EePs%3NC7w_hYk<_p!5g2TgXR%R}e2Bp!1Nah24(#?aFS?%%GnBm7QJ505j zLsP`9+jN_eUyRN8*B40Hu7vHdEr%X-2r3sY+Tr&_<^!(Ji=uHg^1+zl1NH@|RL0b` zed~~ubMJeiSf6*`3$^hTnIpU4&9`;rVYu@_M}FGG4i$I6R?ai
kbQ3QRuzIr~r zRNR3+5BE{f`&|a%4MBZB>ifYKKSy33K^$OfdQ8o=>zPm5Fxo;A5tUGsQ=(=RKM{`~ z*f9YRK@C5&z>zXy3)m4vLA?@b;n-FT_b9aYyZ_uI!xxK*ip#8S@^{2giJ7Tf#Vf6{ z`b46Qpqdz(c5AVBm$`icLmTOjQVNT+f_6*`W7vl49Ckd@Mp9g9zF{o~wck_u12Z>x z8iA3nGcwvW=9izwb2ge@T+V`FUaSK~0Y-yApaMjXO8kqDVj_5PC|79Dl7u4!tIxSv+yTaV)}Rh+sUE@Kq|5 z;w$7m=`|K%8NIKmId4%*%`?!6D(IuR2AL-bleRu3K~W8F$mUR*gOe*n0Ob#e0GkLa zG$dsK=Ft4nLx42yNQg8#9kpV3eIJKGFoM{I4pS3mq0&@s&?523vjVmT?}KeEejd<5 z*v`6{*_+yXy&bFD&tb*FMgUek@s=Iu%70mCXr7aQ_EYlDNWOClL`*IGfS%{(Q3ukq znodu5b=}85F`I5Jdozk4u(y$jafEs?i@8-a`8d9vPOdK}^Wd{8>1@puB9@Da#U+F( zHk&D~skP)3383VU(f85xYI-|ERU%(Yt#V8$Y|XXA4hrM(Wk_cE108CX+GTBKU?axG zn!qB_7-4H{ehkiKHxOMufT(Mfy!rQos4(SyC!7D%!|_Jxq#5UB7C~C9hfaeZ1_3N> zE$aDlEzWTYQ3~mnd=3LGlA2sctz*MpqrKR(GZF(s53cBq=sTs>FUVOu+Oe! zUOo<>Sbn5H`Q`oe`f?BwBX%%a4EA&cz?AWLI&0ytWTd&S2E%O)$7b#j^C|YfWDcE? zaRRQUqv6%?=H_BJAAbFMAJ=~^7V_8CQ(nOnZzw(UglowCm0f{i=-A8D9WfX%c9#m6^jfv}Uf}rDv?^U z4?kWG=QFH^$Q*Hwp2D>l378dBR$zv4i_y9CYB+g^7>YviOvxMP`sVGTXss=*)4(&pkM~hy2wwJKKH5s~S7BJ>#nvS^6l2Ast)MJ(tN}RsNAQRTr z{qXwc3TpdVouX#`eid`?FA$hZw%KgLrBX|%H(-)3_F6YDtm#-N30~7J?XDEhfS@NN zI=~tFq7ej`TOZ@@F(oi6??1s-!f>-D4c|_y?E;BAuR0$Q~ z%G$!54+cwEjAeum2fJw46MS}<-h93tzk5H2QoX2Xhh@j{343*V_OCu(nzOc2$f`0H Wxq&>zuAz1EqyGa=U6BK39{>OZco)h5 diff --git a/man/jc.1.gz b/man/jc.1.gz index 967b30c97df1189b7f881a9149625a5fab41786c..474805543777a4be65f7475a1663d5564957da06 100644 GIT binary patch literal 2676 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 literal 2664 zcmV-u3YYaCiwFpYilSfw|7v3{F#w%eZExE+68^4VK?Dn20@!j=Tz7H7^>D6}ZM~b= zLF{&0v_(Tnw9P~kRg$u!#r^o38B(%rBv#N5iHFiNFB}brGh{e_&+cP(#$KJiI_sal z?w|d}&cd_T;Xm2YAG7I%jjqN_m9{7?E3HhWt&W0l_MT0K*Ovise(f{F$%Pb#*_Eil zYQZv|SHy3XN)6+A!WJ?WeOnd6kdWEu$@FG6o&}@n_4ROa!TyKF+zfALm$&T8^kzPu zPG;YNKxq)Rlrb|^Zu#SRfSQ~4%yS1M^Wt(gx*gLiME#U;YylbtH&SR;aBXD1WHM(a z*0QiBL?d||3!qsc3z5J}6uZzWV_z30vhQ%ra%aVVX+ElB&#Oa4Qhz!{y%uTJBkm(|&XM;Hi+Ro>!Ab*$MHR{} zM4sRrz;2L-EM5-|BOK*xp{+r z+3`eKao)V(spJN{%7GzQmYK3B6skK3-8b`JG6>%WH{foe&3O>s&H{Klzrm;Af_|UJ zg#;G_cSzhd(hK6)gG!AW9NN*WKYkHU-|TXk4lZ3dye@FKL_p*i9ld3!L;MhDzue_*;n_yo6$X{Azu%q&vqs+0?BnxV5{MmAfW+ac zBnt;zbim}&;pDOls69}305h40SS8-jdep&GJS_XE;{cNN(+<4zb5b6LiJW|T2fv4b z=y5_K(FM(yLVGZh9dIqYWFR`ArjEUVuWPCt-0g;djXKy{|5WDFc*n%9#h9zRnzQ8{j zi*F2H9Ok}PkyD1mVdw*`us=mL_{h^zJU@w)8@Hbz;S(~F(P8I3z_=q{VpGU+J1LRXh|?nNiZsY z5ccIl%EePs%3NC7w_hYk<_p!5g2TgXR%R}e2Bp!1Nah24(#?aFS?%%GnBm7QJ505j zLsP`9+jN_eUyRN8*B40Hu7vHdEr%X-2r3sY+Tr&_<^!(Ji=uHg^1+zl1NH@|RL0b` zed~~ubMJeiSf6*`3$^hTnIpU4&9`;rVYu@_M}FGG4i$I6R?ai
kbQ3QRuzIr~r zRNR3+5BE{f`&|a%4MBZB>ifYKKSy33K^$OfdQ8o=>zPm5Fxo;A5tUGsQ=(=RKM{`~ z*f9YRK@C5&z>zXy3)m4vLA?@b;n-FT_b9aYyZ_uI!xxK*ip#8S@^{2giJ7Tf#Vf6{ z`b46Qpqdz(c5AVBm$`icLmTOjQVNT+f_6*`W7vl49Ckd@Mp9g9zF{o~wck_u12Z>x z8iA3nGcwvW=9izwb2ge@T+V`FUaSK~0Y-yApaMjXO8kqDVj_5PC|79Dl7u4!tIxSv+yTaV)}Rh+sUE@Kq|5 z;w$7m=`|K%8NIKmId4%*%`?!6D(IuR2AL-bleRu3K~W8F$mUR*gOe*n0Ob#e0GkLa zG$dsK=Ft4nLx42yNQg8#9kpV3eIJKGFoM{I4pS3mq0&@s&?523vjVmT?}KeEejd<5 z*v`6{*_+yXy&bFD&tb*FMgUek@s=Iu%70mCXr7aQ_EYlDNWOClL`*IGfS%{(Q3ukq znodu5b=}85F`I5Jdozk4u(y$jafEs?i@8-a`8d9vPOdK}^Wd{8>1@puB9@Da#U+F( zHk&D~skP)3383VU(f85xYI-|ERU%(Yt#V8$Y|XXA4hrM(Wk_cE108CX+GTBKU?axG zn!qB_7-4H{ehkiKHxOMufT(Mfy!rQos4(SyC!7D%!|_Jxq#5UB7C~C9hfaeZ1_3N> zE$aDlEzWTYQ3~mnd=3LGlA2sctz*MpqrKR(GZF(s53cBq=sTs>FUVOu+Oe! zUOo<>Sbn5H`Q`oe`f?BwBX%%a4EA&cz?AWLI&0ytWTd&S2E%O)$7b#j^C|YfWDcE? zaRRQUqv6%?=H_BJAAbFMAJ=~^7V_8CQ(nOnZzw(UglowCm0f{i=-A8D9WfX%c9#m6^jfv}Uf}rDv?^U z4?kWG=QFH^$Q*Hwp2D>l378dBR$zv4i_y9CYB+g^7>YviOvxMP`sVGTXss=*)4(&pkM~hy2wwJKKH5s~S7BJ>#nvS^6l2Ast)MJ(tN}RsNAQRTr z{qXwc3TpdVouX#`eid`?FA$hZw%KgLrBX|%H(-)3_F6YDtm#-N30~7J?XDEhfS@NN zI=~tFq7ej`TOZ@@F(oi6??1s-!f>-D4c|_y?E;BAuR0$Q~ z%G$!54+cwEjAeum2fJw46MS}<-h93tzk5H2QoX2Xhh@j{343*V_OCu(nzOc2$f`0H Wxq&>zuAz1EqyGa=U6BK39{>OZco)h5 diff --git a/templates/readme_template b/templates/readme_template index 5311c344..cdda98e0 100644 --- a/templates/readme_template +++ b/templates/readme_template @@ -83,7 +83,7 @@ Use Cases: - [Nornir command output parsing](https://blog.kellybrazil.com/2020/12/09/parsing-command-output-in-nornir-with-jc/) ## Installation -There are several ways to get `jc`. You can install via `pip`; other OS package repositories like `apt-get`, `dnf`, `zypper`, `pacman`, `nix-env`, `guix`, `brew`, or `portsnap`; via DEB/RPM packaged binaries; or by downloading the correct binary for your architecture and running it anywhere on your filesystem. +There are several ways to get `jc`. You can install via `pip`; other OS package repositories like `apt-get`, `dnf`, `zypper`, `pacman`, `nix-env`, `guix`, `brew`, or `portsnap`; via DEB, RPM, and MSI packaged binaries for linux and Windows; or by downloading the correct binary for your architecture and running it anywhere on your filesystem. ### Pip (macOS, linux, unix, Windows) ```bash From e7983bc0b29abaca2147038dfad018cba1e67cdf Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Fri, 21 May 2021 10:16:19 -0700 Subject: [PATCH 10/13] version bump --- docs/parsers/xml.md | 2 +- docs/parsers/yaml.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/parsers/xml.md b/docs/parsers/xml.md index 9393291a..6be25da5 100644 --- a/docs/parsers/xml.md +++ b/docs/parsers/xml.md @@ -95,4 +95,4 @@ Returns: ## Parser Information Compatibility: linux, darwin, cygwin, win32, aix, freebsd -Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com) +Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com) diff --git a/docs/parsers/yaml.md b/docs/parsers/yaml.md index 36a6d1f0..d389c3ec 100644 --- a/docs/parsers/yaml.md +++ b/docs/parsers/yaml.md @@ -109,4 +109,4 @@ Returns: ## Parser Information Compatibility: linux, darwin, cygwin, win32, aix, freebsd -Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com) +Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com) From f9b952885aa7f2b450786a08c3879d9e358886da Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Fri, 21 May 2021 10:21:21 -0700 Subject: [PATCH 11/13] add python 3.9.5 packaged info --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 19c37f84..d32ded51 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,7 @@ jc changelog 20210520 v1.15.5 - Fix issue where help and about information would not display if a 3rd party parser library was missing. (e.g. xmltodict) - Add more error message detail when encountering ParseError and LibraryNotFound exceptions +- RPM, DEB, MSI, and binaries now packaged with python 3.9.5 20210517 v1.15.4 - Update ping parser to support error responses in OSX and BSD From 5db71b05cb28691bbbaa5d668bcd4a4ac7e68b85 Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Tue, 25 May 2021 09:47:24 -0700 Subject: [PATCH 12/13] add en_US.UTF-8 to LANG info --- README.md | 2 +- jc/man/jc.1.gz | Bin 2676 -> 2691 bytes man/jc.1.gz | Bin 2676 -> 2691 bytes templates/manpage_template | 2 +- templates/readme_template | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 48cde3c6..5c5cc4eb 100644 --- a/README.md +++ b/README.md @@ -248,7 +248,7 @@ Local plugin filenames must be valid python module names, therefore must consist ### Caveats **Locale:** -For best results set the `LANG` locale environment variable to `C`. For example, either by setting directly on the command-line: +For best results set the `LANG` locale environment variable to `C` or `en_US.UTF-8`. For example, either by setting directly on the command-line: ``` $ LANG=C date | jc --date ``` diff --git a/jc/man/jc.1.gz b/jc/man/jc.1.gz index 474805543777a4be65f7475a1663d5564957da06..70d341c854f9aff54d5ed7507394da85a49cb85d 100644 GIT binary patch literal 2691 zcmV-}3Vih+iwFocC9Plr|7v3{F#w%eZExE+68`RAK@pAspo_cUdN|ifTkj@z z5Ifx#ZPCyYZ8MQXm89ZmaX-iTL!OvWQIxEKmk`l9rr^g7kPdew<0AH}GDdENoeZ(V^nJ=e+!zf?8Y z%ta>iiuk=TsS`3!#9XJU>#IUJ5;FNR8edI@lg?m#dD$PGiT|N7SN-eB`L*~uzM2ll zqsjM9$5`>|QZ97-O1LWb^6|8Ty4MI1_&X%^?0hn~9?~mB{gQcN4my=|T3Jy@>vX;l zIu|asy6`SSGi4krphckzmB33BJGUki-{$Wo)3f2|+x&{8vP#fErUU7tx#DHgWU6Lm|0c1zS=HfvxZX3WU+hN0d8`#8JhHg5wjR@yHy=4`#ZI}+Rj z@(w1Sp4XBk%0z0C^9Z9icz490o4@dXX{cp_w;wzQ+?4b$sE3rkKpc{m#G(Oy6#q>AmW2Q6Y( zT?Z!=bF4(79>iDpr(^Y9;EVm-cV@=Qkk}8srycgEs(PPfTB_$KkxIws2@)Y8BRShI zKV?Hw*9L=AAs~Tj17{`)V4&K-W*)GnC7EWX%z2JP?FZ+|!v<$~pj#Mx@srU&h;GYq ziFL^;*+e*x_k?%>$&BDgg!Mu4_ZB_6=%zX>Eer$>+F9H(q#|U&K?@5qMW20S*(d#H^4*^%X*z+;TWGmdOtii#f7czCzyKO#N z+HQMFXh?8RNpL2}w$)17V z{lLeJBIxtw#q;T4QY(+Mf_BU*=fq0d98NsfL{eN? zxe^TrHQ!VD12cDcS%HymGcuYR^YhQcsThpU&L^FIUWvK%G8M{NV;%K_I!EWPG<5k3 zl`9L$0ye2okJ=0Dn(+Dqw459tgPJ2@{8HJKc6_a{L6Lx&Lg+Ewf&8^pIrN%%rSZi5 z$AO9#5rXl`B2=kRiZ7A(@MvujmeISK*4Hs+VPyt7Q3Wj;H^?$cg!c6%3W{3uMq&!3 zIXJmO1W@7r2(XFr%0g0BU=Gb6Jp@R{H%6q9b<~RC^<5lwIs=Gp=rAo|<|a+e3N2EP zGArO{2tL@<;-?+j2%A~2XZE)C-qDuT&F8RV;UEAjo_H$`auZe-8k*i6OzwP zfrzPv@6q$zJnBGtR@3qEwywMQ7iQD0WoJe+2<%NHVjQ7f%woKYMxTb)EW-tyaBvXgW=&v|Sd6d-Ye=~W+!ET}W3 zNVJ7w)7a`&m|<63=)8RFL9zTuf%4nO@#T3hB1Y_Btm^IP=m1kDJH-_F?InC(=Uhuly1e zL&sjGe9_<{aT5+hc2*GDn;R1q7`L@RiQgBX@CX0W5epkv!=Pe^v$F#Sl~Q3NlhlU) zT{+_=h}H&^rNo4r8Ws{38CMcAg5I^65cEmH^49?Z$9RUpF9aN{AJ_zktW1lgghZgM zj``yYxWRh9M3y3j>IRGuO&d6d4AdePPQ-P@hnHY5e{;a3*QmvJ0w<&{{uuQ6?1OkG z!NF(i*Aq&+fj0zs|I>MYI>Bm)%u%Q4Dcp-Q1+#+63e0f48QG;5{m}=+P!y_XQZ9Yg z86b=|y2^jtOro3V`|dxf#M#>HN~2HlV-BeCn0R?c=*+zN4W^sIfdrcaBU7LqZwKfB z#h=zTH|+RL4Wy|@jBzTXIFB@K4PSU{nPb&hYjCx6<_$_nCOn=(zwx)pl_Muju!0TY zC6@95%#>+drgXBX0%}}=4GJuMRzQfUG;vsA@%N_9=Q`L0d5Q(B+=Wxbfn>)K{-g9U zhw*%_A43@yhZ0I5T0g+Kc%UQrKa*H+1^02L@xl7K4CH2dvr`%y4vRPN4DcU9=nWyF z#m#iEkq|zgVdWQl&Uh%st4Ci;uNx$uB!9`<%&)F_*AnFlvjsAcC!d;dm<$}awZGqV5r9(!ZI09A9_- zgoC>h@2vb=r{drqM|UQl(fGfMOzIR>LYcVqzHq0#-U2pbIm3s&Z8RJdA!UrOzFZGK xe4Il4UQ~4Kii7x2ygokpR~J9Ei>6XYwK`V0gXASHp`Qw){{sVmz$cs^006frFn0g| literal 2676 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 diff --git a/man/jc.1.gz b/man/jc.1.gz index 474805543777a4be65f7475a1663d5564957da06..70d341c854f9aff54d5ed7507394da85a49cb85d 100644 GIT binary patch literal 2691 zcmV-}3Vih+iwFocC9Plr|7v3{F#w%eZExE+68`RAK@pAspo_cUdN|ifTkj@z z5Ifx#ZPCyYZ8MQXm89ZmaX-iTL!OvWQIxEKmk`l9rr^g7kPdew<0AH}GDdENoeZ(V^nJ=e+!zf?8Y z%ta>iiuk=TsS`3!#9XJU>#IUJ5;FNR8edI@lg?m#dD$PGiT|N7SN-eB`L*~uzM2ll zqsjM9$5`>|QZ97-O1LWb^6|8Ty4MI1_&X%^?0hn~9?~mB{gQcN4my=|T3Jy@>vX;l zIu|asy6`SSGi4krphckzmB33BJGUki-{$Wo)3f2|+x&{8vP#fErUU7tx#DHgWU6Lm|0c1zS=HfvxZX3WU+hN0d8`#8JhHg5wjR@yHy=4`#ZI}+Rj z@(w1Sp4XBk%0z0C^9Z9icz490o4@dXX{cp_w;wzQ+?4b$sE3rkKpc{m#G(Oy6#q>AmW2Q6Y( zT?Z!=bF4(79>iDpr(^Y9;EVm-cV@=Qkk}8srycgEs(PPfTB_$KkxIws2@)Y8BRShI zKV?Hw*9L=AAs~Tj17{`)V4&K-W*)GnC7EWX%z2JP?FZ+|!v<$~pj#Mx@srU&h;GYq ziFL^;*+e*x_k?%>$&BDgg!Mu4_ZB_6=%zX>Eer$>+F9H(q#|U&K?@5qMW20S*(d#H^4*^%X*z+;TWGmdOtii#f7czCzyKO#N z+HQMFXh?8RNpL2}w$)17V z{lLeJBIxtw#q;T4QY(+Mf_BU*=fq0d98NsfL{eN? zxe^TrHQ!VD12cDcS%HymGcuYR^YhQcsThpU&L^FIUWvK%G8M{NV;%K_I!EWPG<5k3 zl`9L$0ye2okJ=0Dn(+Dqw459tgPJ2@{8HJKc6_a{L6Lx&Lg+Ewf&8^pIrN%%rSZi5 z$AO9#5rXl`B2=kRiZ7A(@MvujmeISK*4Hs+VPyt7Q3Wj;H^?$cg!c6%3W{3uMq&!3 zIXJmO1W@7r2(XFr%0g0BU=Gb6Jp@R{H%6q9b<~RC^<5lwIs=Gp=rAo|<|a+e3N2EP zGArO{2tL@<;-?+j2%A~2XZE)C-qDuT&F8RV;UEAjo_H$`auZe-8k*i6OzwP zfrzPv@6q$zJnBGtR@3qEwywMQ7iQD0WoJe+2<%NHVjQ7f%woKYMxTb)EW-tyaBvXgW=&v|Sd6d-Ye=~W+!ET}W3 zNVJ7w)7a`&m|<63=)8RFL9zTuf%4nO@#T3hB1Y_Btm^IP=m1kDJH-_F?InC(=Uhuly1e zL&sjGe9_<{aT5+hc2*GDn;R1q7`L@RiQgBX@CX0W5epkv!=Pe^v$F#Sl~Q3NlhlU) zT{+_=h}H&^rNo4r8Ws{38CMcAg5I^65cEmH^49?Z$9RUpF9aN{AJ_zktW1lgghZgM zj``yYxWRh9M3y3j>IRGuO&d6d4AdePPQ-P@hnHY5e{;a3*QmvJ0w<&{{uuQ6?1OkG z!NF(i*Aq&+fj0zs|I>MYI>Bm)%u%Q4Dcp-Q1+#+63e0f48QG;5{m}=+P!y_XQZ9Yg z86b=|y2^jtOro3V`|dxf#M#>HN~2HlV-BeCn0R?c=*+zN4W^sIfdrcaBU7LqZwKfB z#h=zTH|+RL4Wy|@jBzTXIFB@K4PSU{nPb&hYjCx6<_$_nCOn=(zwx)pl_Muju!0TY zC6@95%#>+drgXBX0%}}=4GJuMRzQfUG;vsA@%N_9=Q`L0d5Q(B+=Wxbfn>)K{-g9U zhw*%_A43@yhZ0I5T0g+Kc%UQrKa*H+1^02L@xl7K4CH2dvr`%y4vRPN4DcU9=nWyF z#m#iEkq|zgVdWQl&Uh%st4Ci;uNx$uB!9`<%&)F_*AnFlvjsAcC!d;dm<$}awZGqV5r9(!ZI09A9_- zgoC>h@2vb=r{drqM|UQl(fGfMOzIR>LYcVqzHq0#-U2pbIm3s&Z8RJdA!UrOzFZGK xe4Il4UQ~4Kii7x2ygokpR~J9Ei>6XYwK`V0gXASHp`Qw){{sVmz$cs^006frFn0g| literal 2676 zcmV-)3XAn0iwFpf>Zf1=|7v3{F#w%eZExE+68^4VK@pMwpbKnpJ)G-gx7khX zAa=Vg+M=N(+GZk&DoMrB;(q+i3uVhjVg>z>cql#d!r^c@L-l9x#a$v!#OveNC%xl0 zz1Jt=q<`|J|3sL{K`d*BOSLYFMe(edw>A6-;_@!#V zW-fAB)Wq+N$()cyD&{&!)sHZ zC1@8sd(ftGA~88wmj25%rg{@3PCm>)WM2$3uWSL_4=SsVhRB9VoNm8cvT7S|}d zR7Hw&0J}jRvIIRijB!*vDCh-z zzBm{guTFREN)33nFkZN-ERBWVrOGl9S32_=RD#bNQ8LrgDR;;&v^nB#s@ZwrBvOnHIf^7xDDmHka$*vL)kfxgQv3 z_c|pgQTxHky{mEp6Lm|0c1zS=HfvxZVrFD|!_e%2eVn~&o417*EA5vUbGBLD9SQCM zc}LTa&ud8`v`7IG`=^r58948N=>_BTq6=sP&~^ZGovOs7!O&*Z!BpNadKq&7DSBB4 zp8cFw`(dgepWednejs|BkVtevi-ocQjARGgsvsGN4ybElZ=ifKpyBQF!LYEVDmQQ% z?t{CfOwFprzz_DYETvl#9*O<7BO+|MK<>cB!EK(t!5w%68xb%>fgSzB9Z89XY&#Ee zxgK?>*UlSTGYiul490o4@dXX{cp_w;uC$})Ez_Gp2TMUY`C@#rM|%m8kSVse8FYwU z^&Ff~%&`)wdJtdWpH9>_fiL!R-}5JEEer$>x>?*Zq#|U&K?e&*LD>-nkOIR2 zNmK{8%zHn$AOcbVy&u1uKReT>W20S%(d#Ja4gpuY#Pc!9WGCFKyv4zz7c%v-yKO#N z+Fo}`Xi0ESNpL2)SN`Qfs`*n=szQ4@w_hYk7jx5+g2Vl6UgsQ1gUZ=Ktcw9Y>E^-8 ztnqkjEO2qF4pY6A&@)NThwge5HsgBy>kFi8cEV=ZmO~FZ1XXj6cKCgf`GD)mvRu0w z`Cu&Yf%pPcrW0!FzIDhcWbi#vq9;4>rCEiFjL9zedTp894`&~A(VYx|0C>B$bRC#j; zuqB2{%-j?vSz41f7Zz;<)x^-#dylQXF8mW1I!J$1T6vrmv}0B|CsxuHaN@Z(lH$tB zm1sGr{hrDnn7PBt3XF7{lhNFmpMScTiP7Zjd>RdlTFj-FnNZdm>!=^p1v-DFq03*W zLRm-_ut|k_)LvlMgx4RS<>dGn)Eo)pm&&fR<7Y3Hs#Niyttl|2hzDskc2F3PFGC71 z@9EC73Kwv~!9k3hHHA%LF~T0O`EfXx?Lg#w08zJA^7h~Ns>YP}ooxQk5sp{Jrt5K0 zotqji>2Sv#gAGV`N5W6ezc=Kh}zh|Pj)Qfhi!XSOYNBlLI=jFn#(Gq0y_E~ zFQs|sA7NT?YMqG!Ech*Cfz6trAxEw09R)j%Xd-yS-d@2V?C6=_P2i3`OlOm;aAQA> zMjWe|N#GO+CtaCU3%uLSWlh(~pq;MEh2#W1xJwx6_=wCf*}>}?gOMe@8bXl;b*2=l zwoq&uTfYi3?1@WVRF4BFmLDlletAE+Iv@0j5jz;G20J<;V9I4OnYQqkI=0f*gW;xz z6H~s#e2V>VT|j5#Sit3EG`t*MU!M(U!>?cOlIE|)LjJmZ$}3{Z4W4X!Ufgu{@X6@(7v#`H^!+eVi~fhJj37@0uI&>Y=T2pX5~^sB2ZQ* z{P6|cU_D5b-SwUq5W;ouA?9$8O_z%QT6sl)ZE`8P+ zQ8lx*ua!pk;ddL5=rPB#@#wdr{kf%=!Px`*0E1AV%C{q&tm3a|o6B_kd>W`&PAwkohdY&5t=I`al4BoiLbptbnN6v~l5rdX_oND@o=0A|W8sWLi5R0-v* zz+MDaIWHlaRF*m{rufs+=F1!ee344>&H-WC81hUh}I8q z1Rm%<{EsEpR>6IoRD7_$sra~W-fW82-oiQ!JOliP5M>t-yyC-bw2=_LlwpyVcusC8 z#;Zr)NN;)}o+N*?+sv;iZ`Ts#3KIh|kSCv-aF`67t>l>grsySS2lSyB8?LI?!b8&G z>;~3iSHk+%2H|Gn>V9~2eF?Swv`JCZ@c9*U?=KLT3$a?Q`U_(gP;bB_Irds#Uc|a% zp(IFk`i_*qfS@NNGT-mdv`#xRmW{^dyAL&rFq7ej+55>&^cS4bwRmUcKROc!_c*#U zMNH%WE^?_eR0$Q~()-e#4h9R@j8%*e2is^k6GC>FTz|f~_~ZQyO7*g)6IL7~hvN0| i$!|UUsxI0}A*<>{6%O*0xPsOxjQ$V%mU-!i9{>Qn^dBMs diff --git a/templates/manpage_template b/templates/manpage_template index ecdc814e..2f30969b 100644 --- a/templates/manpage_template +++ b/templates/manpage_template @@ -112,7 +112,7 @@ Local plugin filenames must be valid python module names, therefore must consist Note: The application data directory follows the XDG Base Directory Specification .SH CAVEATS -\fBLocale:\fP For best results set the \fBLANG\fP locale environment variable to \fBC\fP. For example, either by setting directly on the command-line: +\fBLocale:\fP For best results set the \fBLANG\fP locale environment variable to \fBC\fP or \fBen_US.UTF-8\fP. For example, either by setting directly on the command-line: \fB$ LANG=C date | jc --date\fP diff --git a/templates/readme_template b/templates/readme_template index cdda98e0..4a54f11b 100644 --- a/templates/readme_template +++ b/templates/readme_template @@ -176,7 +176,7 @@ Local plugin filenames must be valid python module names, therefore must consist ### Caveats **Locale:** -For best results set the `LANG` locale environment variable to `C`. For example, either by setting directly on the command-line: +For best results set the `LANG` locale environment variable to `C` or `en_US.UTF-8`. For example, either by setting directly on the command-line: ``` $ LANG=C date | jc --date ``` From ff7ab0a1ed7f468d0e84eb3bf0636f53913c490d Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Thu, 27 May 2021 16:58:14 -0700 Subject: [PATCH 13/13] doc updates for v1.15.5 --- CHANGELOG | 1 - jc/man/jc.1.gz | Bin 2691 -> 2691 bytes man/jc.1.gz | Bin 2691 -> 2691 bytes 3 files changed, 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index d32ded51..19c37f84 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,7 +3,6 @@ jc changelog 20210520 v1.15.5 - Fix issue where help and about information would not display if a 3rd party parser library was missing. (e.g. xmltodict) - Add more error message detail when encountering ParseError and LibraryNotFound exceptions -- RPM, DEB, MSI, and binaries now packaged with python 3.9.5 20210517 v1.15.4 - Update ping parser to support error responses in OSX and BSD diff --git a/jc/man/jc.1.gz b/jc/man/jc.1.gz index 70d341c854f9aff54d5ed7507394da85a49cb85d..b7b4c49b52c9e5b6e76a82af2d13765b4ba5cd74 100644 GIT binary patch literal 2691 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 literal 2691 zcmV-}3Vih+iwFocC9Plr|7v3{F#w%eZExE+68`RAK@pAspo_cUdN|ifTkj@z z5Ifx#ZPCyYZ8MQXm89ZmaX-iTL!OvWQIxEKmk`l9rr^g7kPdew<0AH}GDdENoeZ(V^nJ=e+!zf?8Y z%ta>iiuk=TsS`3!#9XJU>#IUJ5;FNR8edI@lg?m#dD$PGiT|N7SN-eB`L*~uzM2ll zqsjM9$5`>|QZ97-O1LWb^6|8Ty4MI1_&X%^?0hn~9?~mB{gQcN4my=|T3Jy@>vX;l zIu|asy6`SSGi4krphckzmB33BJGUki-{$Wo)3f2|+x&{8vP#fErUU7tx#DHgWU6Lm|0c1zS=HfvxZX3WU+hN0d8`#8JhHg5wjR@yHy=4`#ZI}+Rj z@(w1Sp4XBk%0z0C^9Z9icz490o4@dXX{cp_w;wzQ+?4b$sE3rkKpc{m#G(Oy6#q>AmW2Q6Y( zT?Z!=bF4(79>iDpr(^Y9;EVm-cV@=Qkk}8srycgEs(PPfTB_$KkxIws2@)Y8BRShI zKV?Hw*9L=AAs~Tj17{`)V4&K-W*)GnC7EWX%z2JP?FZ+|!v<$~pj#Mx@srU&h;GYq ziFL^;*+e*x_k?%>$&BDgg!Mu4_ZB_6=%zX>Eer$>+F9H(q#|U&K?@5qMW20S*(d#H^4*^%X*z+;TWGmdOtii#f7czCzyKO#N z+HQMFXh?8RNpL2}w$)17V z{lLeJBIxtw#q;T4QY(+Mf_BU*=fq0d98NsfL{eN? zxe^TrHQ!VD12cDcS%HymGcuYR^YhQcsThpU&L^FIUWvK%G8M{NV;%K_I!EWPG<5k3 zl`9L$0ye2okJ=0Dn(+Dqw459tgPJ2@{8HJKc6_a{L6Lx&Lg+Ewf&8^pIrN%%rSZi5 z$AO9#5rXl`B2=kRiZ7A(@MvujmeISK*4Hs+VPyt7Q3Wj;H^?$cg!c6%3W{3uMq&!3 zIXJmO1W@7r2(XFr%0g0BU=Gb6Jp@R{H%6q9b<~RC^<5lwIs=Gp=rAo|<|a+e3N2EP zGArO{2tL@<;-?+j2%A~2XZE)C-qDuT&F8RV;UEAjo_H$`auZe-8k*i6OzwP zfrzPv@6q$zJnBGtR@3qEwywMQ7iQD0WoJe+2<%NHVjQ7f%woKYMxTb)EW-tyaBvXgW=&v|Sd6d-Ye=~W+!ET}W3 zNVJ7w)7a`&m|<63=)8RFL9zTuf%4nO@#T3hB1Y_Btm^IP=m1kDJH-_F?InC(=Uhuly1e zL&sjGe9_<{aT5+hc2*GDn;R1q7`L@RiQgBX@CX0W5epkv!=Pe^v$F#Sl~Q3NlhlU) zT{+_=h}H&^rNo4r8Ws{38CMcAg5I^65cEmH^49?Z$9RUpF9aN{AJ_zktW1lgghZgM zj``yYxWRh9M3y3j>IRGuO&d6d4AdePPQ-P@hnHY5e{;a3*QmvJ0w<&{{uuQ6?1OkG z!NF(i*Aq&+fj0zs|I>MYI>Bm)%u%Q4Dcp-Q1+#+63e0f48QG;5{m}=+P!y_XQZ9Yg z86b=|y2^jtOro3V`|dxf#M#>HN~2HlV-BeCn0R?c=*+zN4W^sIfdrcaBU7LqZwKfB z#h=zTH|+RL4Wy|@jBzTXIFB@K4PSU{nPb&hYjCx6<_$_nCOn=(zwx)pl_Muju!0TY zC6@95%#>+drgXBX0%}}=4GJuMRzQfUG;vsA@%N_9=Q`L0d5Q(B+=Wxbfn>)K{-g9U zhw*%_A43@yhZ0I5T0g+Kc%UQrKa*H+1^02L@xl7K4CH2dvr`%y4vRPN4DcU9=nWyF z#m#iEkq|zgVdWQl&Uh%st4Ci;uNx$uB!9`<%&)F_*AnFlvjsAcC!d;dm<$}awZGqV5r9(!ZI09A9_- zgoC>h@2vb=r{drqM|UQl(fGfMOzIR>LYcVqzHq0#-U2pbIm3s&Z8RJdA!UrOzFZGK xe4Il4UQ~4Kii7x2ygokpR~J9Ei>6XYwK`V0gXASHp`Qw){{sVmz$cs^006frFn0g| diff --git a/man/jc.1.gz b/man/jc.1.gz index 70d341c854f9aff54d5ed7507394da85a49cb85d..b7b4c49b52c9e5b6e76a82af2d13765b4ba5cd74 100644 GIT binary patch literal 2691 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 literal 2691 zcmV-}3Vih+iwFocC9Plr|7v3{F#w%eZExE+68`RAK@pAspo_cUdN|ifTkj@z z5Ifx#ZPCyYZ8MQXm89ZmaX-iTL!OvWQIxEKmk`l9rr^g7kPdew<0AH}GDdENoeZ(V^nJ=e+!zf?8Y z%ta>iiuk=TsS`3!#9XJU>#IUJ5;FNR8edI@lg?m#dD$PGiT|N7SN-eB`L*~uzM2ll zqsjM9$5`>|QZ97-O1LWb^6|8Ty4MI1_&X%^?0hn~9?~mB{gQcN4my=|T3Jy@>vX;l zIu|asy6`SSGi4krphckzmB33BJGUki-{$Wo)3f2|+x&{8vP#fErUU7tx#DHgWU6Lm|0c1zS=HfvxZX3WU+hN0d8`#8JhHg5wjR@yHy=4`#ZI}+Rj z@(w1Sp4XBk%0z0C^9Z9icz490o4@dXX{cp_w;wzQ+?4b$sE3rkKpc{m#G(Oy6#q>AmW2Q6Y( zT?Z!=bF4(79>iDpr(^Y9;EVm-cV@=Qkk}8srycgEs(PPfTB_$KkxIws2@)Y8BRShI zKV?Hw*9L=AAs~Tj17{`)V4&K-W*)GnC7EWX%z2JP?FZ+|!v<$~pj#Mx@srU&h;GYq ziFL^;*+e*x_k?%>$&BDgg!Mu4_ZB_6=%zX>Eer$>+F9H(q#|U&K?@5qMW20S*(d#H^4*^%X*z+;TWGmdOtii#f7czCzyKO#N z+HQMFXh?8RNpL2}w$)17V z{lLeJBIxtw#q;T4QY(+Mf_BU*=fq0d98NsfL{eN? zxe^TrHQ!VD12cDcS%HymGcuYR^YhQcsThpU&L^FIUWvK%G8M{NV;%K_I!EWPG<5k3 zl`9L$0ye2okJ=0Dn(+Dqw459tgPJ2@{8HJKc6_a{L6Lx&Lg+Ewf&8^pIrN%%rSZi5 z$AO9#5rXl`B2=kRiZ7A(@MvujmeISK*4Hs+VPyt7Q3Wj;H^?$cg!c6%3W{3uMq&!3 zIXJmO1W@7r2(XFr%0g0BU=Gb6Jp@R{H%6q9b<~RC^<5lwIs=Gp=rAo|<|a+e3N2EP zGArO{2tL@<;-?+j2%A~2XZE)C-qDuT&F8RV;UEAjo_H$`auZe-8k*i6OzwP zfrzPv@6q$zJnBGtR@3qEwywMQ7iQD0WoJe+2<%NHVjQ7f%woKYMxTb)EW-tyaBvXgW=&v|Sd6d-Ye=~W+!ET}W3 zNVJ7w)7a`&m|<63=)8RFL9zTuf%4nO@#T3hB1Y_Btm^IP=m1kDJH-_F?InC(=Uhuly1e zL&sjGe9_<{aT5+hc2*GDn;R1q7`L@RiQgBX@CX0W5epkv!=Pe^v$F#Sl~Q3NlhlU) zT{+_=h}H&^rNo4r8Ws{38CMcAg5I^65cEmH^49?Z$9RUpF9aN{AJ_zktW1lgghZgM zj``yYxWRh9M3y3j>IRGuO&d6d4AdePPQ-P@hnHY5e{;a3*QmvJ0w<&{{uuQ6?1OkG z!NF(i*Aq&+fj0zs|I>MYI>Bm)%u%Q4Dcp-Q1+#+63e0f48QG;5{m}=+P!y_XQZ9Yg z86b=|y2^jtOro3V`|dxf#M#>HN~2HlV-BeCn0R?c=*+zN4W^sIfdrcaBU7LqZwKfB z#h=zTH|+RL4Wy|@jBzTXIFB@K4PSU{nPb&hYjCx6<_$_nCOn=(zwx)pl_Muju!0TY zC6@95%#>+drgXBX0%}}=4GJuMRzQfUG;vsA@%N_9=Q`L0d5Q(B+=Wxbfn>)K{-g9U zhw*%_A43@yhZ0I5T0g+Kc%UQrKa*H+1^02L@xl7K4CH2dvr`%y4vRPN4DcU9=nWyF z#m#iEkq|zgVdWQl&Uh%st4Ci;uNx$uB!9`<%&)F_*AnFlvjsAcC!d;dm<$}awZGqV5r9(!ZI09A9_- zgoC>h@2vb=r{drqM|UQl(fGfMOzIR>LYcVqzHq0#-U2pbIm3s&Z8RJdA!UrOzFZGK xe4Il4UQ~4Kii7x2ygokpR~J9Ei>6XYwK`V0gXASHp`Qw){{sVmz$cs^006frFn0g|