Beispiel #1
0
    def test_parse_duration_prescribed_relative(self):
        resultduration = _parse_duration_prescribed('P1Y', True)
        self.assertEqual(resultduration,
                         dateutil.relativedelta.relativedelta(years=1))

        resultduration = _parse_duration_prescribed('P1M', True)
        self.assertEqual(resultduration,
                         dateutil.relativedelta.relativedelta(months=1))

        #Add the relative ‘days’ argument to the absolute day. Notice that the ‘weeks’ argument is multiplied by 7 and added to ‘days’.
        #http://dateutil.readthedocs.org/en/latest/relativedelta.html
        resultduration = _parse_duration_prescribed('P1W', True)
        self.assertEqual(resultduration,
                         dateutil.relativedelta.relativedelta(days=7))

        resultduration = _parse_duration_prescribed('P1.5W', True)
        self.assertEqual(resultduration,
                         dateutil.relativedelta.relativedelta(days=10.5))

        #Make sure we truncate, not round
        #https://bitbucket.org/nielsenb/aniso8601/issues/10/sub-microsecond-precision-in-durations-is
        resultduration = parse_duration('PT0.0000001S', relative=True)
        self.assertEqual(resultduration,
                         dateutil.relativedelta.relativedelta(0))

        resultduration = parse_duration('PT2.0000048S', relative=True)
        self.assertEqual(
            resultduration,
            dateutil.relativedelta.relativedelta(seconds=2.000004))
Beispiel #2
0
    def test_parse_duration_prescribed_relative_nodateutil(self):
        import sys
        import dateutil

        dateutil_import = dateutil

        sys.modules['dateutil'] = None

        with self.assertRaises(RuntimeError):
            _parse_duration_prescribed('P1Y', True)

        #Reinstall dateutil
        sys.modules['dateutil'] = dateutil
Beispiel #3
0
    def test_parse_duration_prescribed_relative(self):
        resultduration = _parse_duration_prescribed('P1Y', True)
        self.assertEqual(resultduration.years, 1)

        resultduration = _parse_duration_prescribed('P1M', True)
        self.assertEqual(resultduration.months, 1)

        #Add the relative ‘days’ argument to the absolute day. Notice that the ‘weeks’ argument is multiplied by 7 and added to ‘days’.
        #http://dateutil.readthedocs.org/en/latest/relativedelta.html
        resultduration = _parse_duration_prescribed('P1W', True)
        self.assertEqual(resultduration.days, 7)

        resultduration = _parse_duration_prescribed('P1.5W', True)
        self.assertEqual(resultduration.days,
                         10.5)  #Fractional weeks are allowed
