[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