diff --git a/tests/pkgtttest/timestrs.py b/tests/pkgtttest/timestrs.py index 101aa16..9c4d24b 100755 --- a/tests/pkgtttest/timestrs.py +++ b/tests/pkgtttest/timestrs.py @@ -73,9 +73,9 @@ # ======================================================== # ======================================================== - '2025-01-02 12am':{ - 'exp_dct':{'year': 2025, 'month': 1, 'day': 2, 'hour': 0}, - 'dt': datetime(2025, 1, 2, 0, 0, 0) + f'{NOW.year}-01-02 12am':{ + 'exp_dct':{'year': NOW.year, 'month': 1, 'day': 2, 'hour': 0}, + 'dt': datetime(NOW.year, 1, 2, 0, 0, 0) }, '01-02 12:01am':{ @@ -103,15 +103,15 @@ 'dt': datetime(NOW.year, NOW.month, NOW.day, 13, 23, 0), }, - '2025':{ + f'{NOW.year}':{ 'exp_dct': None, 'dt': None, }, - '2025-06-10 08:57:12 AM':{ - 'exp_dct':{'year': 2025, 'month': 6, 'day': 10, + f'{NOW.year}-06-10 08:57:12 AM':{ + 'exp_dct':{'year': NOW.year, 'month': 6, 'day': 10, 'hour': 8, 'minute': 57, 'second': 12}, - 'dt': datetime(2025, 6, 10, 8, 57, 12), + 'dt': datetime(NOW.year, 6, 10, 8, 57, 12), }, # ======================================================== @@ -119,22 +119,22 @@ '06-10 08:57:12 AM':{ 'exp_dct':{'month': 6, 'day': 10, 'hour': 8, 'minute': 57, 'second': 12}, - 'dt': datetime(2025, 6, 10, 8, 57, 12), + 'dt': datetime(NOW.year, 6, 10, 8, 57, 12), }, '6-10 08:57:12 AM':{ 'exp_dct':{'month': 6, 'day': 10, 'hour': 8, 'minute': 57, 'second': 12}, - 'dt': datetime(2025, 6, 10, 8, 57, 12), + 'dt': datetime(NOW.year, 6, 10, 8, 57, 12), }, # timetracker-csv requires a value for an hour - '2025-06-10':{'exp_dct': None, 'dt': None}, + f'{NOW.year}-06-10':{'exp_dct': None, 'dt': None}, - '2025-06-10 8:57:12am':{ - 'exp_dct':{'year': 2025, 'month': 6, 'day': 10, + f'{NOW.year}-06-10 8:57:12am':{ + 'exp_dct':{'year': NOW.year, 'month': 6, 'day': 10, 'hour': 8, 'minute': 57, 'second': 12}, - 'dt': datetime(2025, 6, 10, 8, 57, 12), + 'dt': datetime(NOW.year, 6, 10, 8, 57, 12), }, # ======================================================== diff --git a/tests/test_epoch_input.py b/tests/test_epoch_input.py index a033ee7..b6bda4f 100755 --- a/tests/test_epoch_input.py +++ b/tests/test_epoch_input.py @@ -22,20 +22,26 @@ def test_epoch_input(): """Test processing a researcher datetime or elapsed time string""" + print('\nTEST TIME DELTAs:') for txt, exp in _get_tdelta_n_exp(): act = parse_tdelta(txt) debug(f'{txt:20} {act}') assert isinstance(act, int) assert act == exp, f'TDELTA({txt}): ACT({act}) != EXP({exp})' - dttest = datetime.strptime("Wed 2025-02-19 03:00:51 PM", FMTDT_H) - for idx, (txt, exp) in enumerate(_get_dt_n_expdt(dttest)): + print('\nTEST DATES:') + today = datetime.today() + dttest = datetime.strptime(f"Wed {today.year}-02-19 03:00:51 PM", FMTDT_H) + for idx, (txt, exp) in enumerate(_get_dt_n_expdt(dttest, today)): act = parse_dt(txt) - debug(f'{txt:26} {str(act):26} {exp}') - assert act == exp, f'{idx}) TSTR({txt}): ACT({act}) != EXP({exp})' + debug(f' TXTSTR: {txt:26} ACT: {str(act):26} EXP: {exp}') + if act != exp: + print(f'\n{idx}) ACT != EXP:\n TSTR({txt})\nACT({act})\nEXP({exp})') + #assert act == exp, f'{idx}) ACT != EXP:\n TSTR({txt})\nACT({act})\nEXP({exp})' #assert isinstance(act, int) # "Today" is 2525 + print('\nTEST DATE 2525:') assert str(parse_dt('4am', default=DT2525)) == "2525-01-01 04:00:00" assert str(parse_dt('5:00 pm', default=DT2525)) == "2525-01-01 17:00:00" assert str(parse_dt('5:30pm', default=DT2525)) == "2525-01-01 17:30:00" @@ -58,24 +64,26 @@ def _get_tdelta_n_exp(): ("4:00:00", hour4), ) -def _get_dt_n_expdt(dtval): +def _get_dt_n_expdt(dtval, today): """Get tests and the expected result""" + # Round to not worry about delta time executed in test round30min = RoundTime(30) - dtp = round30min.time_ceil(dtval + timedelta(minutes=90)) - dtp2 = round30min.time_ceil(dtval + timedelta(minutes=120)) - today = datetime.today() + dtrnddn = round30min.time_ceil(dtval + timedelta(minutes=90)) + dtrndup = round30min.time_ceil(dtval + timedelta(minutes=120)) + year = today.year + # text-string expected return ( - ("2025-02-19 17:00:00", dtp ), - ("2025-02-19 05:00:00 pm", dtp ), - ("02-19 17:00:00", dtp ), - ("02-19 05:00:00 pm", dtp ), - ("02-19 5pm", dtp ), - ("02-19 5:00 pm", dtp ), - ("2-19 5:30 pm", dtp2), + (f"{year}-02-19 17:00:00", dtrnddn ), + (f"{year}-02-19 05:00:00 pm", dtrnddn ), + ("02-19 17:00:00", dtrnddn ), + ("02-19 05:00:00 pm", dtrnddn ), + ("02-19 5pm", dtrnddn ), + ("02-19 5:00 pm", dtrnddn ), + ("2-19 5:30 pm", dtrndup), # pylint: disable=line-too-long - ("5:00 pm", datetime(today.year, today.month, today.day, dtp.hour, dtp.minute, dtp.second)), - ("5:30 pm", datetime(today.year, today.month, today.day, dtp2.hour, dtp2.minute, dtp2.second)), - # ("4 days, 9:33:54.912101", dtp), # No + ("5:00 pm", datetime(year, today.month, today.day, dtrnddn.hour, dtrnddn.minute, dtrnddn.second)), + ("5:30 pm", datetime(year, today.month, today.day, dtrndup.hour, dtrndup.minute, dtrndup.second)), + # ("4 days, 9:33:54.912101", dtrnddn), # No ) diff --git a/timetracker/cfg/cfg.py b/timetracker/cfg/cfg.py index 3ab1c8e..3ef3f63 100755 --- a/timetracker/cfg/cfg.py +++ b/timetracker/cfg/cfg.py @@ -92,6 +92,13 @@ def _init_localproj(self, dirgit, project, dircsv, fcfg_global, quiet, no_git_ad print(f'Ran `git add {filestr}`') if not quiet: print(f'Initialized project directory: {self.cfg_loc.dircfg}') + if dircsv is not None and not exists(dircsv): + self._prt_exist0_dir(dircsv) + + @staticmethod + def _prt_exist0_dir(dircsv): + print(f'\n**WARNING-DIR NOT EXIST: {dircsv}') + print('**WARNING-CREATE THE DIRECTORY BEFORE STOPPING THE TIMER') def reinit(self, dirgit, project=None, dircsv=None, fcfg_global=None, dirhome=None): """Re-initialize the project, keeping existing files""" diff --git a/timetracker/cmd/start.py b/timetracker/cmd/start.py index 986cb5d..d244201 100755 --- a/timetracker/cmd/start.py +++ b/timetracker/cmd/start.py @@ -80,7 +80,7 @@ def _get_next_starttime(fcsv): def _get_msg(start_at, force, last): if force: return "start reset to" - return "started now" if start_at is None and last is None else "started at" + return "started now" if start_at is None and not last else "started at" # Copyright (C) 2025-present, DV Klopfenstein, PhD. All rights reserved. diff --git a/timetracker/msgs.py b/timetracker/msgs.py index 3734ca0..fd7744a 100755 --- a/timetracker/msgs.py +++ b/timetracker/msgs.py @@ -45,11 +45,11 @@ def str_init_empty_proj(cfglocal): def str_init0(): """Simple trk init message""" - return 'Run `trk init` to initialize time-tracking' + return 'Run `trk init` or `trk init --csvdir ./doc` to initialize time-tracking' def str_init(dirproj): """Message that occurs when there is no Timetracking config file""" - return ('Run `trk init` to initialize time-tracking ' + return ('Run `trk init` or `trk init --csvdir ./doc` to initialize time-tracking ' f'for the project in {dirproj}') def str_notrkrepo_mount(mountname, trkdir):