Beispiel #4
0
    def test_parse_duration_prescribed_negative(self):
        with self.assertRaises(NegativeDurationError):
            _parse_duration_prescribed('P-T1H', builder=None)

        with self.assertRaises(NegativeDurationError):
            _parse_duration_prescribed('P-T2M', builder=None)

        with self.assertRaises(NegativeDurationError):
            _parse_duration_prescribed('P-T3S', builder=None)

        with self.assertRaises(NegativeDurationError):
            _parse_duration_prescribed('P-4W', builder=None)

        with self.assertRaises(NegativeDurationError):
            _parse_duration_prescribed('P-1Y2M3DT4H54M6S', builder=None)
    def test_parse_duration_prescribed(self):
        testtuples = (('P1Y2M3DT4H54M6S', {'PnY': '1', 'PnM': '2',
                                           'PnW': None, 'PnD': '3',
                                           'TnH': '4', 'TnM': '54',
                                           'TnS': '6'}),
                      ('P1Y2M3DT4H54M6,5S', {'PnY': '1', 'PnM': '2',
                                             'PnW': None, 'PnD': '3',
                                             'TnH': '4', 'TnM': '54',
                                             'TnS': '6.5'}),
                      ('P1Y2M3DT4H54M6.5S', {'PnY': '1', 'PnM': '2',
                                             'PnW': None, 'PnD': '3',
                                             'TnH': '4', 'TnM': '54',
                                             'TnS': '6.5'}),
                      ('PT4H54M6,5S', {'PnY': None, 'PnM': None,
                                       'PnW': None, 'PnD': None,
                                       'TnH': '4', 'TnM': '54',
                                       'TnS': '6.5'}),
                      ('PT4H54M6.5S', {'PnY': None, 'PnM': None,
                                       'PnW': None, 'PnD': None,
                                       'TnH': '4', 'TnM': '54',
                                       'TnS': '6.5'}),
                      ('P1Y2M3D', {'PnY': '1', 'PnM': '2', ''
                                   'PnW': None, 'PnD': '3'}),
                      ('P1Y2M3,5D', {'PnY': '1', 'PnM': '2',
                                     'PnW': None, 'PnD': '3.5'}),
                      ('P1Y2M3.5D', {'PnY': '1', 'PnM': '2',
                                     'PnW': None, 'PnD': '3.5'}),
                      ('P1Y2M', {'PnY': '1', 'PnM': '2',
                                 'PnW': None, 'PnD': None}),
                      ('P1Y', {'PnY': '1', 'PnM': None,
                               'PnW': None, 'PnD': None}),
                      ('P1,5Y', {'PnY': '1.5', 'PnM': None, 'PnW': None,
                                 'PnD': None}),
                      ('P1.5Y', {'PnY': '1.5', 'PnM': None, 'PnW': None,
                                 'PnD': None}),
                      ('P1M', {'PnY': None, 'PnM': '1', 'PnW': None,
                               'PnD': None}),
                      ('P1,5M', {'PnY': None, 'PnM': '1.5', 'PnW': None,
                                 'PnD':None}),
                      ('P1.5M', {'PnY': None, 'PnM': '1.5', 'PnW': None,
                                 'PnD':None}),
                      ('P1W', {'PnY': None, 'PnM': None, 'PnW': '1',
                               'PnD': None}),
                      ('P1,5W', {'PnY': None, 'PnM': None, 'PnW': '1.5',
                                 'PnD': None}),
                      ('P1.5W', {'PnY': None, 'PnM': None, 'PnW': '1.5',
                                 'PnD': None}),
                      ('P1D', {'PnY': None, 'PnM': None, 'PnW': None,
                               'PnD': '1'}),
                      ('P1,5D', {'PnY': None, 'PnM': None, 'PnW': None,
                                 'PnD': '1.5'}),
                      ('P1.5D', {'PnY': None, 'PnM': None, 'PnW': None,
                                 'PnD': '1.5'}))

        for testtuple in testtuples:
            result = _parse_duration_prescribed(testtuple[0])

            self.assertEqual(result, testtuple[1])
    def test_parse_duration_prescribed(self):
        testtuples = (('P1Y2M3DT4H54M6S', {'PnY': '1', 'PnM': '2',
                                           'PnD': '3', 'TnH': '4',
                                           'TnM': '54', 'TnS': '6'}),
                      ('P1Y2M3DT4H54M6.5S', {'PnY': '1', 'PnM': '2',
                                             'PnD': '3', 'TnH': '4',
                                             'TnM': '54', 'TnS': '6.5'}),
                      ('P1Y2M3DT4H54M6,5S', {'PnY': '1', 'PnM': '2',
                                             'PnD': '3', 'TnH': '4',
                                             'TnM': '54', 'TnS': '6.5'}),
                      ('PT4H54M6.5S', {'PnY': None, 'PnM': None, 'PnD': None,
                                       'TnH': '4', 'TnM': '54', 'TnS': '6.5'}),
                      ('PT4H54M6,5S', {'PnY': None, 'PnM': None, 'PnD': None,
                                       'TnH': '4', 'TnM': '54', 'TnS': '6.5'}),
                      ('P1Y2M3D', {'PnY': '1', 'PnM': '2',
                                   'PnW': None, 'PnD': '3'}),
                      ('P1Y2M3.5D', {'PnY': '1', 'PnM': '2',
                                     'PnW': None, 'PnD': '3.5'}),
                      ('P1Y2M3,5D', {'PnY': '1', 'PnM': '2',
                                     'PnW': None, 'PnD': '3.5'}),
                      ('P1Y', {'PnY': '1', 'PnM': None,
                               'PnW': None, 'PnD': None}),
                      ('P1.5Y', {'PnY': '1.5', 'PnM': None, 'PnW': None,
                                 'PnD': None}),
                      ('P1,5Y', {'PnY': '1.5', 'PnM': None, 'PnW': None,
                                 'PnD': None}),
                      ('P1M', {'PnY': None, 'PnM': '1', 'PnW': None,
                               'PnD': None}),
                      ('P1.5M', {'PnY': None, 'PnM': '1.5', 'PnW': None,
                                 'PnD': None}),
                      ('P1,5M', {'PnY': None, 'PnM': '1.5', 'PnW': None,
                                 'PnD': None}),
                      ('P1W', {'PnY': None, 'PnM': None, 'PnW': '1',
                               'PnD': None}),
                      ('P1.5W', {'PnY': None, 'PnM': None, 'PnW': '1.5',
                                 'PnD': None}),
                      ('P1,5W', {'PnY': None, 'PnM': None, 'PnW': '1.5',
                                 'PnD': None}),
                      ('P1D', {'PnY': None, 'PnM': None, 'PnW': None,
                               'PnD': '1'}),
                      ('P1.5D', {'PnY': None, 'PnM': None, 'PnW': None,
                                 'PnD': '1.5'}),
                      ('P1,5D', {'PnY': None, 'PnM': None, 'PnW': None,
                                 'PnD': '1.5'}))

        for testtuple in testtuples:
            mockBuilder = mock.Mock()
            mockBuilder.build_duration.return_value = testtuple[1]

            result = _parse_duration_prescribed(testtuple[0], mockBuilder)

            self.assertEqual(result, testtuple[1])
            mockBuilder.build_duration.assert_called_once_with(**testtuple[1])
