[CalendarServer-changes] [12724] PyCalendar/trunk/src/pycalendar
source_changes at macosforge.org
source_changes at macosforge.org
Wed Mar 12 11:24:48 PDT 2014
Revision: 12724
http://trac.calendarserver.org//changeset/12724
Author: cdaboo at apple.com
Date: 2014-02-19 12:00:06 -0800 (Wed, 19 Feb 2014)
Log Message:
-----------
Be tolerant of leading spaces instead of zeros in date values.
Modified Paths:
--------------
PyCalendar/trunk/src/pycalendar/datetime.py
PyCalendar/trunk/src/pycalendar/parser.py
PyCalendar/trunk/src/pycalendar/tests/test_datetime.py
Modified: PyCalendar/trunk/src/pycalendar/datetime.py
===================================================================
--- PyCalendar/trunk/src/pycalendar/datetime.py 2014-02-19 19:59:34 UTC (rev 12723)
+++ PyCalendar/trunk/src/pycalendar/datetime.py 2014-02-19 20:00:06 UTC (rev 12724)
@@ -18,6 +18,7 @@
from pycalendar import utils
from pycalendar.duration import Duration
from pycalendar.icalendar import definitions
+from pycalendar.parser import ParserContext
from pycalendar.timezone import Timezone
from pycalendar.valueutils import ValueMixin
import cStringIO as StringIO
@@ -968,7 +969,7 @@
self.mDay = int(data[index:index + 2])
index += 2
- if ' ' in data[:index]:
+ if ' ' in data[:index] and ParserContext.INVALID_DATETIME_LEADINGSPACE == ParserContext.PARSER_RAISE:
raise ValueError
if self.mYear < 0 or self.mMonth < 0 or self.mDay < 0:
raise ValueError
Modified: PyCalendar/trunk/src/pycalendar/parser.py
===================================================================
--- PyCalendar/trunk/src/pycalendar/parser.py 2014-02-19 19:59:34 UTC (rev 12723)
+++ PyCalendar/trunk/src/pycalendar/parser.py 2014-02-19 20:00:06 UTC (rev 12724)
@@ -46,6 +46,9 @@
# Allow DATE values when DATETIME specified (and vice versa)
INVALID_DATETIME_VALUE = PARSER_FIX
+ # Allow leading space instead of leading zeros for year in DATE or DATE-TIME values
+ INVALID_DATETIME_LEADINGSPACE = PARSER_ALLOW
+
# Allow slightly invalid DURATION values
INVALID_DURATION_VALUE = PARSER_FIX
Modified: PyCalendar/trunk/src/pycalendar/tests/test_datetime.py
===================================================================
--- PyCalendar/trunk/src/pycalendar/tests/test_datetime.py 2014-02-19 19:59:34 UTC (rev 12723)
+++ PyCalendar/trunk/src/pycalendar/tests/test_datetime.py 2014-02-19 20:00:06 UTC (rev 12724)
@@ -16,11 +16,20 @@
from pycalendar.datetime import DateTime
from pycalendar.icalendar.calendar import Calendar
+from pycalendar.parser import ParserContext
from pycalendar.timezone import Timezone
import unittest
class TestDateTime(unittest.TestCase):
+ def _patch(self, obj, attr, value):
+ oldvalue = getattr(obj, attr)
+ setattr(obj, attr, value)
+ def _restore():
+ setattr(obj, attr, oldvalue)
+ self.addCleanup(_restore)
+
+
def testDuplicateASUTC(self):
items = (
@@ -95,6 +104,8 @@
def testBadParse(self):
+ self._patch(ParserContext, "INVALID_DATETIME_LEADINGSPACE", ParserContext.PARSER_RAISE)
+
data1 = (
"2011",
"201101023",
@@ -128,6 +139,24 @@
self.assertRaises(ValueError, DateTime.parseText, item, False)
+ def testBadParseFixed(self):
+
+ self._patch(ParserContext, "INVALID_DATETIME_LEADINGSPACE", ParserContext.PARSER_ALLOW)
+
+ data = (
+ (" 10102", "00010102"),
+ ("2001 102", "20010102"),
+ ("200101 2", "20010102"),
+ (" 10102T010101", "00010102T010101"),
+ ("2001 102T010101", "20010102T010101"),
+ ("200101 2T010101", "20010102T010101"),
+ )
+
+ for item, result in data:
+ dt = DateTime.parseText(item)
+ self.assertEqual(str(dt), result)
+
+
def testCachePreserveOnAdjustment(self):
# UTC first
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140312/6fcf79cc/attachment.html>
More information about the calendarserver-changes
mailing list