From a7ad24d2cb61d84cf2846f8fa43af31f0597043e Mon Sep 17 00:00:00 2001 From: Rasheed Elsaleh Date: Thu, 25 Mar 2021 16:45:30 -0400 Subject: [PATCH 1/3] Add dir parser Add usage commands Fix example options update dir.md --- docgen.sh | 1 + docs/parsers/dir.md | 286 ++++++++++++++++++++ jc/cli.py | 1 + jc/parsers/dir.py | 332 ++++++++++++++++++++++++ tests/fixtures/windows-10/dir-C.json | 1 + tests/fixtures/windows-10/dir-C.out | 21 ++ tests/fixtures/windows-10/dir-ODTC.json | 1 + tests/fixtures/windows-10/dir-ODTC.out | 21 ++ tests/fixtures/windows-10/dir-Q.json | 1 + tests/fixtures/windows-10/dir-Q.out | 21 ++ tests/fixtures/windows-10/dir.json | 1 + tests/fixtures/windows-10/dir.out | 21 ++ tests/test_dir.py | 64 +++++ 13 files changed, 772 insertions(+) create mode 100644 docs/parsers/dir.md create mode 100644 jc/parsers/dir.py create mode 100644 tests/fixtures/windows-10/dir-C.json create mode 100644 tests/fixtures/windows-10/dir-C.out create mode 100644 tests/fixtures/windows-10/dir-ODTC.json create mode 100644 tests/fixtures/windows-10/dir-ODTC.out create mode 100644 tests/fixtures/windows-10/dir-Q.json create mode 100644 tests/fixtures/windows-10/dir-Q.out create mode 100644 tests/fixtures/windows-10/dir.json create mode 100644 tests/fixtures/windows-10/dir.out create mode 100644 tests/test_dir.py diff --git a/docgen.sh b/docgen.sh index 96fb2ab3..cc12ffb5 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.du+ > ../docs/parsers/du.md pydocmd simple jc.parsers.env+ > ../docs/parsers/env.md diff --git a/docs/parsers/dir.md b/docs/parsers/dir.md new file mode 100644 index 00000000..4bb47213 --- /dev/null +++ b/docs/parsers/dir.md @@ -0,0 +1,286 @@ + +# jc.parsers.dir +jc - JSON CLI output utility `dir` command output parser + +Options supported: +- `/T timefield` +- `/O sortorder` +- `/C, /-C` +- `/Q` + +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 + [ + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": "." + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": ".." + }, + { + "date": "12/07/2019", + "time": "02:49 AM", + "dir": "", + "size": null, + "filename": "en-US" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 54784, + "filename": "ExtExport.exe" + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": null, + "size": 0, + "filename": "file name.txt" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 54784, + "filename": "hmmapi.dll" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 515072, + "filename": "iediagcmd.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 504832, + "filename": "ieinstal.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 224768, + "filename": "ielowutil.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 421888, + "filename": "IEShims.dll" + }, + { + "date": "12/06/2019", + "time": "02:47 PM", + "dir": null, + "size": 819136, + "filename": "iexplore.exe" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "images" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "SIGNUP" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 48536, + "filename": "sqmapi.dll" + } + ] + + + $ dir | jc --dir -p -m -r + [ + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": "." + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": ".." + }, + { + "date": "12/07/2019", + "time": "02:49 AM", + "dir": "", + "size": null, + "filename": "en-US" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "54,784", + "filename": "ExtExport.exe" + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": null, + "size": "0", + "filename": "file name.txt" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "54,784", + "filename": "hmmapi.dll" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "515,072", + "filename": "iediagcmd.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "504,832", + "filename": "ieinstal.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "224,768", + "filename": "ielowutil.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "421,888", + "filename": "IEShims.dll" + }, + { + "date": "12/06/2019", + "time": "02:47 PM", + "dir": null, + "size": "819,136", + "filename": "iexplore.exe" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "images" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "SIGNUP" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "48,536", + "filename": "sqmapi.dll" + } + ] + + + +## info +```python +info() +``` + + +## process +```python +process(proc_data) +``` + +Final processing to conform to the schema. + +Parameters: + + proc_data: (List of Dictionaries) raw structured data to process + +Returns: + + List of Dictionaries. Structured data with the following schema: + + [ + { + "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 a76b9fbe..36d8ef2e 100644 --- a/jc/cli.py +++ b/jc/cli.py @@ -42,6 +42,7 @@ parsers = [ 'date', 'df', 'dig', + 'dir', 'dmidecode', 'du', 'env', diff --git a/jc/parsers/dir.py b/jc/parsers/dir.py new file mode 100644 index 00000000..4cb57bfb --- /dev/null +++ b/jc/parsers/dir.py @@ -0,0 +1,332 @@ +"""jc - JSON CLI output utility `dir` command output parser + +Options supported: +- `/T timefield` +- `/O sortorder` +- `/C, /-C` +- `/Q` + +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 + [ + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": "." + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": ".." + }, + { + "date": "12/07/2019", + "time": "02:49 AM", + "dir": "", + "size": null, + "filename": "en-US" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 54784, + "filename": "ExtExport.exe" + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": null, + "size": 0, + "filename": "file name.txt" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 54784, + "filename": "hmmapi.dll" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 515072, + "filename": "iediagcmd.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 504832, + "filename": "ieinstal.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 224768, + "filename": "ielowutil.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 421888, + "filename": "IEShims.dll" + }, + { + "date": "12/06/2019", + "time": "02:47 PM", + "dir": null, + "size": 819136, + "filename": "iexplore.exe" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "images" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "SIGNUP" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 48536, + "filename": "sqmapi.dll" + } + ] + + + $ dir | jc --dir -p -m -r + [ + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": "." + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": ".." + }, + { + "date": "12/07/2019", + "time": "02:49 AM", + "dir": "", + "size": null, + "filename": "en-US" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "54,784", + "filename": "ExtExport.exe" + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": null, + "size": "0", + "filename": "file name.txt" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "54,784", + "filename": "hmmapi.dll" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "515,072", + "filename": "iediagcmd.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "504,832", + "filename": "ieinstal.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "224,768", + "filename": "ielowutil.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "421,888", + "filename": "IEShims.dll" + }, + { + "date": "12/06/2019", + "time": "02:47 PM", + "dir": null, + "size": "819,136", + "filename": "iexplore.exe" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "images" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "SIGNUP" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "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: (List of Dictionaries) raw structured data to process + + Returns: + + List of Dictionaries. Structured data with the following schema: + + [ + { + "date": string, + "time": string, + "dir": string, + "size": integer, + "filename: string + } + ] + """ + + for entry in proc_data: + 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(): + # look for first line that starts with a date + if not re.match(r'^\d{2}/\d{2}/\d{4}', line): + continue + + output_line = {} + parsed_line = line.split() + output_line["date"] = parsed_line[0] + output_line["time"] = " ".join(parsed_line[1:3]) + output_line.setdefault("dir", None) + output_line.setdefault("size", None) + if parsed_line[3] == "": + output_line["dir"] = parsed_line[3] + else: + output_line["size"] = parsed_line[3] + + output_line["filename"] = " ".join(parsed_line[4:]) + raw_output.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..b7860aff --- /dev/null +++ b/tests/fixtures/windows-10/dir-C.json @@ -0,0 +1 @@ +[{"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": "."}, {"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": "", "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "ExtExport.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": null, "size": 0, "filename": "file name.txt"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 515072, "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 504832, "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 224768, "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 421888, "filename": "IEShims.dll"}, {"date": "12/06/2019", "time": "02:47 PM", "dir": null, "size": 819136, "filename": "iexplore.exe"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "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..a767c2f5 --- /dev/null +++ b/tests/fixtures/windows-10/dir-ODTC.json @@ -0,0 +1 @@ +[{"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 224768, "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "ExtExport.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 515072, "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 421888, "filename": "IEShims.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 504832, "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 48536, "filename": "sqmapi.dll"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": "", "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:49 AM", "dir": null, "size": 819136, "filename": "iexplore.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": null, "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-Q.json b/tests/fixtures/windows-10/dir-Q.json new file mode 100644 index 00000000..32fef660 --- /dev/null +++ b/tests/fixtures/windows-10/dir-Q.json @@ -0,0 +1 @@ +[{"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": "NT SERVICE\\TrustedInsta."}, {"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": "NT SERVICE\\TrustedInsta.."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": "", "size": null, "filename": "NT SERVICE\\TrustedInstaen-US"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "NT SERVICE\\TrustedInstaExtExport.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": null, "size": 0, "filename": "BUILTIN\\Administrators file name.txt"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "NT SERVICE\\TrustedInstahmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 515072, "filename": "NT SERVICE\\TrustedInstaiediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 504832, "filename": "NT SERVICE\\TrustedInstaieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 224768, "filename": "NT SERVICE\\TrustedInstaielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 421888, "filename": "NT SERVICE\\TrustedInstaIEShims.dll"}, {"date": "12/06/2019", "time": "02:47 PM", "dir": null, "size": 819136, "filename": "NT SERVICE\\TrustedInstaiexplore.exe"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "NT SERVICE\\TrustedInstaimages"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "NT AUTHORITY\\SYSTEM SIGNUP"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 48536, "filename": "NT SERVICE\\TrustedInstasqmapi.dll"}] \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir-Q.out b/tests/fixtures/windows-10/dir-Q.out new file mode 100644 index 00000000..a3123b39 --- /dev/null +++ b/tests/fixtures/windows-10/dir-Q.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 NT SERVICE\TrustedInsta. +03/24/2021 03:15 PM NT SERVICE\TrustedInsta.. +12/07/2019 02:49 AM NT SERVICE\TrustedInstaen-US +12/07/2019 02:09 AM 54,784 NT SERVICE\TrustedInstaExtExport.exe +03/24/2021 03:15 PM 0 BUILTIN\Administrators file name.txt +12/07/2019 02:09 AM 54,784 NT SERVICE\TrustedInstahmmapi.dll +12/07/2019 02:09 AM 515,072 NT SERVICE\TrustedInstaiediagcmd.exe +12/07/2019 02:09 AM 504,832 NT SERVICE\TrustedInstaieinstal.exe +12/07/2019 02:09 AM 224,768 NT SERVICE\TrustedInstaielowutil.exe +12/07/2019 02:09 AM 421,888 NT SERVICE\TrustedInstaIEShims.dll +12/06/2019 02:47 PM 819,136 NT SERVICE\TrustedInstaiexplore.exe +12/07/2019 02:14 AM NT SERVICE\TrustedInstaimages +12/07/2019 02:14 AM NT AUTHORITY\SYSTEM SIGNUP +12/07/2019 02:09 AM 48,536 NT SERVICE\TrustedInstasqmapi.dll + 9 File(s) 2,643,800 bytes + 5 Dir(s) 36,203,749,376 bytes free diff --git a/tests/fixtures/windows-10/dir.json b/tests/fixtures/windows-10/dir.json new file mode 100644 index 00000000..b7860aff --- /dev/null +++ b/tests/fixtures/windows-10/dir.json @@ -0,0 +1 @@ +[{"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": "."}, {"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": "", "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "ExtExport.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": null, "size": 0, "filename": "file name.txt"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 515072, "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 504832, "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 224768, "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 421888, "filename": "IEShims.dll"}, {"date": "12/06/2019", "time": "02:47 PM", "dir": null, "size": 819136, "filename": "iexplore.exe"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "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..b6a908ac --- /dev/null +++ b/tests/test_dir.py @@ -0,0 +1,64 @@ +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-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-Q.out'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_Q = f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-Q.json'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_Q_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_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_Q(self): + self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir_Q, quiet=True), + self.windows_10_dir_Q_json) + + +if __name__ == '__main__': + unittest.main() From d9dbcc8b526c8de9c6d12ac580880fd606dc68cf Mon Sep 17 00:00:00 2001 From: Rasheed Elsaleh Date: Fri, 2 Apr 2021 13:13:05 -0400 Subject: [PATCH 2/3] Add parent dir to structure. Add test cases. Remove support for /Q --- docs/parsers/dir.md | 24 +++++----- jc/parsers/dir.py | 59 +++++++++++++----------- tests/fixtures/windows-10/dir-C.json | 2 +- tests/fixtures/windows-10/dir-ODTC.json | 2 +- tests/fixtures/windows-10/dir-Q.json | 1 - tests/fixtures/windows-10/dir-Q.out | 21 --------- tests/fixtures/windows-10/dir-dirs.json | 1 + tests/fixtures/windows-10/dir-dirs.out | 19 ++++++++ tests/fixtures/windows-10/dir-files.json | 1 + tests/fixtures/windows-10/dir-files.out | 16 +++++++ tests/fixtures/windows-10/dir-mix.json | 1 + tests/fixtures/windows-10/dir-mix.out | 22 +++++++++ tests/fixtures/windows-10/dir-raw.json | 1 + tests/fixtures/windows-10/dir.json | 2 +- tests/test_dir.py | 50 ++++++++++++++++---- 15 files changed, 149 insertions(+), 73 deletions(-) delete mode 100644 tests/fixtures/windows-10/dir-Q.json delete mode 100644 tests/fixtures/windows-10/dir-Q.out create mode 100644 tests/fixtures/windows-10/dir-dirs.json create mode 100644 tests/fixtures/windows-10/dir-dirs.out create mode 100644 tests/fixtures/windows-10/dir-files.json create mode 100644 tests/fixtures/windows-10/dir-files.out create mode 100644 tests/fixtures/windows-10/dir-mix.json create mode 100644 tests/fixtures/windows-10/dir-mix.out create mode 100644 tests/fixtures/windows-10/dir-raw.json diff --git a/docs/parsers/dir.md b/docs/parsers/dir.md index 4bb47213..4bdb4ca7 100644 --- a/docs/parsers/dir.md +++ b/docs/parsers/dir.md @@ -6,7 +6,6 @@ Options supported: - `/T timefield` - `/O sortorder` - `/C, /-C` -- `/Q` Usage (cli): @@ -249,21 +248,22 @@ Final processing to conform to the schema. Parameters: - proc_data: (List of Dictionaries) raw structured data to process + proc_data: (Dictionary of Lists) raw structured data to process Returns: List of Dictionaries. Structured data with the following schema: - - [ - { - "date": string, - "time": string, - "dir": string, - "size": integer, - "filename: string - } - ] + {"parent_dir": + [ + { + "date": string, + "time": string, + "dir": string, + "size": integer, + "filename: string + } + ] + } ## parse diff --git a/jc/parsers/dir.py b/jc/parsers/dir.py index 4cb57bfb..4a3b03f9 100644 --- a/jc/parsers/dir.py +++ b/jc/parsers/dir.py @@ -4,7 +4,6 @@ Options supported: - `/T timefield` - `/O sortorder` - `/C, /-C` -- `/Q` Usage (cli): @@ -255,33 +254,35 @@ def process(proc_data): Parameters: - proc_data: (List of Dictionaries) raw structured data to process + proc_data: (Dictionary of Lists) raw structured data to process Returns: List of Dictionaries. Structured data with the following schema: - - [ - { - "date": string, - "time": string, - "dir": string, - "size": integer, - "filename: string - } - ] + {"parent_dir": + [ + { + "date": string, + "time": string, + "dir": string, + "size": integer, + "filename: string + } + ] + } """ - for entry in proc_data: - 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 + 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 @@ -303,28 +304,32 @@ def parse(data, raw=False, quiet=False): if not quiet: jc.utils.compatibility(__name__, info.compatible) - raw_output = [] + raw_output = {} if jc.utils.has_data(data): for line in data.splitlines(): - # look for first line that starts with a date + 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", None) + output_line.setdefault("dir", False) output_line.setdefault("size", None) if parsed_line[3] == "": - output_line["dir"] = parsed_line[3] + output_line["dir"] = True else: output_line["size"] = parsed_line[3] output_line["filename"] = " ".join(parsed_line[4:]) - raw_output.append(output_line) + raw_output[parent_dir].append(output_line) if raw: return raw_output diff --git a/tests/fixtures/windows-10/dir-C.json b/tests/fixtures/windows-10/dir-C.json index b7860aff..082d217a 100644 --- a/tests/fixtures/windows-10/dir-C.json +++ b/tests/fixtures/windows-10/dir-C.json @@ -1 +1 @@ -[{"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": "."}, {"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": "", "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "ExtExport.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": null, "size": 0, "filename": "file name.txt"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 515072, "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 504832, "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 224768, "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 421888, "filename": "IEShims.dll"}, {"date": "12/06/2019", "time": "02:47 PM", "dir": null, "size": 819136, "filename": "iexplore.exe"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 48536, "filename": "sqmapi.dll"}] \ No newline at end of file +{"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-ODTC.json b/tests/fixtures/windows-10/dir-ODTC.json index a767c2f5..7a561b64 100644 --- a/tests/fixtures/windows-10/dir-ODTC.json +++ b/tests/fixtures/windows-10/dir-ODTC.json @@ -1 +1 @@ -[{"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 224768, "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "ExtExport.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 515072, "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 421888, "filename": "IEShims.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 504832, "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 48536, "filename": "sqmapi.dll"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": "", "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:49 AM", "dir": null, "size": 819136, "filename": "iexplore.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": null, "size": 0, "filename": "file name.txt"}] \ No newline at end of file +{"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-Q.json b/tests/fixtures/windows-10/dir-Q.json deleted file mode 100644 index 32fef660..00000000 --- a/tests/fixtures/windows-10/dir-Q.json +++ /dev/null @@ -1 +0,0 @@ -[{"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": "NT SERVICE\\TrustedInsta."}, {"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": "NT SERVICE\\TrustedInsta.."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": "", "size": null, "filename": "NT SERVICE\\TrustedInstaen-US"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "NT SERVICE\\TrustedInstaExtExport.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": null, "size": 0, "filename": "BUILTIN\\Administrators file name.txt"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "NT SERVICE\\TrustedInstahmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 515072, "filename": "NT SERVICE\\TrustedInstaiediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 504832, "filename": "NT SERVICE\\TrustedInstaieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 224768, "filename": "NT SERVICE\\TrustedInstaielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 421888, "filename": "NT SERVICE\\TrustedInstaIEShims.dll"}, {"date": "12/06/2019", "time": "02:47 PM", "dir": null, "size": 819136, "filename": "NT SERVICE\\TrustedInstaiexplore.exe"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "NT SERVICE\\TrustedInstaimages"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "NT AUTHORITY\\SYSTEM SIGNUP"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 48536, "filename": "NT SERVICE\\TrustedInstasqmapi.dll"}] \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir-Q.out b/tests/fixtures/windows-10/dir-Q.out deleted file mode 100644 index a3123b39..00000000 --- a/tests/fixtures/windows-10/dir-Q.out +++ /dev/null @@ -1,21 +0,0 @@ - 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 NT SERVICE\TrustedInsta. -03/24/2021 03:15 PM NT SERVICE\TrustedInsta.. -12/07/2019 02:49 AM NT SERVICE\TrustedInstaen-US -12/07/2019 02:09 AM 54,784 NT SERVICE\TrustedInstaExtExport.exe -03/24/2021 03:15 PM 0 BUILTIN\Administrators file name.txt -12/07/2019 02:09 AM 54,784 NT SERVICE\TrustedInstahmmapi.dll -12/07/2019 02:09 AM 515,072 NT SERVICE\TrustedInstaiediagcmd.exe -12/07/2019 02:09 AM 504,832 NT SERVICE\TrustedInstaieinstal.exe -12/07/2019 02:09 AM 224,768 NT SERVICE\TrustedInstaielowutil.exe -12/07/2019 02:09 AM 421,888 NT SERVICE\TrustedInstaIEShims.dll -12/06/2019 02:47 PM 819,136 NT SERVICE\TrustedInstaiexplore.exe -12/07/2019 02:14 AM NT SERVICE\TrustedInstaimages -12/07/2019 02:14 AM NT AUTHORITY\SYSTEM SIGNUP -12/07/2019 02:09 AM 48,536 NT SERVICE\TrustedInstasqmapi.dll - 9 File(s) 2,643,800 bytes - 5 Dir(s) 36,203,749,376 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 index b7860aff..082d217a 100644 --- a/tests/fixtures/windows-10/dir.json +++ b/tests/fixtures/windows-10/dir.json @@ -1 +1 @@ -[{"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": "."}, {"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": "", "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "ExtExport.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": null, "size": 0, "filename": "file name.txt"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 515072, "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 504832, "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 224768, "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 421888, "filename": "IEShims.dll"}, {"date": "12/06/2019", "time": "02:47 PM", "dir": null, "size": 819136, "filename": "iexplore.exe"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 48536, "filename": "sqmapi.dll"}] \ No newline at end of file +{"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/test_dir.py b/tests/test_dir.py index b6a908ac..8fdb8004 100644 --- a/tests/test_dir.py +++ b/tests/test_dir.py @@ -17,6 +17,10 @@ class MyTests(unittest.TestCase): '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() @@ -29,24 +33,44 @@ class MyTests(unittest.TestCase): '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-Q.out'), + 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_Q = f.read() + self.windows_10_dir_mix = f.read() - with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-Q.json'), + 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_Q_json = json.loads(f.read()) + 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()) def test_dir_error(self): - self.assertEqual(jc.parsers.dir.parse("Access is denied.", quiet=True), []) + self.assertEqual(jc.parsers.dir.parse("Access is denied.", quiet=True), {}) def test_dir_empty(self): - self.assertEqual(jc.parsers.dir.parse("", quiet=True), []) + 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) @@ -55,9 +79,17 @@ class MyTests(unittest.TestCase): self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir_C, quiet=True), self.windows_10_dir_json) - def test_dir_windows_10_Q(self): - self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir_Q, quiet=True), - self.windows_10_dir_Q_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) if __name__ == '__main__': From 5b60c7445a3f8bd2ae1587aa0ffaeaf093966f9a Mon Sep 17 00:00:00 2001 From: Rasheed Elsaleh Date: Fri, 2 Apr 2021 13:43:06 -0400 Subject: [PATCH 3/3] Add support for /S and update documentation --- docs/parsers/dir.md | 404 +++++++++++++------------- jc/parsers/dir.py | 405 ++++++++++++++------------- tests/fixtures/windows-10/dir-S.json | 1 + tests/fixtures/windows-10/dir-S.out | 47 ++++ tests/test_dir.py | 12 + 5 files changed, 469 insertions(+), 400 deletions(-) create mode 100644 tests/fixtures/windows-10/dir-S.json create mode 100644 tests/fixtures/windows-10/dir-S.out diff --git a/docs/parsers/dir.md b/docs/parsers/dir.md index 4bdb4ca7..c84b3334 100644 --- a/docs/parsers/dir.md +++ b/docs/parsers/dir.md @@ -27,209 +27,213 @@ Compatibility: Examples: $ dir | jc --dir -p -m - [ - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": "", - "size": null, - "filename": "." - }, - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": "", - "size": null, - "filename": ".." - }, - { - "date": "12/07/2019", - "time": "02:49 AM", - "dir": "", - "size": null, - "filename": "en-US" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 54784, - "filename": "ExtExport.exe" - }, - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": null, - "size": 0, - "filename": "file name.txt" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 54784, - "filename": "hmmapi.dll" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 515072, - "filename": "iediagcmd.exe" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 504832, - "filename": "ieinstal.exe" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 224768, - "filename": "ielowutil.exe" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 421888, - "filename": "IEShims.dll" - }, - { - "date": "12/06/2019", - "time": "02:47 PM", - "dir": null, - "size": 819136, - "filename": "iexplore.exe" - }, - { - "date": "12/07/2019", - "time": "02:14 AM", - "dir": "", - "size": null, - "filename": "images" - }, - { - "date": "12/07/2019", - "time": "02:14 AM", - "dir": "", - "size": null, - "filename": "SIGNUP" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 48536, - "filename": "sqmapi.dll" - } - ] + { + "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 - [ - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": "", - "size": null, - "filename": "." - }, - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": "", - "size": null, - "filename": ".." - }, - { - "date": "12/07/2019", - "time": "02:49 AM", - "dir": "", - "size": null, - "filename": "en-US" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "54,784", - "filename": "ExtExport.exe" - }, - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": null, - "size": "0", - "filename": "file name.txt" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "54,784", - "filename": "hmmapi.dll" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "515,072", - "filename": "iediagcmd.exe" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "504,832", - "filename": "ieinstal.exe" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "224,768", - "filename": "ielowutil.exe" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "421,888", - "filename": "IEShims.dll" - }, - { - "date": "12/06/2019", - "time": "02:47 PM", - "dir": null, - "size": "819,136", - "filename": "iexplore.exe" - }, - { - "date": "12/07/2019", - "time": "02:14 AM", - "dir": "", - "size": null, - "filename": "images" - }, - { - "date": "12/07/2019", - "time": "02:14 AM", - "dir": "", - "size": null, - "filename": "SIGNUP" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "48,536", - "filename": "sqmapi.dll" - } - ] + { + "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" + } + ] + } diff --git a/jc/parsers/dir.py b/jc/parsers/dir.py index 4a3b03f9..bd42622e 100644 --- a/jc/parsers/dir.py +++ b/jc/parsers/dir.py @@ -4,6 +4,7 @@ Options supported: - `/T timefield` - `/O sortorder` - `/C, /-C` +- `/S` Usage (cli): @@ -25,209 +26,213 @@ Compatibility: Examples: $ dir | jc --dir -p -m - [ - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": "", - "size": null, - "filename": "." - }, - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": "", - "size": null, - "filename": ".." - }, - { - "date": "12/07/2019", - "time": "02:49 AM", - "dir": "", - "size": null, - "filename": "en-US" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 54784, - "filename": "ExtExport.exe" - }, - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": null, - "size": 0, - "filename": "file name.txt" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 54784, - "filename": "hmmapi.dll" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 515072, - "filename": "iediagcmd.exe" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 504832, - "filename": "ieinstal.exe" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 224768, - "filename": "ielowutil.exe" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 421888, - "filename": "IEShims.dll" - }, - { - "date": "12/06/2019", - "time": "02:47 PM", - "dir": null, - "size": 819136, - "filename": "iexplore.exe" - }, - { - "date": "12/07/2019", - "time": "02:14 AM", - "dir": "", - "size": null, - "filename": "images" - }, - { - "date": "12/07/2019", - "time": "02:14 AM", - "dir": "", - "size": null, - "filename": "SIGNUP" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": 48536, - "filename": "sqmapi.dll" - } - ] + { + "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 - [ - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": "", - "size": null, - "filename": "." - }, - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": "", - "size": null, - "filename": ".." - }, - { - "date": "12/07/2019", - "time": "02:49 AM", - "dir": "", - "size": null, - "filename": "en-US" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "54,784", - "filename": "ExtExport.exe" - }, - { - "date": "03/24/2021", - "time": "03:15 PM", - "dir": null, - "size": "0", - "filename": "file name.txt" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "54,784", - "filename": "hmmapi.dll" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "515,072", - "filename": "iediagcmd.exe" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "504,832", - "filename": "ieinstal.exe" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "224,768", - "filename": "ielowutil.exe" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "421,888", - "filename": "IEShims.dll" - }, - { - "date": "12/06/2019", - "time": "02:47 PM", - "dir": null, - "size": "819,136", - "filename": "iexplore.exe" - }, - { - "date": "12/07/2019", - "time": "02:14 AM", - "dir": "", - "size": null, - "filename": "images" - }, - { - "date": "12/07/2019", - "time": "02:14 AM", - "dir": "", - "size": null, - "filename": "SIGNUP" - }, - { - "date": "12/07/2019", - "time": "02:09 AM", - "dir": null, - "size": "48,536", - "filename": "sqmapi.dll" - } - ] + { + "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 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/test_dir.py b/tests/test_dir.py index 8fdb8004..197496ca 100644 --- a/tests/test_dir.py +++ b/tests/test_dir.py @@ -57,6 +57,14 @@ class MyTests(unittest.TestCase): '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), {}) @@ -91,6 +99,10 @@ class MyTests(unittest.TestCase): 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()