Beispiel #7
0
 def test_parse_duration_prescribed_relative_fractionalmonth(self):
     #Fractional months and years are not defined
     #https://github.com/dateutil/dateutil/issues/40
     with self.assertRaises(RelativeValueError):
         _parse_duration_prescribed('P1.5M', True)
Beispiel #8
0
    def test_parse_duration_prescribed(self):
        resultduration = _parse_duration_prescribed('P1Y2M3DT4H54M6S', False)
        self.assertEqual(
            resultduration,
            datetime.timedelta(days=428, hours=4, minutes=54, seconds=6))

        resultduration = _parse_duration_prescribed('P1Y2M3DT4H54M6.5S', False)
        self.assertEqual(
            resultduration,
            datetime.timedelta(days=428, hours=4, minutes=54, seconds=6.5))

        resultduration = _parse_duration_prescribed('P1Y2M3DT4H54M6,5S', False)
        self.assertEqual(
            resultduration,
            datetime.timedelta(days=428, hours=4, minutes=54, seconds=6.5))

        resultduration = _parse_duration_prescribed('PT4H54M6.5S', False)
        self.assertEqual(resultduration,
                         datetime.timedelta(hours=4, minutes=54, seconds=6.5))

        resultduration = _parse_duration_prescribed('PT4H54M6,5S', False)
        self.assertEqual(resultduration,
                         datetime.timedelta(hours=4, minutes=54, seconds=6.5))

        resultduration = _parse_duration_prescribed('P1Y2M3D', False)
        self.assertEqual(resultduration, datetime.timedelta(days=428))

        resultduration = _parse_duration_prescribed('P1Y2M3.5D', False)
        self.assertEqual(resultduration, datetime.timedelta(days=428.5))

        resultduration = _parse_duration_prescribed('P1Y2M3,5D', False)
        self.assertEqual(resultduration, datetime.timedelta(days=428.5))

        resultduration = _parse_duration_prescribed('P1Y', False)
        self.assertEqual(resultduration, datetime.timedelta(days=365))

        resultduration = _parse_duration_prescribed('P1.5Y', False)
        self.assertEqual(resultduration, datetime.timedelta(days=547.5))

        resultduration = _parse_duration_prescribed('P1,5Y', False)
        self.assertEqual(resultduration, datetime.timedelta(days=547.5))

        resultduration = _parse_duration_prescribed('P1M', False)
        self.assertEqual(resultduration, datetime.timedelta(days=30))

        resultduration = _parse_duration_prescribed('P1.5M', False)
        self.assertEqual(resultduration, datetime.timedelta(days=45))

        resultduration = _parse_duration_prescribed('P1,5M', False)
        self.assertEqual(resultduration, datetime.timedelta(days=45))

        resultduration = _parse_duration_prescribed('P1W', False)
        self.assertEqual(resultduration, datetime.timedelta(days=7))

        resultduration = _parse_duration_prescribed('P1.5W', False)
        self.assertEqual(resultduration, datetime.timedelta(days=10.5))

        resultduration = _parse_duration_prescribed('P1,5W', False)
        self.assertEqual(resultduration, datetime.timedelta(days=10.5))

        resultduration = _parse_duration_prescribed('P1D', False)
        self.assertEqual(resultduration, datetime.timedelta(days=1))

        resultduration = _parse_duration_prescribed('P1.5D', False)
        self.assertEqual(resultduration, datetime.timedelta(days=1.5))

        resultduration = _parse_duration_prescribed('P1,5D', False)
        self.assertEqual(resultduration, datetime.timedelta(days=1.5))

        #Verify overflows
        self.assertEqual(parse_duration('PT36H'), parse_duration('P1DT12H'))
