Commit 45c7acdc authored by Marko Benko's avatar Marko Benko Committed by Tim Graham
Browse files

Fixed #26281 -- Added a helpful error message for an invalid format specifier...

Fixed #26281 -- Added a helpful error message for an invalid format specifier to dateformat.format().
parent b040ac06
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -767,10 +767,10 @@ def time(value, arg=None):
        return ''
    try:
        return formats.time_format(value, arg)
    except AttributeError:
    except (AttributeError, TypeError):
        try:
            return time_format(value, arg)
        except AttributeError:
        except (AttributeError, TypeError):
            return ''


+5 −0
Original line number Diff line number Diff line
@@ -34,6 +34,11 @@ class Formatter(object):
        pieces = []
        for i, piece in enumerate(re_formatchars.split(force_text(formatstr))):
            if i % 2:
                if type(self.data) is datetime.date and hasattr(TimeFormat, piece):
                    raise TypeError(
                        "The format for date objects may not contain "
                        "time-related format specifiers (found '%s')." % piece
                    )
                pieces.append(force_text(getattr(self, piece)()))
            elif piece:
                pieces.append(re_escaped.sub(r'\1', piece))
+11 −0
Original line number Diff line number Diff line
@@ -153,3 +153,14 @@ class DateFormatTests(SimpleTestCase):

        # Ticket #16924 -- We don't need timezone support to test this
        self.assertEqual(dateformat.format(aware_dt, 'O'), '-0330')

    def test_invalid_time_format_specifiers(self):
        my_birthday = date(1984, 8, 7)

        for specifier in ['a', 'A', 'f', 'g', 'G', 'h', 'H', 'i', 'P', 's', 'u']:
            msg = (
                "The format for date objects may not contain time-related "
                "format specifiers (found '%s')." % specifier
            )
            with self.assertRaisesMessage(TypeError, msg):
                dateformat.format(my_birthday, specifier)