Added LocaleType

This commit is contained in:
Konsta Vesterinen
2013-10-24 09:00:46 +03:00
parent 5cc685c21d
commit 1ce82b6681
4 changed files with 45 additions and 1 deletions

View File

@@ -26,6 +26,7 @@ from .types import (
instrumented_list, instrumented_list,
InstrumentedList, InstrumentedList,
IPAddressType, IPAddressType,
LocaleType,
Password, Password,
PasswordType, PasswordType,
PhoneNumber, PhoneNumber,
@@ -71,6 +72,7 @@ __all__ = (
ImproperlyConfigured, ImproperlyConfigured,
InstrumentedList, InstrumentedList,
IPAddressType, IPAddressType,
LocaleType,
Merger, Merger,
NumberRange, NumberRange,
NumberRangeException, NumberRangeException,

View File

@@ -5,6 +5,7 @@ from .color import ColorType
from .country import CountryType, Country from .country import CountryType, Country
from .email import EmailType from .email import EmailType
from .ip_address import IPAddressType from .ip_address import IPAddressType
from .locale import LocaleType
from .number_range import ( from .number_range import (
NumberRange, NumberRange,
NumberRangeException, NumberRangeException,
@@ -28,6 +29,7 @@ __all__ = (
Country, Country,
EmailType, EmailType,
IPAddressType, IPAddressType,
LocaleType,
NumberRange, NumberRange,
NumberRangeException, NumberRangeException,
NumberRangeRawType, NumberRangeRawType,

View File

@@ -0,0 +1,40 @@
from sqlalchemy import types
import six
from .scalar_coercible import ScalarCoercible
from ..exceptions import ImproperlyConfigured
babel = None
try:
import babel
except ImportError:
pass
class LocaleType(types.TypeDecorator, ScalarCoercible):
"""
Changes babel.Locale objects to a string representation on the way in and
changes them back to Locale objects on the way out.
"""
impl = types.Unicode(10)
def __init__(self):
if babel is None:
raise ImproperlyConfigured(
'Babel packaged is required with LocaleType.'
)
def process_bind_param(self, value, dialect):
if isinstance(value, babel.Locale):
return six.text_type(value)
if isinstance(value, six.string_types):
return value
def process_result_value(self, value, dialect):
if value is not None:
return babel.Locale(value)
def _coerce(self, value):
if value is not None and not isinstance(value, babel.Locale):
return babel.Locale(value)
return value

View File

@@ -39,7 +39,7 @@ class TestCountryType(TestCase):
self.User = User self.User = User
def test_color_parameter_processing(self): def test_parameter_processing(self):
user = self.User( user = self.User(
country=Country(u'fi') country=Country(u'fi')
) )