diff --git a/CHANGES.rst b/CHANGES.rst index 9b614b5..923a080 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,12 @@ Changelog Here you can see the full list of changes between each SQLAlchemy-Utils release. +0.30.12 (2015-07-05) +^^^^^^^^^^^^^^^^^^^^ + +- Added support for PhoneNumber extensions (#121) + + 0.30.11 (2015-06-18) ^^^^^^^^^^^^^^^^^^^^ diff --git a/sqlalchemy_utils/__init__.py b/sqlalchemy_utils/__init__.py index 7560f4f..a2cc96c 100644 --- a/sqlalchemy_utils/__init__.py +++ b/sqlalchemy_utils/__init__.py @@ -92,4 +92,4 @@ from .types import ( # noqa WeekDaysType ) -__version__ = '0.30.11' +__version__ = '0.30.12' diff --git a/sqlalchemy_utils/types/phone_number.py b/sqlalchemy_utils/types/phone_number.py index e03b03a..07490c0 100644 --- a/sqlalchemy_utils/types/phone_number.py +++ b/sqlalchemy_utils/types/phone_number.py @@ -109,10 +109,14 @@ class PhoneNumberType(types.TypeDecorator, ScalarCoercible): def process_bind_param(self, value, dialect): if value: - if isinstance(value, PhoneNumber): - return getattr(value, self.STORE_FORMAT) - else: - return getattr(PhoneNumber(value), self.STORE_FORMAT) + if not isinstance(value, PhoneNumber): + value = PhoneNumber(value, country_code=self.country_code) + + if self.STORE_FORMAT == 'e164' and value.extension: + return '%s;ext=%s' % (value.e164, value.extension) + + return getattr(value, self.STORE_FORMAT) + return value def process_result_value(self, value, dialect): @@ -121,6 +125,7 @@ class PhoneNumberType(types.TypeDecorator, ScalarCoercible): return value def _coerce(self, value): - if value is not None and not isinstance(value, PhoneNumber): + if value and not isinstance(value, PhoneNumber): value = PhoneNumber(value, country_code=self.country_code) - return value + + return value or None diff --git a/tests/types/test_phonenumber.py b/tests/types/test_phonenumber.py index 5f83571..dd8e3dc 100644 --- a/tests/types/test_phonenumber.py +++ b/tests/types/test_phonenumber.py @@ -88,6 +88,22 @@ class TestPhoneNumberType(TestCase): ) assert result.first()[0] == u'+358401234567' + def test_phone_number_with_extension(self): + user = self.User(phone_number='555-555-5555 Ext. 555') + + self.session.add(user) + self.session.commit() + self.session.refresh(user) + assert user.phone_number.extension == '555' + + def test_empty_phone_number_is_equiv_to_none(self): + user = self.User(phone_number='') + + self.session.add(user) + self.session.commit() + self.session.refresh(user) + assert user.phone_number is None + def test_phone_number_is_none(self): phone_number = None user = self.User()