1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-06-17 00:07:37 +02:00

Merge pull request #432 from kellyjonbrazil/revert-430-find_parser

Revert "Added find parser and tests for Centos 7.7 and Ubuntu 18.04"
This commit is contained in:
Kelly Brazil
2023-06-23 15:40:06 +00:00
committed by GitHub
7 changed files with 0 additions and 229 deletions

View File

@ -43,7 +43,6 @@ parsers: List[str] = [
'email-address',
'env',
'file',
'find',
'findmnt',
'finger',
'free',

View File

@ -1,133 +0,0 @@
"""jc - JSON Convert `find` command output parser
Usage (cli):
$ find | jc --find
Usage (module):
import jc
result = jc.parse('find', find_command_output)
Schema:
[
{
"path": string,
"node": string,
"error": string
}
]
Examples:
$ find | jc --find -p
[
{
"path": "./directory"
"node": "filename"
},
{
"path": "./anotherdirectory"
"node": "anotherfile"
},
{
"path": null
"node": null
"error": "find: './inaccessible': Permission denied"
}
...
]
$ find | jc --find -p -r
[
"./templates/readme_template",
"./templates/manpage_template",
"./.github/workflows/pythonapp.yml",
...
]
"""
import jc.utils
class info():
"""Provides parser metadata (version, author, etc.)"""
version = '1.0'
description = '`find` command parser'
author = 'Solomon Leang'
author_email = 'solomonleang@gmail.com'
compatible = ['linux']
tags = ['command']
__version__ = info.version
def _process(proc_data):
"""
Final processing to conform to the schema.
Parameters:
proc_data: (Dictionary) raw structured data to process
Returns:
List of Dictionaries. Structured data to conform to the schema.
"""
processed = []
for index in proc_data:
path, node, error = "", "", ""
if (index == "."):
node = "."
elif index.startswith('find: '):
error = index
else:
try:
path, node = index.rsplit('/', maxsplit=1)
except ValueError:
pass
proc_line = {
'path': path if path else None,
'node': node if node else None
}
if error:
proc_line.update(
{'error': error}
)
processed.append(proc_line)
return processed
def parse(data, raw=False, quiet=False):
"""
Main text parsing function
Parameters:
data: (string) text data to parse
raw: (boolean) unprocessed output if True
quiet: (boolean) suppress warning messages if True
Returns:
Dictionary of raw structured data or
List of Dictionaries of processed structured data
"""
jc.utils.compatibility(__name__, info.compatible, quiet)
jc.utils.input_type_check(data)
raw_output = []
if jc.utils.has_data(data):
raw_output = data.splitlines()
if raw:
return raw_output
else:
return _process(raw_output)

View File

@ -1,13 +0,0 @@
[{"path": null, "node": "."},
{"path":".","node":null},
{"path": ".","node": "jc"},
{"path": "./jc","node": "tests"},
{"path": "./jc/tests","node": "test_find.py"},
{"path": "./jc/tests","node": "test_history.py"},
{"path": "./jc/tests","node": "test_hosts.py"},
{"path": "./jc","node": "anotherdirectory"},
{"path": null,"node": null,"error": "find: './inaccessible': Permission denied"},
{"path": "./jc","node": "directory2"},
{"path": "./jc/directory2","node": "file.txt"},
{"path": "./jc/directory2","node": "file2.txt"},
{"path": ".","node": "newfile.txt"}]

View File

@ -1,13 +0,0 @@
.
./
./jc
./jc/tests
./jc/tests/test_find.py
./jc/tests/test_history.py
./jc/tests/test_hosts.py
./jc/anotherdirectory
find: './inaccessible': Permission denied
./jc/directory2
./jc/directory2/file.txt
./jc/directory2/file2.txt
./newfile.txt

View File

@ -1,13 +0,0 @@
[{"path": null, "node": "."},
{"path":".","node":null},
{"path": ".","node": "jc"},
{"path": "./jc","node": "tests"},
{"path": "./jc/tests","node": "test_find.py"},
{"path": "./jc/tests","node": "test_history.py"},
{"path": "./jc/tests","node": "test_hosts.py"},
{"path": "./jc","node": "anotherdirectory"},
{"path": null,"node": null,"error": "find: './inaccessible': Permission denied"},
{"path": "./jc","node": "directory2"},
{"path": "./jc/directory2","node": "file.txt"},
{"path": "./jc/directory2","node": "file2.txt"},
{"path": ".","node": "newfile.txt"}]

View File

@ -1,13 +0,0 @@
.
./
./jc
./jc/tests
./jc/tests/test_find.py
./jc/tests/test_history.py
./jc/tests/test_hosts.py
./jc/anotherdirectory
find: './inaccessible': Permission denied
./jc/directory2
./jc/directory2/file.txt
./jc/directory2/file2.txt
./newfile.txt

View File

@ -1,43 +0,0 @@
import os
import unittest
import json
import jc.parsers.find
THIS_DIR = os.path.dirname(os.path.abspath(__file__))
class MyTests(unittest.TestCase):
# input
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/centos-7.7/find.out'), 'r', encoding='utf-8') as f:
centos_7_7_find = f.read()
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/ubuntu-18.04/find.out'), 'r', encoding='utf-8') as f:
ubuntu_18_4_find = f.read()
#output
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/centos-7.7/find.json'), 'r', encoding='utf-8') as f:
centos_7_7_find_json = json.loads(f.read())
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/ubuntu-18.04/find.json'), 'r', encoding='utf-8') as f:
ubuntu_18_4_find_json = json.loads(f.read())
def test_find_nodata(self):
"""
Test 'find' with no data
"""
self.assertEqual(jc.parsers.find.parse('', quiet=True), [])
def test_find_centos_7_7(self):
"""
Test 'find' on Centos 7.7
"""
self.assertEqual(jc.parsers.find.parse(self.centos_7_7_find, quiet=True), self.centos_7_7_find_json)
def test_find_ubuntu_18_4(self):
"""
Test 'find' on Ubuntu 18.4
"""
self.assertEqual(jc.parsers.find.parse(self.ubuntu_18_4_find, quiet=True), self.ubuntu_18_4_find_json)
if __name__ == '__main__':
unittest.main()