diff --git a/docgen.sh b/docgen.sh index 6966b89a..e515fb40 100755 --- a/docgen.sh +++ b/docgen.sh @@ -17,6 +17,7 @@ pydocmd simple jc.parsers.csv+ > ../docs/parsers/csv.md pydocmd simple jc.parsers.date+ > ../docs/parsers/date.md pydocmd simple jc.parsers.df+ > ../docs/parsers/df.md pydocmd simple jc.parsers.dig+ > ../docs/parsers/dig.md +pydocmd simple jc.parsers.dir+ > ../docs/parsers/dir.md pydocmd simple jc.parsers.dmidecode+ > ../docs/parsers/dmidecode.md pydocmd simple jc.parsers.dpkg_l+ > ../docs/parsers/dpkg_l.md pydocmd simple jc.parsers.du+ > ../docs/parsers/du.md diff --git a/docs/parsers/dir.md b/docs/parsers/dir.md new file mode 100644 index 00000000..c84b3334 --- /dev/null +++ b/docs/parsers/dir.md @@ -0,0 +1,290 @@ + +# jc.parsers.dir +jc - JSON CLI output utility `dir` command output parser + +Options supported: +- `/T timefield` +- `/O sortorder` +- `/C, /-C` + +Usage (cli): + + $ dir | jc --dir -p -m + + or + + $ jc -p -m dir + +Usage (module): + + import jc.parsers.dir + result = jc.parsers.dir.parse(dir_command_output) + +Compatibility: + + 'win32' + +Examples: + + $ dir | jc --dir -p -m + { + "C:\Program Files\Internet Explorer": [ + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": true, + "size": null, + "filename": "." + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": true, + "size": null, + "filename": ".." + }, + { + "date": "12/07/2019", + "time": "02:49 AM", + "dir": true, + "size": null, + "filename": "en-US" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 54784, + "filename": "ExtExport.exe" + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": false, + "size": 0, + "filename": "file name.txt" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 54784, + "filename": "hmmapi.dll" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 515072, + "filename": "iediagcmd.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 504832, + "filename": "ieinstal.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 224768, + "filename": "ielowutil.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 421888, + "filename": "IEShims.dll" + }, + { + "date": "12/06/2019", + "time": "02:47 PM", + "dir": false, + "size": 819136, + "filename": "iexplore.exe" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": true, + "size": null, + "filename": "images" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": true, + "size": null, + "filename": "SIGNUP" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 48536, + "filename": "sqmapi.dll" + } + ] + } + + + $ dir | jc --dir -p -m -r + { + "C:\Program Files\Internet Explorer": [ + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": true, + "size": null, + "filename": "." + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": true, + "size": null, + "filename": ".." + }, + { + "date": "12/07/2019", + "time": "02:49 AM", + "dir": true, + "size": null, + "filename": "en-US" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "54,784", + "filename": "ExtExport.exe" + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": false, + "size": "0", + "filename": "file name.txt" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "54,784", + "filename": "hmmapi.dll" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "515,072", + "filename": "iediagcmd.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "504,832", + "filename": "ieinstal.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "224,768", + "filename": "ielowutil.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "421,888", + "filename": "IEShims.dll" + }, + { + "date": "12/06/2019", + "time": "02:47 PM", + "dir": false, + "size": "819,136", + "filename": "iexplore.exe" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": true, + "size": null, + "filename": "images" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": true, + "size": null, + "filename": "SIGNUP" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "48,536", + "filename": "sqmapi.dll" + } + ] + } + + + +## info +```python +info() +``` + + +## process +```python +process(proc_data) +``` + +Final processing to conform to the schema. + +Parameters: + + proc_data: (Dictionary of Lists) raw structured data to process + +Returns: + + List of Dictionaries. Structured data with the following schema: + {"parent_dir": + [ + { + "date": string, + "time": string, + "dir": string, + "size": integer, + "filename: string + } + ] + } + + +## parse +```python +parse(data, raw=False, quiet=False) +``` + +Main text parsing function + +Parameters: + + data: (string) text data to parse + raw: (boolean) output preprocessed JSON if True + quiet: (boolean) suppress warning messages if True + +Returns: + + List of Dictionaries. Raw or processed structured data. + + diff --git a/jc/cli.py b/jc/cli.py index d66572b9..3e267bcc 100644 --- a/jc/cli.py +++ b/jc/cli.py @@ -50,6 +50,7 @@ parsers = [ 'date', 'df', 'dig', + 'dir', 'dmidecode', 'dpkg-l', 'du', diff --git a/jc/parsers/dir.py b/jc/parsers/dir.py new file mode 100644 index 00000000..bd42622e --- /dev/null +++ b/jc/parsers/dir.py @@ -0,0 +1,342 @@ +"""jc - JSON CLI output utility `dir` command output parser + +Options supported: +- `/T timefield` +- `/O sortorder` +- `/C, /-C` +- `/S` + +Usage (cli): + + $ dir | jc --dir -p -m + + or + + $ jc -p -m dir + +Usage (module): + + import jc.parsers.dir + result = jc.parsers.dir.parse(dir_command_output) + +Compatibility: + + 'win32' + +Examples: + + $ dir | jc --dir -p -m + { + "C:\\Program Files\\Internet Explorer": [ + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": true, + "size": null, + "filename": "." + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": true, + "size": null, + "filename": ".." + }, + { + "date": "12/07/2019", + "time": "02:49 AM", + "dir": true, + "size": null, + "filename": "en-US" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 54784, + "filename": "ExtExport.exe" + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": false, + "size": 0, + "filename": "file name.txt" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 54784, + "filename": "hmmapi.dll" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 515072, + "filename": "iediagcmd.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 504832, + "filename": "ieinstal.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 224768, + "filename": "ielowutil.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 421888, + "filename": "IEShims.dll" + }, + { + "date": "12/06/2019", + "time": "02:47 PM", + "dir": false, + "size": 819136, + "filename": "iexplore.exe" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": true, + "size": null, + "filename": "images" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": true, + "size": null, + "filename": "SIGNUP" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": 48536, + "filename": "sqmapi.dll" + } + ] + } + + + $ dir | jc --dir -p -m -r + { + "C:\\Program Files\\Internet Explorer": [ + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": true, + "size": null, + "filename": "." + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": true, + "size": null, + "filename": ".." + }, + { + "date": "12/07/2019", + "time": "02:49 AM", + "dir": true, + "size": null, + "filename": "en-US" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "54,784", + "filename": "ExtExport.exe" + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": false, + "size": "0", + "filename": "file name.txt" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "54,784", + "filename": "hmmapi.dll" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "515,072", + "filename": "iediagcmd.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "504,832", + "filename": "ieinstal.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "224,768", + "filename": "ielowutil.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "421,888", + "filename": "IEShims.dll" + }, + { + "date": "12/06/2019", + "time": "02:47 PM", + "dir": false, + "size": "819,136", + "filename": "iexplore.exe" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": true, + "size": null, + "filename": "images" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": true, + "size": null, + "filename": "SIGNUP" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": false, + "size": "48,536", + "filename": "sqmapi.dll" + } + ] + } + +""" +import re +import jc.utils + + +class info(): + version = '1.0' + description = 'dir command parser' + author = 'Rasheed Elsaleh' + author_email = 'rasheed@rebelliondefense.com' + + # compatible options: win32 + compatible = ['win32'] + magic_commands = ['dir'] + + +__version__ = info.version + + +def process(proc_data): + """ + Final processing to conform to the schema. + + Parameters: + + proc_data: (Dictionary of Lists) raw structured data to process + + Returns: + + List of Dictionaries. Structured data with the following schema: + {"parent_dir": + [ + { + "date": string, + "time": string, + "dir": string, + "size": integer, + "filename: string + } + ] + } + """ + + for _, dir_list in proc_data.items(): + for entry in dir_list: + int_list = ["size"] + for key in int_list: + if entry.get(key): + try: + key_int = int(entry[key].replace(",", "")) + except ValueError: + entry[key] = None + else: + entry[key] = key_int + return proc_data + + +def parse(data, raw=False, quiet=False): + """ + Main text parsing function + + Parameters: + + data: (string) text data to parse + raw: (boolean) output preprocessed JSON if True + quiet: (boolean) suppress warning messages if True + + Returns: + + List of Dictionaries. Raw or processed structured data. + + """ + if not quiet: + jc.utils.compatibility(__name__, info.compatible) + + raw_output = {} + + if jc.utils.has_data(data): + + for line in data.splitlines(): + if line.startswith(" Directory of"): + parent_dir = line.lstrip(" Directory of ") + continue + # skip lines that don't start with a date + if not re.match(r'^\d{2}/\d{2}/\d{4}', line): + continue + + raw_output.setdefault(parent_dir, []) + output_line = {} + parsed_line = line.split() + output_line["date"] = parsed_line[0] + output_line["time"] = " ".join(parsed_line[1:3]) + output_line.setdefault("dir", False) + output_line.setdefault("size", None) + if parsed_line[3] == "": + output_line["dir"] = True + else: + output_line["size"] = parsed_line[3] + + output_line["filename"] = " ".join(parsed_line[4:]) + raw_output[parent_dir].append(output_line) + + if raw: + return raw_output + else: + return process(raw_output) diff --git a/tests/fixtures/windows-10/dir-C.json b/tests/fixtures/windows-10/dir-C.json new file mode 100644 index 00000000..082d217a --- /dev/null +++ b/tests/fixtures/windows-10/dir-C.json @@ -0,0 +1 @@ +{"C:\\Program Files\\Internet Explorer": [{"date": "03/24/2021", "time": "03:15 PM", "dir": true, "size": null, "filename": "."}, {"date": "03/24/2021", "time": "03:15 PM", "dir": true, "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": true, "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 54784, "filename": "ExtExport.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": false, "size": 0, "filename": "file name.txt"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 54784, "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 515072, "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 504832, "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 224768, "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 421888, "filename": "IEShims.dll"}, {"date": "12/06/2019", "time": "02:47 PM", "dir": false, "size": 819136, "filename": "iexplore.exe"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 48536, "filename": "sqmapi.dll"}]} \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir-C.out b/tests/fixtures/windows-10/dir-C.out new file mode 100644 index 00000000..42bc4e19 --- /dev/null +++ b/tests/fixtures/windows-10/dir-C.out @@ -0,0 +1,21 @@ + Volume in drive C has no label. + Volume Serial Number is 246B-3B5A + + Directory of C:\Program Files\Internet Explorer + +03/24/2021 03:15 PM . +03/24/2021 03:15 PM .. +12/07/2019 02:49 AM en-US +12/07/2019 02:09 AM 54784 ExtExport.exe +03/24/2021 03:15 PM 0 file name.txt +12/07/2019 02:09 AM 54784 hmmapi.dll +12/07/2019 02:09 AM 515072 iediagcmd.exe +12/07/2019 02:09 AM 504832 ieinstal.exe +12/07/2019 02:09 AM 224768 ielowutil.exe +12/07/2019 02:09 AM 421888 IEShims.dll +12/06/2019 02:47 PM 819136 iexplore.exe +12/07/2019 02:14 AM images +12/07/2019 02:14 AM SIGNUP +12/07/2019 02:09 AM 48536 sqmapi.dll + 9 File(s) 2643800 bytes + 5 Dir(s) 36206153728 bytes free diff --git a/tests/fixtures/windows-10/dir-ODTC.json b/tests/fixtures/windows-10/dir-ODTC.json new file mode 100644 index 00000000..7a561b64 --- /dev/null +++ b/tests/fixtures/windows-10/dir-ODTC.json @@ -0,0 +1 @@ +{"C:\\Program Files\\Internet Explorer": [{"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 54784, "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 224768, "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 54784, "filename": "ExtExport.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 515072, "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 421888, "filename": "IEShims.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 504832, "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 48536, "filename": "sqmapi.dll"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": "."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": true, "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:49 AM", "dir": false, "size": 819136, "filename": "iexplore.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": false, "size": 0, "filename": "file name.txt"}]} \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir-ODTC.out b/tests/fixtures/windows-10/dir-ODTC.out new file mode 100644 index 00000000..431dd8f4 --- /dev/null +++ b/tests/fixtures/windows-10/dir-ODTC.out @@ -0,0 +1,21 @@ + Volume in drive C has no label. + Volume Serial Number is 246B-3B5A + + Directory of C:\Program Files\Internet Explorer + +12/07/2019 02:09 AM 54,784 hmmapi.dll +12/07/2019 02:09 AM 224,768 ielowutil.exe +12/07/2019 02:09 AM 54,784 ExtExport.exe +12/07/2019 02:09 AM 515,072 iediagcmd.exe +12/07/2019 02:09 AM 421,888 IEShims.dll +12/07/2019 02:09 AM 504,832 ieinstal.exe +12/07/2019 02:09 AM 48,536 sqmapi.dll +12/07/2019 02:14 AM images +12/07/2019 02:14 AM .. +12/07/2019 02:14 AM SIGNUP +12/07/2019 02:14 AM . +12/07/2019 02:49 AM en-US +12/07/2019 02:49 AM 819,136 iexplore.exe +03/24/2021 03:15 PM 0 file name.txt + 9 File(s) 2,643,800 bytes + 5 Dir(s) 35,231,817,728 bytes free diff --git a/tests/fixtures/windows-10/dir-S.json b/tests/fixtures/windows-10/dir-S.json new file mode 100644 index 00000000..d17d89f7 --- /dev/null +++ b/tests/fixtures/windows-10/dir-S.json @@ -0,0 +1 @@ +{"C:\\Program Files\\Internet Explorer": [{"date": "03/24/2021", "time": "03:15 PM", "dir": true, "size": null, "filename": "."}, {"date": "03/24/2021", "time": "03:15 PM", "dir": true, "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": true, "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 54784, "filename": "ExtExport.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": false, "size": 0, "filename": "file name.txt"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 54784, "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 515072, "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 504832, "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 224768, "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 421888, "filename": "IEShims.dll"}, {"date": "12/06/2019", "time": "02:47 PM", "dir": false, "size": 819136, "filename": "iexplore.exe"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 48536, "filename": "sqmapi.dll"}], "C:\\Program Files\\Internet Explorer\\en-US": [{"date": "12/07/2019", "time": "02:49 AM", "dir": true, "size": null, "filename": "."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": true, "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:48 AM", "dir": false, "size": 2560, "filename": "hmmapi.dll.mui"}, {"date": "12/07/2019", "time": "02:48 AM", "dir": false, "size": 2560, "filename": "ieinstal.exe.mui"}, {"date": "12/07/2019", "time": "02:48 AM", "dir": false, "size": 5632, "filename": "iexplore.exe.mui"}], "C:\\Program Files\\Internet Explorer\\images": [{"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": "."}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 5430, "filename": "bing.ico"}], "C:\\Program Files\\Internet Explorer\\SIGNUP": [{"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": "."}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:12 AM", "dir": false, "size": 452, "filename": "install.ins"}]} \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir-S.out b/tests/fixtures/windows-10/dir-S.out new file mode 100644 index 00000000..3a09b5a7 --- /dev/null +++ b/tests/fixtures/windows-10/dir-S.out @@ -0,0 +1,47 @@ + Volume in drive C has no label. + Volume Serial Number is 246B-3B5A + + Directory of C:\Program Files\Internet Explorer + +03/24/2021 03:15 PM . +03/24/2021 03:15 PM .. +12/07/2019 02:49 AM en-US +12/07/2019 02:09 AM 54,784 ExtExport.exe +03/24/2021 03:15 PM 0 file name.txt +12/07/2019 02:09 AM 54,784 hmmapi.dll +12/07/2019 02:09 AM 515,072 iediagcmd.exe +12/07/2019 02:09 AM 504,832 ieinstal.exe +12/07/2019 02:09 AM 224,768 ielowutil.exe +12/07/2019 02:09 AM 421,888 IEShims.dll +12/06/2019 02:47 PM 819,136 iexplore.exe +12/07/2019 02:14 AM images +12/07/2019 02:14 AM SIGNUP +12/07/2019 02:09 AM 48,536 sqmapi.dll + 9 File(s) 2,643,800 bytes + + Directory of C:\Program Files\Internet Explorer\en-US + +12/07/2019 02:49 AM . +12/07/2019 02:49 AM .. +12/07/2019 02:48 AM 2,560 hmmapi.dll.mui +12/07/2019 02:48 AM 2,560 ieinstal.exe.mui +12/07/2019 02:48 AM 5,632 iexplore.exe.mui + 3 File(s) 10,752 bytes + + Directory of C:\Program Files\Internet Explorer\images + +12/07/2019 02:14 AM . +12/07/2019 02:14 AM .. +12/07/2019 02:09 AM 5,430 bing.ico + 1 File(s) 5,430 bytes + + Directory of C:\Program Files\Internet Explorer\SIGNUP + +12/07/2019 02:14 AM . +12/07/2019 02:14 AM .. +12/07/2019 02:12 AM 452 install.ins + 1 File(s) 452 bytes + + Total Files Listed: + 14 File(s) 2,660,434 bytes + 11 Dir(s) 33,300,922,368 bytes free diff --git a/tests/fixtures/windows-10/dir-dirs.json b/tests/fixtures/windows-10/dir-dirs.json new file mode 100644 index 00000000..766d7551 --- /dev/null +++ b/tests/fixtures/windows-10/dir-dirs.json @@ -0,0 +1 @@ +{"C:\\Users\\Yoda\\Desktop\\jc\\docs": [{"date": "03/25/2021", "time": "02:36 PM", "dir": true, "size": null, "filename": "."}, {"date": "03/25/2021", "time": "02:36 PM", "dir": true, "size": null, "filename": ".."}, {"date": "03/25/2021", "time": "02:38 PM", "dir": true, "size": null, "filename": "parsers"}, {"date": "03/25/2021", "time": "02:36 PM", "dir": false, "size": 2713, "filename": "readme.md"}, {"date": "03/25/2021", "time": "02:36 PM", "dir": false, "size": 1338, "filename": "utils.md"}], "C:\\Users\\Yoda\\Desktop\\jc\\man": [{"date": "03/25/2021", "time": "02:36 PM", "dir": true, "size": null, "filename": "."}, {"date": "03/25/2021", "time": "02:36 PM", "dir": true, "size": null, "filename": ".."}, {"date": "03/25/2021", "time": "02:36 PM", "dir": false, "size": 4300, "filename": "jc.1"}]} \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir-dirs.out b/tests/fixtures/windows-10/dir-dirs.out new file mode 100644 index 00000000..70eac229 --- /dev/null +++ b/tests/fixtures/windows-10/dir-dirs.out @@ -0,0 +1,19 @@ + Volume in drive C has no label. + Volume Serial Number is 246B-3B5A + + Directory of C:\Users\Yoda\Desktop\jc\docs + +03/25/2021 02:36 PM . +03/25/2021 02:36 PM .. +03/25/2021 02:38 PM parsers +03/25/2021 02:36 PM 2,713 readme.md +03/25/2021 02:36 PM 1,338 utils.md + 2 File(s) 4,051 bytes + + Directory of C:\Users\Yoda\Desktop\jc\man + +03/25/2021 02:36 PM . +03/25/2021 02:36 PM .. +03/25/2021 02:36 PM 4,300 jc.1 + 1 File(s) 4,300 bytes + 2 Dir(s) 33,349,226,496 bytes free diff --git a/tests/fixtures/windows-10/dir-files.json b/tests/fixtures/windows-10/dir-files.json new file mode 100644 index 00000000..ced49261 --- /dev/null +++ b/tests/fixtures/windows-10/dir-files.json @@ -0,0 +1 @@ +{"C:\\Users\\Yoda\\Desktop\\jc": [{"date": "03/25/2021", "time": "02:38 PM", "dir": false, "size": 4253, "filename": "docgen.sh"}, {"date": "03/25/2021", "time": "02:36 PM", "dir": false, "size": 1088, "filename": "LICENSE.md"}, {"date": "03/25/2021", "time": "02:36 PM", "dir": false, "size": 27063, "filename": "README.md"}]} \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir-files.out b/tests/fixtures/windows-10/dir-files.out new file mode 100644 index 00000000..bd2fb796 --- /dev/null +++ b/tests/fixtures/windows-10/dir-files.out @@ -0,0 +1,16 @@ + Volume in drive C has no label. + Volume Serial Number is 246B-3B5A + + Directory of C:\Users\Yoda\Desktop\jc + +03/25/2021 02:38 PM 4,253 docgen.sh + + Directory of C:\Users\Yoda\Desktop\jc + +03/25/2021 02:36 PM 1,088 LICENSE.md + + Directory of C:\Users\Yoda\Desktop\jc + +03/25/2021 02:36 PM 27,063 README.md + 3 File(s) 32,404 bytes + 0 Dir(s) 33,349,652,480 bytes free diff --git a/tests/fixtures/windows-10/dir-mix.json b/tests/fixtures/windows-10/dir-mix.json new file mode 100644 index 00000000..c09c5e33 --- /dev/null +++ b/tests/fixtures/windows-10/dir-mix.json @@ -0,0 +1 @@ +{"C:\\Users\\Yoda\\Desktop\\jc": [{"date": "03/25/2021", "time": "02:38 PM", "dir": false, "size": 4253, "filename": "docgen.sh"}, {"date": "03/25/2021", "time": "02:38 PM", "dir": false, "size": 58995, "filename": "EXAMPLES.md"}], "C:\\Users\\Yoda\\Desktop\\jc\\docs": [{"date": "03/25/2021", "time": "02:36 PM", "dir": true, "size": null, "filename": "."}, {"date": "03/25/2021", "time": "02:36 PM", "dir": true, "size": null, "filename": ".."}, {"date": "03/25/2021", "time": "02:38 PM", "dir": true, "size": null, "filename": "parsers"}, {"date": "03/25/2021", "time": "02:36 PM", "dir": false, "size": 2713, "filename": "readme.md"}, {"date": "03/25/2021", "time": "02:36 PM", "dir": false, "size": 1338, "filename": "utils.md"}]} \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir-mix.out b/tests/fixtures/windows-10/dir-mix.out new file mode 100644 index 00000000..7302114e --- /dev/null +++ b/tests/fixtures/windows-10/dir-mix.out @@ -0,0 +1,22 @@ + Volume in drive C has no label. + Volume Serial Number is 246B-3B5A + + Directory of C:\Users\Yoda\Desktop\jc + +03/25/2021 02:38 PM 4,253 docgen.sh + 1 File(s) 4,253 bytes + + Directory of C:\Users\Yoda\Desktop\jc\docs + +03/25/2021 02:36 PM . +03/25/2021 02:36 PM .. +03/25/2021 02:38 PM parsers +03/25/2021 02:36 PM 2,713 readme.md +03/25/2021 02:36 PM 1,338 utils.md + 2 File(s) 4,051 bytes + + Directory of C:\Users\Yoda\Desktop\jc + +03/25/2021 02:38 PM 58,995 EXAMPLES.md + 1 File(s) 58,995 bytes + 0 Dir(s) 34,115,264,512 bytes free diff --git a/tests/fixtures/windows-10/dir-raw.json b/tests/fixtures/windows-10/dir-raw.json new file mode 100644 index 00000000..4d6cd85d --- /dev/null +++ b/tests/fixtures/windows-10/dir-raw.json @@ -0,0 +1 @@ +{"C:\\Program Files\\Internet Explorer": [{"date": "03/24/2021", "time": "03:15 PM", "dir": true, "size": null, "filename": "."}, {"date": "03/24/2021", "time": "03:15 PM", "dir": true, "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": true, "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": "54,784", "filename": "ExtExport.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": false, "size": "0", "filename": "file name.txt"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": "54,784", "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": "515,072", "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": "504,832", "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": "224,768", "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": "421,888", "filename": "IEShims.dll"}, {"date": "12/06/2019", "time": "02:47 PM", "dir": false, "size": "819,136", "filename": "iexplore.exe"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": "48,536", "filename": "sqmapi.dll"}]} \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir.json b/tests/fixtures/windows-10/dir.json new file mode 100644 index 00000000..082d217a --- /dev/null +++ b/tests/fixtures/windows-10/dir.json @@ -0,0 +1 @@ +{"C:\\Program Files\\Internet Explorer": [{"date": "03/24/2021", "time": "03:15 PM", "dir": true, "size": null, "filename": "."}, {"date": "03/24/2021", "time": "03:15 PM", "dir": true, "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": true, "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 54784, "filename": "ExtExport.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": false, "size": 0, "filename": "file name.txt"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 54784, "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 515072, "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 504832, "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 224768, "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 421888, "filename": "IEShims.dll"}, {"date": "12/06/2019", "time": "02:47 PM", "dir": false, "size": 819136, "filename": "iexplore.exe"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": true, "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": false, "size": 48536, "filename": "sqmapi.dll"}]} \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir.out b/tests/fixtures/windows-10/dir.out new file mode 100644 index 00000000..6da83337 --- /dev/null +++ b/tests/fixtures/windows-10/dir.out @@ -0,0 +1,21 @@ + Volume in drive C has no label. + Volume Serial Number is 246B-3B5A + + Directory of C:\Program Files\Internet Explorer + +03/24/2021 03:15 PM . +03/24/2021 03:15 PM .. +12/07/2019 02:49 AM en-US +12/07/2019 02:09 AM 54,784 ExtExport.exe +03/24/2021 03:15 PM 0 file name.txt +12/07/2019 02:09 AM 54,784 hmmapi.dll +12/07/2019 02:09 AM 515,072 iediagcmd.exe +12/07/2019 02:09 AM 504,832 ieinstal.exe +12/07/2019 02:09 AM 224,768 ielowutil.exe +12/07/2019 02:09 AM 421,888 IEShims.dll +12/06/2019 02:47 PM 819,136 iexplore.exe +12/07/2019 02:14 AM images +12/07/2019 02:14 AM SIGNUP +12/07/2019 02:09 AM 48,536 sqmapi.dll + 9 File(s) 2,643,800 bytes + 5 Dir(s) 36,207,603,712 bytes free diff --git a/tests/test_dir.py b/tests/test_dir.py new file mode 100644 index 00000000..197496ca --- /dev/null +++ b/tests/test_dir.py @@ -0,0 +1,108 @@ +import os +import json +import unittest +import jc.parsers.dir + +THIS_DIR = os.path.dirname(os.path.abspath(__file__)) + + +class MyTests(unittest.TestCase): + + def setUp(self): + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir.out'), + 'r', encoding='utf-8') as f: + self.windows_10_dir = f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir.json'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_json = json.loads(f.read()) + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-raw.json'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_raw_json = json.loads(f.read()) + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-ODTC.out'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_ODTC = f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-ODTC.json'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_ODTC_json = json.loads(f.read()) + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-C.out'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_C = f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-mix.out'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_mix = f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-mix.json'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_mix_json = json.loads(f.read()) + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-files.out'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_files= f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-files.json'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_files_json = json.loads(f.read()) + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-dirs.out'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_dirs= f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-dirs.json'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_dirs_json = json.loads(f.read()) + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-S.out'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_S= f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-S.json'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_S_json = json.loads(f.read()) + + def test_dir_error(self): + self.assertEqual(jc.parsers.dir.parse("Access is denied.", quiet=True), {}) + + def test_dir_empty(self): + self.assertEqual(jc.parsers.dir.parse("", quiet=True), {}) + + def test_dir_windows_10(self): + self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir, quiet=True), + self.windows_10_dir_json) + + def test_dir_windows_10_raw(self): + self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir, raw=True, quiet=True), + self.windows_10_dir_raw_json) + + def test_dir_windows_10_ODTC(self): + self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir_ODTC, quiet=True), + self.windows_10_dir_ODTC_json) + + def test_dir_windows_10_C(self): + self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir_C, quiet=True), + self.windows_10_dir_json) + + def test_dir_windows_10_mix(self): + self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir_mix, quiet=True), + self.windows_10_dir_mix_json) + + def test_dir_windows_10_files(self): + self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir_files, quiet=True), + self.windows_10_dir_files_json) + + def test_dir_windows_10_dirs(self): + self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir_dirs, quiet=True), + self.windows_10_dir_dirs_json) + + def test_dir_windows_10_S(self): + self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir_S, quiet=True), + self.windows_10_dir_S_json) + + +if __name__ == '__main__': + unittest.main()