MRG: remerge in %z and %f datetime format

pull/368/head
Daniel Black 2013-09-20 21:18:44 +10:00
parent 0f283f8b6f
commit d9f0438a8d
2 changed files with 25 additions and 20 deletions

View File

@ -53,6 +53,8 @@ class DateDetector:
def addDefaultTemplate(self):
self.__lock.acquire()
try:
# asctime with subsecond
self.appendTemplate("%a %b %d %H:%M:%S.%f %Y")
# asctime
self.appendTemplate("%a %b %d %H:%M:%S %Y")
# asctime without year
@ -67,17 +69,19 @@ class DateDetector:
# (See http://bugs.debian.org/537610)
self.appendTemplate("%d/%m/%y %H:%M:%S")
# Apache format [31/Oct/2006:09:22:55 -0000]
self.appendTemplate("%d/%b/%Y:%H:%M:%S")
self.appendTemplate("%d/%b/%Y:%H:%M:%S %z")
# CPanel 05/20/2008:01:57:39
self.appendTemplate("%m/%d/%Y:%H:%M:%S")
# custom for syslog-ng 2006.12.21 06:43:20
self.appendTemplate("%Y.%m.%d %H:%M:%S")
# named 26-Jul-2007 15:20:52.252
self.appendTemplate("%d-%b-%Y %H:%M:%S")
self.appendTemplate("%d-%b-%Y %H:%M:%S.%f")
# roundcube 26-Jul-2007 15:20:52 +0200
self.appendTemplate("%d-%b-%Y %H:%M:%S %z")
# 17-07-2008 17:23:25
self.appendTemplate("%d-%m-%Y %H:%M:%S")
# 01-27-2012 16:22:44.252
self.appendTemplate("%m-%d-%Y %H:%M:%S")
self.appendTemplate("%m-%d-%Y %H:%M:%S.%f")
# TAI64N
template = DateTai64n()
template.setName("TAI64N")

View File

@ -51,6 +51,7 @@ class DateTemplate:
return self.__name
def setRegex(self, regex, wordBegin=True):
#logSys.debug(u"setRegex for %s is %r" % (self.__name, regex))
regex = regex.strip()
if (wordBegin and not re.search(r'^\^', regex)):
regex = r'\b' + regex
@ -115,16 +116,16 @@ class DateStrptime(DateTemplate):
def __init__(self):
DateTemplate.__init__(self)
self.__pattern = ""
self.__unsupportedStrptimeBits = False
self._pattern = ""
self._unsupportedStrptimeBits = False
def setPattern(self, pattern):
self.__unsupported_f = not DateStrptime._f and re.search('%f', pattern)
self.__unsupported_z = not DateStrptime._z and re.search('%z', pattern)
self.__pattern = pattern
self._unsupported_f = not DateStrptime._f and re.search('%f', pattern)
self._unsupported_z = not DateStrptime._z and re.search('%z', pattern)
self._pattern = pattern
def getPattern(self):
return self.__pattern
return self._pattern
#@staticmethod
def convertLocale(date):
@ -142,11 +143,11 @@ class DateStrptime(DateTemplate):
if dateMatch:
datePattern = self.getPattern()
if self.__unsupported_f:
if self._unsupported_f:
if dateMatch.group('_f'):
datePattern = re.sub(r'%f', dateMatch.group('_f'), datePattern)
logSys.debug(u"Replacing %%f with %r now %r" % (dateMatch.group('_f'), datePattern))
if self.__unsupported_z:
if self._unsupported_z:
if dateMatch.group('_z'):
datePattern = re.sub(r'%z', dateMatch.group('_z'), datePattern)
logSys.debug(u"Replacing %%z with %r now %r" % (dateMatch.group('_z'), datePattern))
@ -175,7 +176,7 @@ class DateStrptime(DateTemplate):
"be tested due to already present year mark in the "
"pattern" % (opattern, e))
if self.__unsupported_z:
if self._unsupported_z:
z = dateMatch.group('_z')
if z:
delta = timedelta(hours=int(z[1:3]),minutes=int(z[3:]))
@ -231,21 +232,24 @@ except ValueError:
class DatePatternRegex(DateStrptime):
_reEscape = r"([\\.^$*+?\(\){}\[\]|])"
_patternRE = r"%(%|[aAbBdHIjmMpSUwWyY])"
_patternRE = r"%(%|[aAbBdfHIjmMpSUwWyYz])"
_patternName = {
'a': "DAY", 'A': "DAYNAME", 'b': "MON", 'B': "MONTH", 'd': "Day",
'H': "24hour", 'I': "12hour", 'j': "Yearday", 'm': "Month",
'M': "Minute", 'p': "AMPM", 'S': "Second", 'U': "Yearweek",
'w': "Weekday", 'W': "Yearweek", 'y': 'Year2', 'Y': "Year", '%': "%"}
'w': "Weekday", 'W': "Yearweek", 'y': 'Year2', 'Y': "Year", '%': "%",
'z': "Zone offset", 'f': "Microseconds" }
_patternRegex = {
'a': r"\w{3}", 'A': r"\w+", 'b': r"\w{3}", 'B': r"\w+",
'd': r"(?:3[0-1]|[1-2]\d|[ 0]?\d)", 'H': r"(?:2[0-3]|1\d|[ 0]?\d)",
'd': r"(?:3[0-1]|[1-2]\d|[ 0]?\d)",
'f': r"\d{1,6}", 'H': r"(?:2[0-3]|1\d|[ 0]?\d)",
'I': r"(?:1[0-2]|[ 0]?\d)",
'j': r"(?:36[0-6]3[0-5]\d|[1-2]\d\d|[ 0]?\d\d|[ 0]{0,2}\d)",
'm': r"(?:1[0-2]|[ 0]?[1-9])", 'M': r"[0-5]\d", 'p': r"[AP]M",
'S': r"(?:6[01]|[0-5]\d)", 'U': r"(?:5[0-3]|[1-4]\d|[ 0]?\d)",
'w': r"[0-6]", 'W': r"(?:5[0-3]|[ 0]?\d)", 'y': r"\d{2}",
'Y': r"\d{4}", '%': "%"}
'Y': r"\d{4}",
'z': r"(?P<_z>[+-]\d{4})", '%': "%"}
def __init__(self, pattern=None, **kwargs):
DateStrptime.__init__(self)
@ -253,7 +257,7 @@ class DatePatternRegex(DateStrptime):
self.setPattern(pattern, **kwargs)
def setPattern(self, pattern, anchor=False, **kwargs):
self.__pattern = pattern.strip()
DateStrptime.setPattern(self, pattern.strip())
name = re.sub(self._patternRE, r'%(\1)s', pattern) % self._patternName
DateStrptime.setName(self, name)
@ -266,9 +270,6 @@ class DatePatternRegex(DateStrptime):
regex = r"^" + regex
DateStrptime.setRegex(self, regex, **kwargs)
def getPattern(self):
return self.__pattern
def setRegex(self, line):
raise NotImplementedError("Regex derived from pattern")