Split off reusable date validator into separate function

This commit is contained in:
Scot Hacker 2019-03-16 00:32:18 -07:00
parent 474f6ef2ed
commit e40c171610
2 changed files with 23 additions and 24 deletions

View file

@ -1,4 +1,4 @@
Title,Group,Task List,Created By,Created Date,Due Date,Completed,Assigned To,Note,Priority Title,Group,Task List,Created By,Created Date,Due Date,Completed,Assigned To,Note,Priority
Make dinner,Scuba Divers,Web project,shacker,,2019-06-14,No,,Please check with mgmt first,3 Make dinner,Scuba Divers,Web project,shacker,,2019-06-14,No,,Please check with mgmt first,3
Bake bread,Scuba Divers,Example List,mr_random,2012-03-14,,Yes,,, Bake bread,Scuba Divers,Example List,mr_random,2012-03-14,,Yes,,,
Bring dessert,Scuba Divers,Web project,user1,2015-06-24,,,user1,Every generation throws a hero up the pop charts,77 Bring dessert,Scuba Divers,Web project,user1,2015-06-248,,,user1,Every generation throws a hero up the pop charts,77
1 Title Group Task List Created By Created Date Due Date Completed Assigned To Note Priority
2 Make dinner Scuba Divers Web project shacker 2019-06-14 No Please check with mgmt first 3
3 Bake bread Scuba Divers Example List mr_random 2012-03-14 Yes
4 Bring dessert Scuba Divers Web project user1 2015-06-24 2015-06-248 user1 Every generation throws a hero up the pop charts 77

View file

@ -98,7 +98,9 @@ class CSVImporter:
def validate_row(self, row): def validate_row(self, row):
"""Perform data integrity checks and set default values. Returns a valid object for insertion, or False. """Perform data integrity checks and set default values. Returns a valid object for insertion, or False.
Errors are stored for later display.""" Errors are stored for later display. Intentionally not broken up into separate validator functions because
there are interdpendencies, such as checking for existing `creator` in one place and then using
that creator for group membership check in others."""
row_errors = [] row_errors = []
@ -155,28 +157,17 @@ class CSVImporter:
row_errors.append(msg) row_errors.append(msg)
# ####################### # #######################
# Validate Due Date # Validate Dates
dd = row.get("Due Date") datefields = ["Due Date", "Created Date"]
if dd: for datefield in datefields:
try: datestring = row.get(datefield)
row["Due Date"] = datetime.datetime.strptime(dd, "%Y-%m-%d") if datestring:
except ValueError: valid_date = self.validate_date(datestring)
msg = f"Could not convert Due Date {dd} to python date" if valid_date:
row_errors.append(msg) row[datefield] = valid_date
else: else:
row["Created Date"] = None # Override default empty string '' value msg = f"Could not convert {datefield} {datestring} to valid date instance"
# #######################
# Validate Created Date
cd = row.get("Created Date")
if cd:
try:
row["Created Date"] = datetime.datetime.strptime(cd, "%Y-%m-%d")
except ValueError:
msg = f"Could not convert Created Date {cd} to python date"
row_errors.append(msg) row_errors.append(msg)
else:
row["Created Date"] = None # Override default empty string '' value
# ####################### # #######################
# Group membership checks have passed # Group membership checks have passed
@ -195,3 +186,11 @@ class CSVImporter:
# No errors: # No errors:
return row return row
def validate_date(self, datestring):
"""Inbound date string from CSV translates to a valid python date."""
try:
date_obj = datetime.datetime.strptime(datestring, "%Y-%m-%d")
return date_obj
except ValueError:
return False