Beispiel #9
0
 def test_parse_duration_prescribed_suffixgarbage(self):
     #Don't allow garbage after the duration
     #https://bitbucket.org/nielsenb/aniso8601/issues/9/durations-with-trailing-garbage-are-parsed
     with self.assertRaises(ISOFormatError):
         _parse_duration_prescribed('P1Dasdfasdf', None)
Beispiel #10
0
 def test_parse_duration_prescribed_multiplefractions(self):
     with self.assertRaises(ISOFormatError):
         #Multiple fractions are not allowed
         _parse_duration_prescribed('P1Y2M3DT4H5.1234M6.1234S', None)
Beispiel #11
0
 def test_parse_duration_prescribed_relative_multiplefractions(self):
     with self.assertRaises(ValueError):
         #Multiple fractions are not allowed
         _parse_duration_prescribed('P1Y2M3DT4H5.1234M6.1234S', True)
    def test_parse_duration_prescribed(self):
        testtuples = (
            (
                "P1Y2M3DT4H54M6S",
                {
                    "PnY": "1",
                    "PnM": "2",
                    "PnD": "3",
                    "TnH": "4",
                    "TnM": "54",
                    "TnS": "6",
                },
            ),
            (
                "P1Y2M3DT4H54M6.5S",
                {
                    "PnY": "1",
                    "PnM": "2",
                    "PnD": "3",
                    "TnH": "4",
                    "TnM": "54",
                    "TnS": "6.5",
                },
            ),
            (
                "P1Y2M3DT4H54M6,5S",
                {
                    "PnY": "1",
                    "PnM": "2",
                    "PnD": "3",
                    "TnH": "4",
                    "TnM": "54",
                    "TnS": "6.5",
                },
            ),
            (
                "PT4H54M6.5S",
                {
                    "PnY": None,
                    "PnM": None,
                    "PnD": None,
                    "TnH": "4",
                    "TnM": "54",
                    "TnS": "6.5",
                },
            ),
            (
                "PT4H54M6,5S",
                {
                    "PnY": None,
                    "PnM": None,
                    "PnD": None,
                    "TnH": "4",
                    "TnM": "54",
                    "TnS": "6.5",
                },
            ),
            ("P1Y2M3D", {"PnY": "1", "PnM": "2", "PnW": None, "PnD": "3"}),
            ("P1Y2M3.5D", {"PnY": "1", "PnM": "2", "PnW": None, "PnD": "3.5"}),
            ("P1Y2M3,5D", {"PnY": "1", "PnM": "2", "PnW": None, "PnD": "3.5"}),
            ("P1Y", {"PnY": "1", "PnM": None, "PnW": None, "PnD": None}),
            ("P1.5Y", {"PnY": "1.5", "PnM": None, "PnW": None, "PnD": None}),
            ("P1,5Y", {"PnY": "1.5", "PnM": None, "PnW": None, "PnD": None}),
            ("P1M", {"PnY": None, "PnM": "1", "PnW": None, "PnD": None}),
            ("P1.5M", {"PnY": None, "PnM": "1.5", "PnW": None, "PnD": None}),
            ("P1,5M", {"PnY": None, "PnM": "1.5", "PnW": None, "PnD": None}),
            ("P1W", {"PnY": None, "PnM": None, "PnW": "1", "PnD": None}),
            ("P1.5W", {"PnY": None, "PnM": None, "PnW": "1.5", "PnD": None}),
            ("P1,5W", {"PnY": None, "PnM": None, "PnW": "1.5", "PnD": None}),
            ("P1D", {"PnY": None, "PnM": None, "PnW": None, "PnD": "1"}),
            ("P1.5D", {"PnY": None, "PnM": None, "PnW": None, "PnD": "1.5"}),
            ("P1,5D", {"PnY": None, "PnM": None, "PnW": None, "PnD": "1.5"}),
        )

        for testtuple in testtuples:
            mockBuilder = mock.Mock()
            mockBuilder.build_duration.return_value = testtuple[1]

            result = _parse_duration_prescribed(testtuple[0], mockBuilder)

            self.assertEqual(result, testtuple[1])
            mockBuilder.build_duration.assert_called_once_with(**testtuple[1])
    def test_parse_duration_prescribed_negative(self):
        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed("P-1Y")

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed("P-2M")

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed("P-3D")

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed("P-4W")

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed("P-1Y2M3D")

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed("P-T1H")

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed("P-T2M")

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed("P-T3S")

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed("P-1Y2M3DT4H54M6S")
    def test_parse_duration_prescribed(self):
        testtuples = (
            (
                "P1Y2M3DT4H54M6S",
                {
                    "PnY": "1",
                    "PnM": "2",
                    "PnW": None,
                    "PnD": "3",
                    "TnH": "4",
                    "TnM": "54",
                    "TnS": "6",
                },
            ),
            (
                "P1Y2M3DT4H54M6,5S",
                {
                    "PnY": "1",
                    "PnM": "2",
                    "PnW": None,
                    "PnD": "3",
                    "TnH": "4",
                    "TnM": "54",
                    "TnS": "6.5",
                },
            ),
            (
                "P1Y2M3DT4H54M6.5S",
                {
                    "PnY": "1",
                    "PnM": "2",
                    "PnW": None,
                    "PnD": "3",
                    "TnH": "4",
                    "TnM": "54",
                    "TnS": "6.5",
                },
            ),
            (
                "PT4H54M6,5S",
                {
                    "PnY": None,
                    "PnM": None,
                    "PnW": None,
                    "PnD": None,
                    "TnH": "4",
                    "TnM": "54",
                    "TnS": "6.5",
                },
            ),
            (
                "PT4H54M6.5S",
                {
                    "PnY": None,
                    "PnM": None,
                    "PnW": None,
                    "PnD": None,
                    "TnH": "4",
                    "TnM": "54",
                    "TnS": "6.5",
                },
            ),
            ("P1Y2M3D", {
                "PnY": "1",
                "PnM": "2",
                ""
                "PnW": None,
                "PnD": "3"
            }),
            ("P1Y2M3,5D", {
                "PnY": "1",
                "PnM": "2",
                "PnW": None,
                "PnD": "3.5"
            }),
            ("P1Y2M3.5D", {
                "PnY": "1",
                "PnM": "2",
                "PnW": None,
                "PnD": "3.5"
            }),
            ("P1Y2M", {
                "PnY": "1",
                "PnM": "2",
                "PnW": None,
                "PnD": None
            }),
            ("P1Y", {
                "PnY": "1",
                "PnM": None,
                "PnW": None,
                "PnD": None
            }),
            ("P1,5Y", {
                "PnY": "1.5",
                "PnM": None,
                "PnW": None,
                "PnD": None
            }),
            ("P1.5Y", {
                "PnY": "1.5",
                "PnM": None,
                "PnW": None,
                "PnD": None
            }),
            ("P1M", {
                "PnY": None,
                "PnM": "1",
                "PnW": None,
                "PnD": None
            }),
            ("P1,5M", {
                "PnY": None,
                "PnM": "1.5",
                "PnW": None,
                "PnD": None
            }),
            ("P1.5M", {
                "PnY": None,
                "PnM": "1.5",
                "PnW": None,
                "PnD": None
            }),
            ("P1W", {
                "PnY": None,
                "PnM": None,
                "PnW": "1",
                "PnD": None
            }),
            ("P1,5W", {
                "PnY": None,
                "PnM": None,
                "PnW": "1.5",
                "PnD": None
            }),
            ("P1.5W", {
                "PnY": None,
                "PnM": None,
                "PnW": "1.5",
                "PnD": None
            }),
            ("P1D", {
                "PnY": None,
                "PnM": None,
                "PnW": None,
                "PnD": "1"
            }),
            ("P1,5D", {
                "PnY": None,
                "PnM": None,
                "PnW": None,
                "PnD": "1.5"
            }),
            ("P1.5D", {
                "PnY": None,
                "PnM": None,
                "PnW": None,
                "PnD": "1.5"
            }),
        )

        for testtuple in testtuples:
            result = _parse_duration_prescribed(testtuple[0])

            self.assertEqual(result, testtuple[1])
    def test_parse_duration_prescribed_negative(self):
        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P-1Y')

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P-2M')

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P-3D')

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P-4W')

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P-1Y2M3D')

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P-T1H')

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P-T2M')

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P-T3S')

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P-1Y2M3DT4H54M6S')
Beispiel #16
0
 def test_parse_duration_prescribed_relative_middlefraction(self):
     with self.assertRaises(ValueError):
         #Fraction only allowed on final component
         _parse_duration_prescribed('P1Y2M3DT4H5.1234M6S', True)
