def _parse_datestring(self, qstring): # This method parses a very simple datetime representation of the form # YYYY[MM[DD[hh[mm[ss[uuuuuu]]]]]] from whoosh.support.times import adatetime, fix, is_void qstring = qstring.replace(" ", "").replace("-", "").replace(".", "") year = month = day = hour = minute = second = microsecond = None if len(qstring) >= 4: year = int(qstring[:4]) if len(qstring) >= 6: month = int(qstring[4:6]) if len(qstring) >= 8: day = int(qstring[6:8]) if len(qstring) >= 10: hour = int(qstring[8:10]) if len(qstring) >= 12: minute = int(qstring[10:12]) if len(qstring) >= 14: second = int(qstring[12:14]) if len(qstring) == 20: microsecond = int(qstring[14:]) at = fix(adatetime(year, month, day, hour, minute, second, microsecond)) if is_void(at): raise Exception("%r is not a parseable date" % qstring) return at
def parse(self, text, dt, pos=0, debug=-9999): dates = [] first = True print_debug(debug, "Combo %s sep=%r text=%r", self.name, self.sep_pattern, text[pos:]) for e in self.elements: if self.sep_expr and not first: print_debug(debug, "Combo %s looking for sep at %r", self.name, text[pos:]) m = self.sep_expr.match(text, pos) if m: pos = m.end() else: print_debug(debug, "Combo %s didn't find sep", self.name) return (None, None) print_debug(debug, "Combo %s trying=%r", self.name, e) try: at, pos = e.parse(text, dt, pos, debug + 1) except TimeError: at, pos = None, None print_debug(debug, "Combo %s result=%r", self.name, at) if at is None: return (None, None) first = False if is_void(at): continue if len(dates) == self.max: print_debug(debug, "Combo %s length > %s", self.name, self.max) return (None, None) dates.append(at) print_debug(debug, "Combo %s dates=%r", self.name, dates) if len(dates) < self.min: print_debug(debug, "Combo %s length < %s", self.name, self.min) return (None, None) return (self.dates_to_timespan(dates), pos)
def parse(self, text, dt, pos=0, debug= -9999): dates = [] first = True print_debug(debug, "Combo %s sep=%r text=%r", self.name, self.sep_pattern, text[pos:]) for e in self.elements: if self.sep_expr and not first: print_debug(debug, "Combo %s looking for sep at %r", self.name, text[pos:]) m = self.sep_expr.match(text, pos) if m: pos = m.end() else: print_debug(debug, "Combo %s didn't find sep", self.name) return (None, None) print_debug(debug, "Combo %s trying=%r", self.name, e) try: at, pos = e.parse(text, dt, pos, debug + 1) except TimeError: at, pos = None, None print_debug(debug, "Combo %s result=%r", self.name, at) if at is None: return (None, None) first = False if is_void(at): continue if len(dates) == self.max: print_debug(debug, "Combo %s length > %s", self.name, self.max) return (None, None) dates.append(at) print_debug(debug, "Combo %s dates=%r", self.name, dates) if len(dates) < self.min: print_debug(debug, "Combo %s length < %s", self.name, self.min) return (None, None) return (self.dates_to_timespan(dates), pos)