diff options
| author | Wayne-Cole <77279425+Wacky404@users.noreply.github.com> | 2025-01-15 21:25:38 -0600 |
|---|---|---|
| committer | Wayne-Cole <77279425+Wacky404@users.noreply.github.com> | 2025-01-15 21:25:38 -0600 |
| commit | 20ec14565bd52225547ab55665a058587783f561 (patch) | |
| tree | 95b99225b6ebb68f5ee4d45b9d0ea4e5b349ff58 | |
| parent | 2a298dfcb458839db7bde1f403d608006b9bc8ca (diff) | |
| download | worklogger-20ec14565bd52225547ab55665a058587783f561.tar.xz worklogger-20ec14565bd52225547ab55665a058587783f561.zip | |
feat: finished main application just have to add tests and email feature
| -rw-r--r-- | src/args_worklogger.py | 2 | ||||
| -rw-r--r-- | src/funcs_worklogger.py | 68 | ||||
| -rw-r--r-- | src/test/test_args.py | 40 | ||||
| -rw-r--r-- | src/utils/log_util_worklogger.py (renamed from src/log_util_worklogger.py) | 0 | ||||
| -rw-r--r-- | src/utils/paths_util_worklogger.py (renamed from src/paths_util_worklogger.py) | 0 | ||||
| -rwxr-xr-x | src/worklog | 8 | ||||
| -rw-r--r-- | test/__init__.py (renamed from src/test/__init__.py) | 0 | ||||
| -rw-r--r-- | test/test_args.py | 74 | ||||
| -rw-r--r-- | test/test_functions.py (renamed from src/test/test_functions.py) | 0 |
9 files changed, 127 insertions, 65 deletions
diff --git a/src/args_worklogger.py b/src/args_worklogger.py index a6afea7..2ab2bc4 100644 --- a/src/args_worklogger.py +++ b/src/args_worklogger.py @@ -4,7 +4,7 @@ ARGUMENTS FILE FOR WORKLOGGER author: Wacky404 <wacky404@dev.com> """ -from funcs_worklogger import configure +from src.funcs_worklogger import configure import argparse diff --git a/src/funcs_worklogger.py b/src/funcs_worklogger.py index b18ae1a..0c1161e 100644 --- a/src/funcs_worklogger.py +++ b/src/funcs_worklogger.py @@ -5,15 +5,16 @@ IMPLEMENTATION FILE FOR WORKLOGGER author: Wacky404 <wacky404@dev.com> """ -from log_util_worklogger import logger +from src.utils.log_util_worklogger import logger from datetime import timezone, datetime from pathlib import Path -import paths_util_worklogger as pu +import src.utils.paths_util_worklogger as pu import os.path as osp import json import csv import os import sys +import copy TIME_FORMAT = "%Y-%m-%dT%H:%M:%S%Z" @@ -53,7 +54,7 @@ def _prep_write(format, s_log, p_settings, _dt, k_args): return s_log, None, None - elif format == '.csv': + elif format == '.csv' or format == '.json': cp_kwargs = { 'timestamp': f"{dt.strftime(TIME_FORMAT)}" } @@ -109,6 +110,13 @@ def _write_file(p_save, p_backup, format, j_upper, len_file, _cp_kwargs, _log_st fd, fieldnames=_field_names) for _kwarg in _cp_kwargs: csv_writer.writerow(_kwarg) + elif format == '.json' and len_file == 0 or len_file == None: + with open(chosen_job, 'w') as fd: + json.dump(['job', _cp_kwargs], fd, indent=4) + elif format == '.json' and len_file >= 1: + with open(chosen_job, 'a') as fd: + fd_data = json.load(fd) + json.dump(fd_data, fd, indent=4) else: with open(chosen_job, 'a') as fd: for _log in _log_str: @@ -159,23 +167,24 @@ def parse(filepath): elif val: csv_log += f"{key}:{val}," - lines.append(csv_log) + lines.append(csv_log.rstrip()) return lines elif ext == '.json': lines = [] with open(filepath, 'r') as fd: - _lines = fd.readlines() - for l in _lines: - line_str = '' - line = json.loads(l) - print(type(line)) - print(line.keys()) - for col in FIELDS: - if col in line.keys(): - line_str += f"{col}:{line[col]}," + fd_data = json.load(fd) + for json_ele in fd_data['job']: + json_log = '' + for key, val in json_ele.items(): + if key == 'timestamp': + json_log += f"{val}," + elif key == 'job': + json_log += f"{key}:{val}," + elif val: + json_log += f"{key}:{val}," - lines.append(line_str) + lines.append(json_log.rstrip()) return lines @@ -212,7 +221,8 @@ def add_log(file_format=None, proj_settings=None, savepath=None, backuppath=None "Do you want to add an end time for the last entry? (Y/n) ") if add_endtime == 'Y': insert_time = input("End Time: ") - with open(chosen_job, 'a') as fd: + # worklog TEST -p Name -loc remote -s now -m "this is a test!" + with open(chosen_job, 'a+') as fd: if file_format == '.txt': if insert_time.lower() == 'now': fd.write( @@ -223,12 +233,28 @@ def add_log(file_format=None, proj_settings=None, savepath=None, backuppath=None elif file_format == '.csv': csv_writer = csv.DictWriter( fd, fieldnames=['timestamp'] + [x if x != 'message' else 'desc' for x in kwargs.keys()]) - if insert_time == 'now': + if insert_time.lower() == 'now': csv_writer.writerow( {'timestamp': f"{dt.strftime(TIME_FORMAT)}", 'job': kwargs['job'], 'end': f"{dt.strftime("'%H:%M'")}"}) else: csv_writer.writerow( {'timestamp': f"{dt.strftime(TIME_FORMAT)}", 'job': kwargs['job'], 'end': f"{insert_time}"}) + elif file_format == '.json': + fd_data = json.load(fd) + _deepkwargs = copy.deepcopy(kwargs) + _deepkwargs['desc'] = _deepkwargs.pop( + 'message', None + ) + if insert_time.lower() == 'now': + _deepkwargs['end'] = insert_time + else: + continue + + fd_data["job"].append(_deepkwargs) + file.seek(0) + + json.dump(fd_data, fd, indent=4) + break elif add_endtime == 'n': @@ -269,8 +295,8 @@ def combine_log(target_job, specified_ext, target_extension=None, savepath=None, f"Details: {str(e)}") return None - csv_logs = [] - if specified_ext == '.csv': + csv_json_logs = [] + if specified_ext == '.csv' or specified_ext == '.json': for log in buffer: # buffer contains index, log line, dt stamp _log = {} @@ -292,10 +318,12 @@ def combine_log(target_job, specified_ext, target_extension=None, savepath=None, if val is not None: _log[var] = val - csv_logs.append(_log) + csv_json_logs.append(_log) _write_file(p_save=savepath, p_backup=None, format=specified_ext, j_upper=target_job.upper(), - len_file=None, _cp_kwargs=csv_logs, _log_str=[x[1] for x in buffer], + len_file=None, _cp_kwargs=csv_json_logs if csv_json_logs else [], + _log_str=[x[1] + for x in buffer] if specified_ext == '.txt' else [], _field_names=['timestamp', 'job', 'proj', 'loc', 'time', 'start', 'end', 'desc']) if delete: diff --git a/src/test/test_args.py b/src/test/test_args.py deleted file mode 100644 index 0858b1f..0000000 --- a/src/test/test_args.py +++ /dev/null @@ -1,40 +0,0 @@ -from args_worklogger import parser -from argparse import Namespace -import unittest - - -class TestArgs(unittest.TestCase): - def test_argsbase(self): - _flags = parser.parse_args( - "'not so great company' -p govwork -loc remote -t 1 -s now -m 'testing again, does this work'" - ) - self.assertIsInstance(_flags, Namespace) - _flagsDict = vars(_flags) - self.assertIsInstance(_flagsDict, dict) - - def test_argsmerge(self): - _filetypes = ['csv', 'txt', 'json'] - for file in _filetypes: - _flags = _flags = parser.parse_args( - f"'test_job' merge {file} --delete" - ) - print(_flags) - self.assertIsInstance(_flags, Namespace) - _flagsDict = vars(_flags) - self.assertIsInstance(_flagsDict, dict) - self.assertEqual(True, _flagsDict['delete']) - - _flags = parser.parse_args( - "'test_job' merge txt" - ) - self.assertIsInstance(_flags, Namespace) - _flagsDict = vars(_flags) - self.assertIsInstance(_flagsDict, dict) - self.assertEqual(False, _flagsDict['delete']) - - def test_argsemail(self): - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/src/log_util_worklogger.py b/src/utils/log_util_worklogger.py index 9fdbd6a..9fdbd6a 100644 --- a/src/log_util_worklogger.py +++ b/src/utils/log_util_worklogger.py diff --git a/src/paths_util_worklogger.py b/src/utils/paths_util_worklogger.py index b2b6ee8..b2b6ee8 100644 --- a/src/paths_util_worklogger.py +++ b/src/utils/paths_util_worklogger.py diff --git a/src/worklog b/src/worklog index de2981f..3926680 100755 --- a/src/worklog +++ b/src/worklog @@ -9,11 +9,11 @@ import sys import os import os.path as osp import logging -import paths_util_worklogger as pu -from funcs_worklogger import configure, add_log, combine_log -from args_worklogger import parser +import src.utils.paths_util_worklogger as pu +from src.funcs_worklogger import configure, add_log, combine_log +from src.args_worklogger import parser from pathlib import Path -from log_util_worklogger import logger, setup_logging +from src.util.log_util_worklogger import logger, setup_logging from typing import Optional diff --git a/src/test/__init__.py b/test/__init__.py index e69de29..e69de29 100644 --- a/src/test/__init__.py +++ b/test/__init__.py diff --git a/test/test_args.py b/test/test_args.py new file mode 100644 index 0000000..9ca0110 --- /dev/null +++ b/test/test_args.py @@ -0,0 +1,74 @@ +# TODO: Don't forget to strftime the fake dates for my TIME_FORMAT +from src.args_worklogger import parser +from argparse import Namespace +import subprocess +import os +import unittest +import random + + +TIME_FORMAT = "%Y-%m-%dT%H:%M:%S%Z" +FIELDS = ["timestamp", "job", "proj", "loc", "time", "start", "end", "desc"] + + +class TestArgs(unittest.TestCase): + fields = '' + for x in FIELDS: + if x == 'start' or x == 'end': + continue + fields += f'{x},' + cmd = f'fake -n {random.randint(50, 100)} date,job,word,word,time,sentence -f json -c ' + fields + print(cmd) + data = subprocess.getoutput(cmd) + print(data) + + def test_argsbase(self): + _flags = parser.parse_args( + [ + 'not so great company', + '-p', 'govwork', + '-loc', 'remote', + '-t', '1', + '-s', 'now', + '-m', 'testing again, does this work' + ] + ) + self.assertIsInstance(_flags, Namespace) + _flagsDict = vars(_flags) + self.assertIsInstance(_flagsDict, dict) + + def test_argsmerge(self): + _filetypes = ['csv', 'text', 'json'] + for file in _filetypes: + _flags = _flags = parser.parse_args( + [ + 'test_job', + 'merge', f'{file}', + '--delete' + ] + + ) + print(_flags) + self.assertIsInstance(_flags, Namespace) + _flagsDict = vars(_flags) + self.assertIsInstance(_flagsDict, dict) + self.assertEqual(True, _flagsDict['delete']) + + for file in _filetypes: + _flags = parser.parse_args( + [ + 'test_job', + 'merge', f'{file}' + ] + ) + self.assertIsInstance(_flags, Namespace) + _flagsDict = vars(_flags) + self.assertIsInstance(_flagsDict, dict) + self.assertEqual(False, _flagsDict['delete']) + + def test_argsemail(self): + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/src/test/test_functions.py b/test/test_functions.py index 97f80fb..97f80fb 100644 --- a/src/test/test_functions.py +++ b/test/test_functions.py |
