mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-06-17 00:07:37 +02:00
add remove_quotes() to utils and use in ini parsers
This commit is contained in:
@ -1,6 +1,6 @@
|
|||||||
jc changelog
|
jc changelog
|
||||||
|
|
||||||
20240131 v1.24.1
|
20240201 v1.24.1
|
||||||
- Add `--slurp` functionality to wrap output from multiple lines into a single array.
|
- Add `--slurp` functionality to wrap output from multiple lines into a single array.
|
||||||
Note, this only works with single-line input parsers. (e.g. `date`, `ip-address`, `url`, etc.)
|
Note, this only works with single-line input parsers. (e.g. `date`, `ip-address`, `url`, etc.)
|
||||||
Streaming parsers are not supported. Use `jc -hhh` to find parsers compatible with the slurp option.
|
Streaming parsers are not supported. Use `jc -hhh` to find parsers compatible with the slurp option.
|
||||||
@ -16,6 +16,7 @@ jc changelog
|
|||||||
- Add `path-list` string parser to parse path list strings found in env variables
|
- Add `path-list` string parser to parse path list strings found in env variables
|
||||||
- Add source link to online parser documentation
|
- Add source link to online parser documentation
|
||||||
- Add snap package build scripts
|
- Add snap package build scripts
|
||||||
|
- Add `remove_quotes` function to `utils.py`
|
||||||
- Add `line_slice` function to `utils.py`
|
- Add `line_slice` function to `utils.py`
|
||||||
- Add `get_parser` function to `lib.py`
|
- Add `get_parser` function to `lib.py`
|
||||||
- Enhance `nsd-control` parser to support more zone information
|
- Enhance `nsd-control` parser to support more zone information
|
||||||
|
@ -98,4 +98,4 @@ Compatibility: linux, darwin, cygwin, win32, aix, freebsd
|
|||||||
|
|
||||||
Source: [`jc/parsers/ini.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/ini.py)
|
Source: [`jc/parsers/ini.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/ini.py)
|
||||||
|
|
||||||
Version 2.1 by Kelly Brazil (kellyjonbrazil@gmail.com)
|
Version 2.2 by Kelly Brazil (kellyjonbrazil@gmail.com)
|
||||||
|
@ -120,4 +120,4 @@ Compatibility: linux, darwin, cygwin, win32, aix, freebsd
|
|||||||
|
|
||||||
Source: [`jc/parsers/ini_dup.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/ini_dup.py)
|
Source: [`jc/parsers/ini_dup.py`](https://github.com/kellyjonbrazil/jc/blob/master/jc/parsers/ini_dup.py)
|
||||||
|
|
||||||
Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com)
|
Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com)
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
* [is\_compatible](#jc.utils.is_compatible)
|
* [is\_compatible](#jc.utils.is_compatible)
|
||||||
* [compatibility](#jc.utils.compatibility)
|
* [compatibility](#jc.utils.compatibility)
|
||||||
* [has\_data](#jc.utils.has_data)
|
* [has\_data](#jc.utils.has_data)
|
||||||
|
* [remove\_quotes](#jc.utils.remove_quotes)
|
||||||
* [convert\_to\_int](#jc.utils.convert_to_int)
|
* [convert\_to\_int](#jc.utils.convert_to_int)
|
||||||
* [convert\_to\_float](#jc.utils.convert_to_float)
|
* [convert\_to\_float](#jc.utils.convert_to_float)
|
||||||
* [convert\_to\_bool](#jc.utils.convert_to_bool)
|
* [convert\_to\_bool](#jc.utils.convert_to_bool)
|
||||||
@ -122,6 +123,25 @@ Returns:
|
|||||||
characters, otherwise False. For bytes data, returns
|
characters, otherwise False. For bytes data, returns
|
||||||
True if there is any data, otherwise False.
|
True if there is any data, otherwise False.
|
||||||
|
|
||||||
|
<a id="jc.utils.remove_quotes"></a>
|
||||||
|
|
||||||
|
### remove\_quotes
|
||||||
|
|
||||||
|
```python
|
||||||
|
def remove_quotes(data: str) -> str
|
||||||
|
```
|
||||||
|
|
||||||
|
Remove single or double quotes surrounding a string. If no quotes are
|
||||||
|
found then the string is returned unmodified.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
data: (string) Input value
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
string
|
||||||
|
|
||||||
<a id="jc.utils.convert_to_int"></a>
|
<a id="jc.utils.convert_to_int"></a>
|
||||||
|
|
||||||
### convert\_to\_int
|
### convert\_to\_int
|
||||||
|
@ -75,7 +75,7 @@ import uuid
|
|||||||
|
|
||||||
class info():
|
class info():
|
||||||
"""Provides parser metadata (version, author, etc.)"""
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
version = '2.1'
|
version = '2.2'
|
||||||
description = 'INI file parser'
|
description = 'INI file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -97,16 +97,6 @@ class MyDict(dict):
|
|||||||
super().__setitem__(key, value)
|
super().__setitem__(key, value)
|
||||||
|
|
||||||
|
|
||||||
def _remove_quotes(value):
|
|
||||||
if value.startswith('"') and value.endswith('"'):
|
|
||||||
value = value[1:-1]
|
|
||||||
|
|
||||||
elif value.startswith("'") and value.endswith("'"):
|
|
||||||
value = value[1:-1]
|
|
||||||
|
|
||||||
return value
|
|
||||||
|
|
||||||
|
|
||||||
def _process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
@ -123,10 +113,10 @@ def _process(proc_data):
|
|||||||
for k, v in proc_data.items():
|
for k, v in proc_data.items():
|
||||||
if isinstance(v, dict):
|
if isinstance(v, dict):
|
||||||
for key, value in v.items():
|
for key, value in v.items():
|
||||||
v[key] = _remove_quotes(value)
|
v[key] = jc.utils.remove_quotes(value)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
proc_data[k] = _remove_quotes(v)
|
proc_data[k] = jc.utils.remove_quotes(v)
|
||||||
|
|
||||||
return proc_data
|
return proc_data
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ import uuid
|
|||||||
|
|
||||||
class info():
|
class info():
|
||||||
"""Provides parser metadata (version, author, etc.)"""
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
version = '1.2'
|
version = '1.3'
|
||||||
description = 'INI with duplicate key file parser'
|
description = 'INI with duplicate key file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@ -127,16 +127,6 @@ class MultiDict(dict):
|
|||||||
super().__setitem__(key, value)
|
super().__setitem__(key, value)
|
||||||
|
|
||||||
|
|
||||||
def _remove_quotes(value):
|
|
||||||
if value.startswith('"') and value.endswith('"'):
|
|
||||||
value = value[1:-1]
|
|
||||||
|
|
||||||
elif value.startswith("'") and value.endswith("'"):
|
|
||||||
value = value[1:-1]
|
|
||||||
|
|
||||||
return value
|
|
||||||
|
|
||||||
|
|
||||||
def _process(proc_data):
|
def _process(proc_data):
|
||||||
"""
|
"""
|
||||||
Final processing to conform to the schema.
|
Final processing to conform to the schema.
|
||||||
@ -154,16 +144,16 @@ def _process(proc_data):
|
|||||||
if isinstance(v, dict):
|
if isinstance(v, dict):
|
||||||
for key, value in v.items():
|
for key, value in v.items():
|
||||||
if isinstance(value, list):
|
if isinstance(value, list):
|
||||||
v[key] = [_remove_quotes(x) for x in value]
|
v[key] = [jc.utils.remove_quotes(x) for x in value]
|
||||||
else:
|
else:
|
||||||
v[key] = _remove_quotes(value)
|
v[key] = jc.utils.remove_quotes(value)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
elif isinstance(v, list):
|
elif isinstance(v, list):
|
||||||
proc_data[k] = [_remove_quotes(x) for x in v]
|
proc_data[k] = [jc.utils.remove_quotes(x) for x in v]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
proc_data[k] = _remove_quotes(v)
|
proc_data[k] = jc.utils.remove_quotes(v)
|
||||||
|
|
||||||
return proc_data
|
return proc_data
|
||||||
|
|
||||||
|
22
jc/utils.py
22
jc/utils.py
@ -183,6 +183,28 @@ def has_data(data: Union[str, bytes]) -> bool:
|
|||||||
return bool(data)
|
return bool(data)
|
||||||
|
|
||||||
|
|
||||||
|
def remove_quotes(data: str) -> str:
|
||||||
|
"""
|
||||||
|
Remove single or double quotes surrounding a string. If no quotes are
|
||||||
|
found then the string is returned unmodified.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
data: (string) Input value
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
string
|
||||||
|
"""
|
||||||
|
if data.startswith('"') and data.endswith('"'):
|
||||||
|
data = data[1:-1]
|
||||||
|
|
||||||
|
elif data.startswith("'") and data.endswith("'"):
|
||||||
|
data = data[1:-1]
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
def convert_to_int(value: object) -> Optional[int]:
|
def convert_to_int(value: object) -> Optional[int]:
|
||||||
"""
|
"""
|
||||||
Converts string and float input to int. Strips all non-numeric
|
Converts string and float input to int. Strips all non-numeric
|
||||||
|
Reference in New Issue
Block a user