def _parse_simple_cases(self, source: str, reference: datetime) -> DateTimeResolutionResult: result = DateTimeResolutionResult() year = reference.year month = reference.month no_year = False input_year = False match = regex.search(self.config.simple_cases_regex, source) if not match or match.start() != 0 or len(match.group()) != len(source): return result days = RegExpUtility.get_group_list(match, Constants.DAY_GROUP_NAME) begin_day = self.config.day_of_month[days[0]] end_day = self.config.day_of_month[days[1]] month_str = RegExpUtility.get_group(match, Constants.MONTH_GROUP_NAME) if month_str.strip() != '': month = self.config.month_of_year[month_str] else: month_str = RegExpUtility.get_group(match, Constants.REL_MONTH) month += self.config.get_swift_day_or_month(month_str) if month < 0: month = 0 year -= 1 elif month > 11: month = 11 year += 1 year_str = RegExpUtility.get_group(match, Constants.YEAR_GROUP_NAME) if year_str.strip() != '': year = int(year_str) input_year = True else: no_year = True begin_date_luis = DateTimeFormatUtil.luis_date( year if input_year or self.config.is_future(month_str) else -1, month, begin_day) end_date_luis = DateTimeFormatUtil.luis_date( year if input_year or self.config.is_future(month_str) else -1, month, end_day) future_past_begin_date = DateUtils.generate_dates(no_year, reference, year, month, begin_day) future_past_end_date = DateUtils.generate_dates(no_year, reference, year, month, end_day) result.timex = f'({begin_date_luis},{end_date_luis},P{end_day - begin_day}D)' result.future_value = [ future_past_begin_date[0], future_past_end_date[0] ] result.past_value = [ future_past_begin_date[1], future_past_end_date[1] ] result.success = True return result
def _parse_simple_cases(self, source: str, reference: datetime) -> DateTimeResolutionResult: result = DateTimeResolutionResult() year = reference.year month = reference.month no_year = False input_year = False match = regex.search(self.config.simple_cases_regex, source) if not match or match.start() != 0 or len( match.group()) != len(source): return result days = RegExpUtility.get_group_list(match, 'day') begin_day = self.config.day_of_month[days[0]] end_day = self.config.day_of_month[days[1]] month_str = RegExpUtility.get_group(match, 'month') if month_str.strip() != '': month = self.config.month_of_year[month_str] else: month_str = RegExpUtility.get_group(match, 'relmonth') month += self.config.get_swift_day_or_month(month_str) if month < 0: month = 0 year -= 1 elif month > 11: month = 11 year += 1 year_str = RegExpUtility.get_group(match, 'year') if year_str.strip() != '': year = int(year_str) input_year = True else: no_year = True begin_date_luis = DateTimeFormatUtil.luis_date( year if input_year or self.config.is_future(month_str) else -1, month, begin_day) end_date_luis = DateTimeFormatUtil.luis_date( year if input_year or self.config.is_future(month_str) else -1, month, end_day) future_year = year past_year = year start_date = DateUtils.safe_create_from_min_value( year, month, begin_day) if no_year and start_date < reference: future_year += 1 if no_year and start_date >= reference: past_year -= 1 result.timex = f'({begin_date_luis},{end_date_luis},P{end_day - begin_day}D)' result.future_value = [ DateUtils.safe_create_from_min_value(future_year, month, begin_day), DateUtils.safe_create_from_min_value(future_year, month, end_day) ] result.past_value = [ DateUtils.safe_create_from_min_value(past_year, month, begin_day), DateUtils.safe_create_from_min_value(past_year, month, end_day) ] result.success = True return result