Beispiel #17
0
    def test_parse_duration_prescribed(self):
        with self.assertRaises(ValueError):
            _parse_duration_prescribed('P1Y2M3DT4H5.1234M6.1234S', False)

        with self.assertRaises(ValueError):
            _parse_duration_prescribed('P1Y2M3DT4H5.1234M6S', False)

        resultduration = _parse_duration_prescribed('P1Y2M3DT4H54M6S', False)
        self.assertEqual(resultduration.days, 428)
        self.assertEqual(resultduration.seconds, 17646)

        resultduration = _parse_duration_prescribed('P1Y2M3DT4H54M6.5S', False)
        self.assertEqual(resultduration.days, 428)
        self.assertEqual(resultduration.seconds, 17646)
        self.assertEqual(resultduration.microseconds, 500000)

        resultduration = _parse_duration_prescribed('P1Y2M3DT4H54M6,5S', False)
        self.assertEqual(resultduration.days, 428)
        self.assertEqual(resultduration.seconds, 17646)
        self.assertEqual(resultduration.microseconds, 500000)

        resultduration = _parse_duration_prescribed('P1Y2M3D', False)
        self.assertEqual(resultduration.days, 428)

        resultduration = _parse_duration_prescribed('P1Y2M3.5D', False)
        self.assertEqual(resultduration.days, 428)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('P1Y2M3,5D', False)
        self.assertEqual(resultduration.days, 428)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('PT4H54M6.5S', False)
        self.assertEqual(resultduration.days, 0)
        self.assertEqual(resultduration.seconds, 17646)
        self.assertEqual(resultduration.microseconds, 500000)

        resultduration = _parse_duration_prescribed('PT4H54M6,5S', False)
        self.assertEqual(resultduration.days, 0)
        self.assertEqual(resultduration.seconds, 17646)
        self.assertEqual(resultduration.microseconds, 500000)

        resultduration = _parse_duration_prescribed('P1Y', False)
        self.assertEqual(resultduration.days, 365)

        resultduration = _parse_duration_prescribed('P1.5Y', False)
        self.assertEqual(resultduration.days, 547)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('P1,5Y', False)
        self.assertEqual(resultduration.days, 547)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('P1M', False)
        self.assertEqual(resultduration.days, 30)

        resultduration = _parse_duration_prescribed('P1.5M', False)
        self.assertEqual(resultduration.days, 45)

        resultduration = _parse_duration_prescribed('P1,5M', False)
        self.assertEqual(resultduration.days, 45)

        resultduration = _parse_duration_prescribed('P1W', False)
        self.assertEqual(resultduration.days, 7)

        resultduration = _parse_duration_prescribed('P1.5W', False)
        self.assertEqual(resultduration.days, 10)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('P1,5W', False)
        self.assertEqual(resultduration.days, 10)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('P1D', False)
        self.assertEqual(resultduration.days, 1)

        resultduration = _parse_duration_prescribed('P1.5D', False)
        self.assertEqual(resultduration.days, 1)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('P1,5D', False)
        self.assertEqual(resultduration.days, 1)
        self.assertEqual(resultduration.seconds, 43200)

        #Verify overflows
        self.assertEqual(parse_duration('PT36H', False),
                         parse_duration('P1DT12H', False))
