mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-10-08 23:22:21 +02:00
strip single quotes just like double quotes
This commit is contained in:
@@ -6,9 +6,10 @@ Parses standard `INI` files and files containing simple key/value pairs.
|
|||||||
- Comment prefix can be `#` or `;`. Comments must be on their own line.
|
- Comment prefix can be `#` or `;`. Comments must be on their own line.
|
||||||
- If duplicate keys are found, only the last value will be used.
|
- If duplicate keys are found, only the last value will be used.
|
||||||
|
|
||||||
> Note: Values starting and ending with quotation marks will have the marks
|
> Note: Values starting and ending with double or single quotation marks
|
||||||
> removed. If you would like to keep the quotation marks, use the `-r`
|
> will have the marks removed. If you would like to keep the quotation
|
||||||
> command-line argument or the `raw=True` argument in `parse()`.
|
> marks, use the `-r` command-line argument or the `raw=True` argument in
|
||||||
|
> `parse()`.
|
||||||
|
|
||||||
Usage (cli):
|
Usage (cli):
|
||||||
|
|
||||||
@@ -69,7 +70,7 @@ import configparser
|
|||||||
|
|
||||||
class info():
|
class info():
|
||||||
"""Provides parser metadata (version, author, etc.)"""
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
version = '1.6'
|
version = '1.7'
|
||||||
description = 'INI file parser'
|
description = 'INI file parser'
|
||||||
author = 'Kelly Brazil'
|
author = 'Kelly Brazil'
|
||||||
author_email = 'kellyjonbrazil@gmail.com'
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
@@ -99,17 +100,21 @@ def _process(proc_data):
|
|||||||
for key, value in proc_data[heading].items():
|
for key, value in proc_data[heading].items():
|
||||||
if value is not None and value.startswith('"') and value.endswith('"'):
|
if value is not None and value.startswith('"') and value.endswith('"'):
|
||||||
proc_data[heading][key] = value.lstrip('"').rstrip('"')
|
proc_data[heading][key] = value.lstrip('"').rstrip('"')
|
||||||
|
|
||||||
|
elif value is not None and value.startswith("'") and value.endswith("'"):
|
||||||
|
proc_data[heading][key] = value.lstrip("'").rstrip("'")
|
||||||
|
|
||||||
elif value is None:
|
elif value is None:
|
||||||
proc_data[heading][key] = ''
|
proc_data[heading][key] = ''
|
||||||
|
|
||||||
# simple key/value files with no headers
|
# simple key/value files with no headers
|
||||||
else:
|
else:
|
||||||
if (proc_data[heading] is not None and
|
if proc_data[heading] is not None and proc_data[heading].startswith('"') and proc_data[heading].endswith('"'):
|
||||||
proc_data[heading].startswith('"') and
|
|
||||||
proc_data[heading].endswith('"')):
|
|
||||||
|
|
||||||
proc_data[heading] = proc_data[heading].lstrip('"').rstrip('"')
|
proc_data[heading] = proc_data[heading].lstrip('"').rstrip('"')
|
||||||
|
|
||||||
|
elif proc_data[heading] is not None and proc_data[heading].startswith("'") and proc_data[heading].endswith("'"):
|
||||||
|
proc_data[heading] = proc_data[heading].lstrip("'").rstrip("'")
|
||||||
|
|
||||||
elif proc_data[heading] is None:
|
elif proc_data[heading] is None:
|
||||||
proc_data[heading] = ''
|
proc_data[heading] = ''
|
||||||
|
|
||||||
|
4
tests/fixtures/generic/ini-double-quote.ini
vendored
Normal file
4
tests/fixtures/generic/ini-double-quote.ini
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[client]
|
||||||
|
user=foo
|
||||||
|
host=localhost
|
||||||
|
password="bar"
|
1
tests/fixtures/generic/ini-double-quote.json
vendored
Normal file
1
tests/fixtures/generic/ini-double-quote.json
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"client":{"user":"foo","host":"localhost","password":"bar"}}
|
4
tests/fixtures/generic/ini-single-quote.ini
vendored
Normal file
4
tests/fixtures/generic/ini-single-quote.ini
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[client]
|
||||||
|
user=foo
|
||||||
|
host=localhost
|
||||||
|
password='bar'
|
1
tests/fixtures/generic/ini-single-quote.json
vendored
Normal file
1
tests/fixtures/generic/ini-single-quote.json
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"client":{"user":"foo","host":"localhost","password":"bar"}}
|
@@ -16,6 +16,12 @@ class MyTests(unittest.TestCase):
|
|||||||
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/ini-iptelserver.ini'), 'r', encoding='utf-8') as f:
|
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/ini-iptelserver.ini'), 'r', encoding='utf-8') as f:
|
||||||
self.generic_ini_iptelserver = f.read()
|
self.generic_ini_iptelserver = f.read()
|
||||||
|
|
||||||
|
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/ini-double-quote.ini'), 'r', encoding='utf-8') as f:
|
||||||
|
self.generic_ini_double_quote = f.read()
|
||||||
|
|
||||||
|
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/ini-single-quote.ini'), 'r', encoding='utf-8') as f:
|
||||||
|
self.generic_ini_single_quote = f.read()
|
||||||
|
|
||||||
# output
|
# output
|
||||||
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/ini-test.json'), 'r', encoding='utf-8') as f:
|
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/ini-test.json'), 'r', encoding='utf-8') as f:
|
||||||
self.generic_ini_test_json = json.loads(f.read())
|
self.generic_ini_test_json = json.loads(f.read())
|
||||||
@@ -23,6 +29,12 @@ class MyTests(unittest.TestCase):
|
|||||||
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/ini-iptelserver.json'), 'r', encoding='utf-8') as f:
|
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/ini-iptelserver.json'), 'r', encoding='utf-8') as f:
|
||||||
self.generic_ini_iptelserver_json = json.loads(f.read())
|
self.generic_ini_iptelserver_json = json.loads(f.read())
|
||||||
|
|
||||||
|
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/ini-double-quote.json'), 'r', encoding='utf-8') as f:
|
||||||
|
self.generic_ini_double_quote_json = json.loads(f.read())
|
||||||
|
|
||||||
|
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/ini-single-quote.json'), 'r', encoding='utf-8') as f:
|
||||||
|
self.generic_ini_single_quote_json = json.loads(f.read())
|
||||||
|
|
||||||
def test_ini_nodata(self):
|
def test_ini_nodata(self):
|
||||||
"""
|
"""
|
||||||
Test the test ini file with no data
|
Test the test ini file with no data
|
||||||
@@ -53,6 +65,19 @@ duplicate_key = value2
|
|||||||
expected = {'duplicate_key': 'value2', 'another_key': 'foo'}
|
expected = {'duplicate_key': 'value2', 'another_key': 'foo'}
|
||||||
self.assertEqual(jc.parsers.ini.parse(data, quiet=True), expected)
|
self.assertEqual(jc.parsers.ini.parse(data, quiet=True), expected)
|
||||||
|
|
||||||
|
def test_ini_doublequote(self):
|
||||||
|
"""
|
||||||
|
Test ini file with double quotes around a value
|
||||||
|
"""
|
||||||
|
self.assertEqual(jc.parsers.ini.parse(self.generic_ini_double_quote, quiet=True), self.generic_ini_double_quote_json)
|
||||||
|
|
||||||
|
def test_ini_singlequote(self):
|
||||||
|
"""
|
||||||
|
Test ini file with single quotes around a value
|
||||||
|
"""
|
||||||
|
self.assertEqual(jc.parsers.ini.parse(self.generic_ini_single_quote, quiet=True), self.generic_ini_single_quote_json)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Reference in New Issue
Block a user