Skip to content

Commit e07204f

Browse files
Use trk code to determine datetime from free text before trying dateparser for 100x speed improvement
1 parent 76cd773 commit e07204f

File tree

1 file changed

+19
-18
lines changed

1 file changed

+19
-18
lines changed

timetracker/epoch/epoch.py

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from datetime import datetime
1515
from datetime import date
1616
from datetime import timedelta
17-
##from timeit import default_timer
17+
#from timeit import default_timer # PRT
1818
from pytimeparse2 import parse as pyt2_parse_secs
1919
from dateparser import parse as dateparser_parserdt
2020
from dateparser.conf import SettingValidationError
@@ -77,20 +77,21 @@ def get_now():
7777

7878
def get_dtz(elapsed_or_dt, dta, defaultdt=None):
7979
"""Get stop datetime, given a start time and a specific or elapsed time"""
80-
##if (dto := _get_dt_ampm(elapsed_or_dt, defaultdt)) is not None:
81-
## return dto
80+
# _get_dt_ampm(elapsed_or_dt, defaultdt) # PRT
81+
if (dto := _get_dt_ampm(elapsed_or_dt, defaultdt)) is not None:
82+
return dto
8283
if (dto := _get_dt_from_td(elapsed_or_dt, dta)) is not None:
8384
return dto
8485
return _conv_datetime(elapsed_or_dt, defaultdt)
8586

8687
def _conv_datetime(timestr, defaultdt):
8788
try:
8889
settings = None if defaultdt is None else {'RELATIVE_BASE': defaultdt}
89-
##tic = default_timer() # PRT
90+
# tic = default_timer() # PRT
9091
dto = dateparser_parserdt(timestr, settings=settings)
91-
##print(f'{timedelta(seconds=default_timer()-tic)} dateparser parse({timestr})') # PRT
92-
##if dto is None: # PRT
93-
## print(f'ERROR: text({timestr}) could not be converted to a datetime object') # PRT
92+
# print(f'{timedelta(seconds=default_timer()-tic)} dateparser parse({timestr})') # PRT
93+
# if dto is None: # PRT
94+
# print(f'ERROR: text({timestr}) could not be converted to a datetime object') # PRT
9495
return dto
9596
except (ValueError, TypeError, SettingValidationError) as err:
9697
print(f'ERROR FROM python-dateparser: {err}')
@@ -99,25 +100,25 @@ def _conv_datetime(timestr, defaultdt):
99100

100101
def _get_dt_ampm(elapsed_or_dt, defaultdt):
101102
"""Get a datetime object from free text that contains AM/PM"""
102-
##tic = default_timer() # PRT
103-
##print(f'TEXT({elapsed_or_dt})') # PRT
103+
# tic = default_timer() # PRT
104+
# print(f'TEXT({elapsed_or_dt})') # PRT
104105
ret = None
105106
if (mtch := search_texttime(elapsed_or_dt)) is not None and 'hour' in mtch:
106-
##print(f'{timedelta(seconds=default_timer()-tic)} parse({elapsed_or_dt}) SM') # PRT
107+
# print(f'{timedelta(seconds=default_timer()-tic)} parse({elapsed_or_dt}) SM') # PRT
107108
_get_ymd(mtch, defaultdt)
108-
##print(f'{timedelta(seconds=default_timer()-tic)} parse({elapsed_or_dt}) today()') # PRT
109+
# print(f'{timedelta(seconds=default_timer()-tic)} parse({elapsed_or_dt}) today()') # PRT
109110
ret = datetime(year=mtch['year'], month=mtch['month'], day=mtch['day'],
110111
hour=mtch['hour'],
111112
minute=mtch.get('minute', 0),
112113
second=mtch.get('second', 0))
113-
##print(f'DEFAULTDT: {today} {ret}') # PRT
114-
##print(f'{timedelta(seconds=default_timer()-tic)} parse({elapsed_or_dt}) new datetime') # PRT
114+
# print(f'{timedelta(seconds=default_timer()-tic)} parse({elapsed_or_dt}) new datetime') # PRT
115115
return ret
116116

117117
def _get_ymd(mtch, defaultdt):
118118
if {'year', 'month', 'day'}.issubset(set(mtch.keys())):
119119
return
120120
today = date.today() if defaultdt is None else defaultdt
121+
# print(f'DEFAULTDT: {today}') # PRT
121122
if 'year' not in mtch:
122123
mtch['year'] = today.year
123124
if 'month' not in mtch:
@@ -131,14 +132,14 @@ def _get_dt_from_td(elapsed_or_dt, dta):
131132
return dta + timedelta(seconds=secs)
132133
return None
133134

134-
def _conv_timedelta(elapsed_or_dt):
135+
def _conv_timedelta(timestr):
135136
try:
136-
##tic = default_timer() # PRT
137-
ret = pyt2_parse_secs(elapsed_or_dt)
138-
##print(f'{timedelta(seconds=default_timer()-tic)} pytimeparse2 parse({elapsed_or_dt})') # PRT
137+
# tic = default_timer() # PRT
138+
ret = pyt2_parse_secs(timestr)
139+
# print(f'{timedelta(seconds=default_timer()-tic)} pytimeparse2 parse({timestr})') # PRT
139140
return ret
140141
except TypeError as err:
141-
raise RuntimeError(f'UNABLE TO CONVERT str({elapsed_or_dt}) '
142+
raise RuntimeError(f'UNABLE TO CONVERT str({timestr}) '
142143
'TO A timedelta object') from err
143144

144145
# Copyright (C) 2025-present, DV Klopfenstein, PhD. All rights reserved.

0 commit comments

Comments
 (0)