Beispiel #18
0
 def test_parse_duration_prescribed_middlefraction(self):
     with self.assertRaises(ISOFormatError):
         #Fraction only allowed on final component
         _parse_duration_prescribed('P1Y2M3DT4H5.1234M6S', None)
Beispiel #19
0
    def test_parse_duration_prescribed_relative(self):
        with self.assertRaises(ValueError):
            _parse_duration_prescribed('P1Y2M3DT4H5.1234M6.1234S', True)

        with self.assertRaises(ValueError):
            _parse_duration_prescribed('P1Y2M3DT4H5.1234M6S', True)

        #Fractional months and years are not defined
        #https://github.com/dateutil/dateutil/issues/40
        with self.assertRaises(ValueError):
            _parse_duration_prescribed('P1.5Y', True)

        with self.assertRaises(ValueError):
            _parse_duration_prescribed('P1.5M', True)

        resultduration = _parse_duration_prescribed('P1Y', True)
        self.assertEqual(resultduration.years, 1)

        resultduration = _parse_duration_prescribed('P1M', True)
        self.assertEqual(resultduration.months, 1)

        #Add the relative ‘days’ argument to the absolute day. Notice that the ‘weeks’ argument is multiplied by 7 and added to ‘days’.
        #http://dateutil.readthedocs.org/en/latest/relativedelta.html
        resultduration = _parse_duration_prescribed('P1W', True)
        self.assertEqual(resultduration.days, 7)

        resultduration = _parse_duration_prescribed('P1.5W', True)
        self.assertEqual(resultduration.days,
                         10.5)  #Fractional weeks are allowed
