def pop_date_range_field(temp_item, row, cur_attr, sep="|"): """ adds value to DateRangeField on the current temp_item :param temp_item: a model class object :param row: A pandas DataFrame row with column names matching the items field names :param cur_attr: field name of the temp_item object :param sep: The separator used between start and end date :return: The temp_item """ lookup_val = fd.get(cur_attr, cur_attr) if pd.isnull(row[lookup_val]): return temp_item elif isinstance(row[lookup_val], str) and sep in row[lookup_val]: if len(row[lookup_val].split(sep)) == 2: start_date, end_date = row[lookup_val].split('/') try: valid_start = parse(start_date) valid_end = parse(end_date) except Exception as e: print( f"could not parse {start_date} or {end_date} due to: {e}") valid_end = None if valid_end is not None: setattr(temp_item, cur_attr, (start_date, end_date)) return temp_item return temp_item else: return temp_item
def pop_date_field(temp_item, row, cur_attr): """ adds value to DateField on the current temp_item :param temp_item: a model class object :param row: A pandas DataFrame row with column names matching the items field names :param cur_attr: field name of the temp_item object :return: The temp_item """ lookup_val = fd.get(cur_attr, cur_attr) if isinstance(row[lookup_val], float): value = None if isinstance(row[lookup_val], int): value = parse(f"{row[lookup_val]}-01-01") elif isinstance(row[lookup_val], datetime.date): value = row[cur_attr] elif isinstance(row[lookup_val], str): try: value = parse(row[lookup_val]) except Exception as e: print( f"{row[lookup_val]} for field: {cur_attr} could not be parsed, due to Error: {e}" ) value = None elif pd.isnull(row[lookup_val]): value = None if value is not None: setattr(temp_item, cur_attr, value) return temp_item