Skip to content

Commit

Permalink
Factor the date parsing code out to a separate function
Browse files Browse the repository at this point in the history
  • Loading branch information
chatcannon committed Jul 2, 2021
1 parent cec14e6 commit 4ebdc66
Showing 1 changed file with 22 additions and 19 deletions.
41 changes: 22 additions & 19 deletions galvani/BioLogic.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,26 @@ def MPTfileCSV(file_or_path):
}


def parse_BioLogic_date(date_text):
"""Parse a date from one of the various formats used by Bio-Logic files."""
date_formats = ['%m/%d/%y', '%m-%d-%y', '%m.%d.%y']
if isinstance(date_text, bytes):
date_string = date_text.decode('ascii')
else:
date_string = date_text
for date_format in date_formats:
try:
tm = time.strptime(date_string, date_format)
except ValueError:
continue
else:
break
else:
raise ValueError(f'Could not parse timestamp {date_string!r}'
f' with any of the formats {date_formats}')
return date(tm.tm_year, tm.tm_mon, tm.tm_mday)


def VMPdata_dtype_from_colIDs(colIDs):
"""Get a numpy record type from a list of column ID numbers.
Expand Down Expand Up @@ -397,12 +417,7 @@ def __init__(self, file_or_path):
self.version = int(data_module['version'])
self.cols = column_types
self.npts = n_data_points

try:
tm = time.strptime(settings_mod['date'].decode('ascii'), '%m/%d/%y')
except ValueError:
tm = time.strptime(settings_mod['date'].decode('ascii'), '%m-%d-%y')
self.startdate = date(tm.tm_year, tm.tm_mon, tm.tm_mday)
self.startdate = parse_BioLogic_date(settings_mod['date'])

if maybe_loop_module:
loop_module, = maybe_loop_module
Expand All @@ -416,19 +431,7 @@ def __init__(self, file_or_path):

if maybe_log_module:
log_module, = maybe_log_module
date_string = log_module['date'].decode('ascii')
date_formats = ['%m/%d/%y', '%m-%d-%y', '%m.%d.%y']
for date_format in date_formats:
try:
tm = time.strptime(date_string, date_format)
except ValueError:
continue
else:
break
else:
raise ValueError(f'Could not parse timestamp {date_string!r}'
f' with any of the formats {date_formats}')
self.enddate = date(tm.tm_year, tm.tm_mon, tm.tm_mday)
self.enddate = parse_BioLogic_date(log_module['date'])

# There is a timestamp at either 465 or 469 bytes
# I can't find any reason why it is one or the other in any
Expand Down

0 comments on commit 4ebdc66

Please sign in to comment.