Beispiel #20
0
    def test_parse_duration_prescribed_outoforder(self):
        #Ensure durations are required to be in the correct order
        #https://bitbucket.org/nielsenb/aniso8601/issues/7/durations-with-time-components-before-t
        #https://bitbucket.org/nielsenb/aniso8601/issues/8/durations-with-components-in-wrong-order
        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P1S', None)

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P1D1S', None)

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P1H1M', None)

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('1Y2M3D1SPT1M', None)

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P1Y2M3D2MT1S', None)

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P2M3D1ST1Y1M', None)

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P1Y2M2MT3D1S', None)

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('P1D1Y1M', None)

        with self.assertRaises(ISOFormatError):
            _parse_duration_prescribed('PT1S1H', None)
    def test_parse_duration_prescribed(self):
        with self.assertRaises(ValueError):
            _parse_duration_prescribed('P1Y2M3DT4H5.1234M6.1234S')

        with self.assertRaises(ValueError):
            _parse_duration_prescribed('P1Y2M3DT4H5.1234M6S')

        resultduration = _parse_duration_prescribed('P1Y2M3DT4H54M6S')
        self.assertEqual(resultduration.days, 428)
        self.assertEqual(resultduration.seconds, 17646)

        resultduration = _parse_duration_prescribed('P1Y2M3DT4H54M6.5S')
        self.assertEqual(resultduration.days, 428)
        self.assertEqual(resultduration.seconds, 17646)
        self.assertEqual(resultduration.microseconds, 500000)

        resultduration = _parse_duration_prescribed('P1Y2M3DT4H54M6,5S')
        self.assertEqual(resultduration.days, 428)
        self.assertEqual(resultduration.seconds, 17646)
        self.assertEqual(resultduration.microseconds, 500000)

        resultduration = _parse_duration_prescribed('P1Y2M3D')
        self.assertEqual(resultduration.days, 428)

        resultduration = _parse_duration_prescribed('P1Y2M3.5D')
        self.assertEqual(resultduration.days, 428)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('P1Y2M3,5D')
        self.assertEqual(resultduration.days, 428)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('PT4H54M6.5S')
        self.assertEqual(resultduration.days, 0)
        self.assertEqual(resultduration.seconds, 17646)
        self.assertEqual(resultduration.microseconds, 500000)

        resultduration = _parse_duration_prescribed('PT4H54M6,5S')
        self.assertEqual(resultduration.days, 0)
        self.assertEqual(resultduration.seconds, 17646)
        self.assertEqual(resultduration.microseconds, 500000)

        resultduration = _parse_duration_prescribed('P1Y')
        self.assertEqual(resultduration.days, 365)

        resultduration = _parse_duration_prescribed('P1.5Y')
        self.assertEqual(resultduration.days, 547)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('P1,5Y')
        self.assertEqual(resultduration.days, 547)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('P1M')
        self.assertEqual(resultduration.days, 30)

        resultduration = _parse_duration_prescribed('P1.5M')
        self.assertEqual(resultduration.days, 45)

        resultduration = _parse_duration_prescribed('P1,5M')
        self.assertEqual(resultduration.days, 45)

        resultduration = _parse_duration_prescribed('P1W')
        self.assertEqual(resultduration.days, 7)

        resultduration = _parse_duration_prescribed('P1.5W')
        self.assertEqual(resultduration.days, 10)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('P1,5W')
        self.assertEqual(resultduration.days, 10)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('P1D')
        self.assertEqual(resultduration.days, 1)

        resultduration = _parse_duration_prescribed('P1.5D')
        self.assertEqual(resultduration.days, 1)
        self.assertEqual(resultduration.seconds, 43200)

        resultduration = _parse_duration_prescribed('P1,5D')
        self.assertEqual(resultduration.days, 1)
        self.assertEqual(resultduration.seconds, 43200)

        #Verify overflows
        self.assertEqual(parse_duration('PT36H'), parse_duration('P1DT12H'))