Skip to content

Commit

Permalink
Fix override with None.
Browse files Browse the repository at this point in the history
  • Loading branch information
thefunny42 committed Oct 18, 2018
1 parent d73a4b7 commit 13a7294
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 18 deletions.
29 changes: 19 additions & 10 deletions src/zope/i18nmessageid/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"""I18n Messages and factories.
"""
__docformat__ = "reStructuredText"
_marker = object()

import six

Expand All @@ -32,21 +33,29 @@ class Message(six.text_type):
'domain', 'default', 'mapping', '_readonly',
'msgid_plural', 'default_plural', 'number')

def __new__(cls, ustr, domain=None, default=None, mapping=None,
msgid_plural=None, default_plural=None, number=None):
def __new__(cls, ustr, domain=_marker, default=_marker, mapping=_marker,
msgid_plural=_marker, default_plural=_marker, number=_marker):
self = six.text_type.__new__(cls, ustr)
if isinstance(ustr, self.__class__):
domain = domain if ustr.domain is None else ustr.domain[:]
default = default if ustr.default is None else ustr.default[:]
mapping = mapping if ustr.mapping is None else ustr.mapping.copy()
domain = ustr.domain[:] if domain is _marker else domain
default = ustr.default[:] if default is _marker else default
mapping = ustr.mapping.copy() if mapping is _marker else mapping
msgid_plural = (
msgid_plural if ustr.msgid_plural is None else
ustr.msgid_plural[:])
ustr.msgid_plural[:] if msgid_plural is _marker else
msgid_plural)
default_plural = (
default_plural if ustr.default_plural is None else
ustr.default_plural[:])
number = number if ustr.number is None else ustr.number
ustr.default_plural[:] if default_plural is _marker else
default_plural)
number = ustr.number if number is _marker else number
ustr = six.text_type(ustr)
else:
domain = None if domain is _marker else domain
default = None if default is _marker else default
mapping = None if mapping is _marker else mapping
msgid_plural = None if msgid_plural is _marker else msgid_plural
default_plural = (None if default_plural is _marker else
default_plural)
number = None if number is _marker else number

self.domain = domain
self.default = default
Expand Down
17 changes: 9 additions & 8 deletions src/zope/i18nmessageid/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,17 +118,18 @@ def test_copy(self):

def test_copy_with_overrides(self):
mapping = {'key': 'value'}
source = self._makeOne('testing')
source = self._makeOne(
'testing', 'domain', default='other', mapping=mapping,
msgid_plural='workings', default_plural='others', number=3)
message = self._makeOne(
source, 'domain', 'default', mapping,
msgid_plural='testings', default_plural="defaults", number=2)
source, mapping=None, msgid_plural='override', number=0)
self.assertEqual(message, 'testing')
self.assertEqual(message.domain, 'domain')
self.assertEqual(message.default, 'default')
self.assertEqual(message.mapping, mapping)
self.assertEqual(message.msgid_plural, 'testings')
self.assertEqual(message.default_plural, 'defaults')
self.assertEqual(message.number, 2)
self.assertEqual(message.default, 'other')
self.assertEqual(message.mapping, None)
self.assertEqual(message.msgid_plural, 'override')
self.assertEqual(message.default_plural, 'others')
self.assertEqual(message.number, 0)
if self._TEST_READONLY:
self.assertTrue(message._readonly)

Expand Down

0 comments on commit 13a7294

Please sign in to comment.