From 6800ed9fb77ea2f1e81e771a25629330a9d69b34 Mon Sep 17 00:00:00 2001 From: Alexei Date: Tue, 1 May 2018 15:00:30 +0300 Subject: [PATCH 1/2] Fix issue with Unicode characters --- adapters/fields.py | 1 + requirements.txt | 1 + setup.py | 5 ++++- tests/test_fields.py | 7 +++++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/adapters/fields.py b/adapters/fields.py index 727d40e..552209c 100644 --- a/adapters/fields.py +++ b/adapters/fields.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +from builtins import str import datetime import dateutil.parser from decimal import Decimal diff --git a/requirements.txt b/requirements.txt index 668f62e..c2d59c7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ +future python-dateutil==2.6.0 diff --git a/setup.py b/setup.py index e4288d2..f57534c 100644 --- a/setup.py +++ b/setup.py @@ -16,5 +16,8 @@ url='https://github.com/alexei/python-adapters', download_url='https://github.com/alexei/python-adapters/archive/2.0.1.tar.gz', # noqa keywords=['adapter pattern'], - install_requires=['python-dateutil>=2.6.0'], + install_requires=[ + 'future', + 'python-dateutil>=2.6.0', + ], ) diff --git a/tests/test_fields.py b/tests/test_fields.py index d94152a..47a9d83 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals + import datetime from decimal import Decimal import unittest @@ -16,6 +18,11 @@ def test_char_field(self): expected = 'Los Angeles' self.assertEqual(actual, expected) + def test_unicode_field(self): + actual = adapters.CharField().adapt('Alexandru Mărășteanu') + expected = 'Alexandru Mărășteanu' + self.assertEqual(actual, expected) + def test_int_field(self): actual = adapters.IntField().adapt(123456) expected = 123456 From 88e7f664c9c3e9e74fc63b5b6e3700f71b5da723 Mon Sep 17 00:00:00 2001 From: Alexei Date: Tue, 1 May 2018 15:24:17 +0300 Subject: [PATCH 2/2] Use six to check against string types --- adapters/fields.py | 7 ++++--- requirements.txt | 1 + setup.py | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/adapters/fields.py b/adapters/fields.py index 552209c..909a9da 100644 --- a/adapters/fields.py +++ b/adapters/fields.py @@ -4,6 +4,7 @@ import datetime import dateutil.parser from decimal import Decimal +import six from .base import BaseField from .utils import EMPTY_VALUES, undefined @@ -56,7 +57,7 @@ class DateField(BaseField): def prepare(self, data): if isinstance(data, datetime.date): return data - elif isinstance(data, str): + elif isinstance(data, six.string_types): return dateutil.parser.parse(data).date() else: raise ValueError("Invalid date argument") @@ -66,7 +67,7 @@ class DateTimeField(BaseField): def prepare(self, data): if isinstance(data, datetime.datetime): return data - elif isinstance(data, str): + elif isinstance(data, six.string_types): return dateutil.parser.parse(data) else: raise ValueError("Invalid date argument") @@ -95,7 +96,7 @@ class TimeField(BaseField): def prepare(self, data): if isinstance(data, datetime.time): return data - elif isinstance(data, str): + elif isinstance(data, six.string_types): return dateutil.parser.parse(data).timetz() else: raise ValueError("Invalid time argument") diff --git a/requirements.txt b/requirements.txt index c2d59c7..e133ac8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ future python-dateutil==2.6.0 +six diff --git a/setup.py b/setup.py index f57534c..a8bbdb5 100644 --- a/setup.py +++ b/setup.py @@ -19,5 +19,6 @@ install_requires=[ 'future', 'python-dateutil>=2.6.0', + 'six', ], )