Add flake8 to test matrix
This commit is contained in:
@@ -33,4 +33,5 @@ install:
|
|||||||
- pip install -e .[$EXTRAS]
|
- pip install -e .[$EXTRAS]
|
||||||
|
|
||||||
script:
|
script:
|
||||||
|
- flake8 sqlalchemy_utils tests
|
||||||
- py.test
|
- py.test
|
||||||
|
1
setup.py
1
setup.py
@@ -36,6 +36,7 @@ extras_require = {
|
|||||||
'pytz>=2014.2',
|
'pytz>=2014.2',
|
||||||
'python-dateutil>=2.2',
|
'python-dateutil>=2.2',
|
||||||
'pymysql',
|
'pymysql',
|
||||||
|
'flake8>=2.4.0'
|
||||||
],
|
],
|
||||||
'anyjson': ['anyjson>=0.3.3'],
|
'anyjson': ['anyjson>=0.3.3'],
|
||||||
'babel': ['Babel>=1.3'],
|
'babel': ['Babel>=1.3'],
|
||||||
|
@@ -1,16 +1,16 @@
|
|||||||
from .aggregates import aggregated
|
from .aggregates import aggregated # noqa
|
||||||
from .asserts import (
|
from .asserts import ( # noqa
|
||||||
assert_min_value,
|
assert_min_value,
|
||||||
assert_max_length,
|
assert_max_length,
|
||||||
assert_max_value,
|
assert_max_value,
|
||||||
assert_nullable,
|
assert_nullable,
|
||||||
assert_non_nullable
|
assert_non_nullable
|
||||||
)
|
)
|
||||||
from .batch import batch_fetch, with_backrefs
|
from .batch import batch_fetch, with_backrefs # noqa
|
||||||
from .decorators import generates
|
from .decorators import generates # noqa
|
||||||
from .exceptions import ImproperlyConfigured
|
from .exceptions import ImproperlyConfigured # noqa
|
||||||
from .expression_parser import ExpressionParser
|
from .expression_parser import ExpressionParser # noqa
|
||||||
from .functions import (
|
from .functions import ( # noqa
|
||||||
analyze,
|
analyze,
|
||||||
create_database,
|
create_database,
|
||||||
create_mock_engine,
|
create_mock_engine,
|
||||||
@@ -44,18 +44,18 @@ from .functions import (
|
|||||||
sort_query,
|
sort_query,
|
||||||
table_name,
|
table_name,
|
||||||
)
|
)
|
||||||
from .i18n import TranslationHybrid
|
from .i18n import TranslationHybrid # noqa
|
||||||
from .listeners import (
|
from .listeners import ( # noqa
|
||||||
auto_delete_orphans,
|
auto_delete_orphans,
|
||||||
coercion_listener,
|
coercion_listener,
|
||||||
force_auto_coercion,
|
force_auto_coercion,
|
||||||
force_instant_defaults
|
force_instant_defaults
|
||||||
)
|
)
|
||||||
from .generic import generic_relationship
|
from .generic import generic_relationship # noqa
|
||||||
from .proxy_dict import ProxyDict, proxy_dict
|
from .proxy_dict import ProxyDict, proxy_dict # noqa
|
||||||
from .observer import observes
|
from .observer import observes # noqa
|
||||||
from .query_chain import QueryChain
|
from .query_chain import QueryChain # noqa
|
||||||
from .types import (
|
from .types import ( # noqa
|
||||||
ArrowType,
|
ArrowType,
|
||||||
Choice,
|
Choice,
|
||||||
ChoiceType,
|
ChoiceType,
|
||||||
@@ -85,86 +85,7 @@ from .types import (
|
|||||||
UUIDType,
|
UUIDType,
|
||||||
WeekDaysType
|
WeekDaysType
|
||||||
)
|
)
|
||||||
from .models import Timestamp
|
from .models import Timestamp # noqa
|
||||||
|
|
||||||
|
|
||||||
__version__ = '0.29.8'
|
__version__ = '0.29.8'
|
||||||
|
|
||||||
|
|
||||||
__all__ = (
|
|
||||||
aggregated,
|
|
||||||
analyze,
|
|
||||||
assert_max_length,
|
|
||||||
assert_non_nullable,
|
|
||||||
assert_nullable,
|
|
||||||
auto_delete_orphans,
|
|
||||||
batch_fetch,
|
|
||||||
coercion_listener,
|
|
||||||
create_database,
|
|
||||||
create_mock_engine,
|
|
||||||
database_exists,
|
|
||||||
dependent_objects,
|
|
||||||
drop_database,
|
|
||||||
escape_like,
|
|
||||||
force_auto_coercion,
|
|
||||||
force_instant_defaults,
|
|
||||||
generates,
|
|
||||||
generic_relationship,
|
|
||||||
get_bind,
|
|
||||||
get_column_key,
|
|
||||||
get_columns,
|
|
||||||
get_declarative_base,
|
|
||||||
get_hybrid_properties,
|
|
||||||
get_mapper,
|
|
||||||
get_query_entities,
|
|
||||||
get_primary_keys,
|
|
||||||
get_referencing_foreign_keys,
|
|
||||||
get_tables,
|
|
||||||
group_foreign_keys,
|
|
||||||
has_changes,
|
|
||||||
has_index,
|
|
||||||
identity,
|
|
||||||
instrumented_list,
|
|
||||||
is_loaded,
|
|
||||||
merge_references,
|
|
||||||
mock_engine,
|
|
||||||
naturally_equivalent,
|
|
||||||
proxy_dict,
|
|
||||||
render_expression,
|
|
||||||
render_statement,
|
|
||||||
sort_query,
|
|
||||||
table_name,
|
|
||||||
with_backrefs,
|
|
||||||
ArrowType,
|
|
||||||
Choice,
|
|
||||||
ChoiceType,
|
|
||||||
ColorType,
|
|
||||||
Country,
|
|
||||||
CountryType,
|
|
||||||
DateRangeType,
|
|
||||||
DateTimeRangeType,
|
|
||||||
EmailType,
|
|
||||||
EncryptedType,
|
|
||||||
ExpressionParser,
|
|
||||||
ImproperlyConfigured,
|
|
||||||
InstrumentedList,
|
|
||||||
IntRangeType,
|
|
||||||
IPAddressType,
|
|
||||||
JSONType,
|
|
||||||
LocaleType,
|
|
||||||
NumericRangeType,
|
|
||||||
Password,
|
|
||||||
PasswordType,
|
|
||||||
PhoneNumber,
|
|
||||||
PhoneNumberType,
|
|
||||||
ProxyDict,
|
|
||||||
QueryChain,
|
|
||||||
ScalarListException,
|
|
||||||
ScalarListType,
|
|
||||||
Timestamp,
|
|
||||||
TimezoneType,
|
|
||||||
TSVectorType,
|
|
||||||
URLType,
|
|
||||||
UUIDType,
|
|
||||||
WeekDaysType,
|
|
||||||
)
|
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
"""Global SQLAlchemy-Utils exception classes.
|
|
||||||
"""
|
"""
|
||||||
|
Global SQLAlchemy-Utils exception classes.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class ImproperlyConfigured(Exception):
|
class ImproperlyConfigured(Exception):
|
||||||
"""
|
"""
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
from .mock import create_mock_engine, mock_engine
|
from .mock import create_mock_engine, mock_engine # noqa
|
||||||
from .render import render_expression, render_statement
|
from .render import render_expression, render_statement # noqa
|
||||||
from .sort_query import (
|
from .sort_query import ( # noqa
|
||||||
make_order_by_deterministic,
|
make_order_by_deterministic,
|
||||||
sort_query,
|
sort_query,
|
||||||
QuerySorterException
|
QuerySorterException
|
||||||
)
|
)
|
||||||
from .database import (
|
from .database import ( # noqa
|
||||||
analyze,
|
analyze,
|
||||||
create_database,
|
create_database,
|
||||||
database_exists,
|
database_exists,
|
||||||
@@ -16,7 +16,7 @@ from .database import (
|
|||||||
is_auto_assigned_date_column,
|
is_auto_assigned_date_column,
|
||||||
json_sql
|
json_sql
|
||||||
)
|
)
|
||||||
from .foreign_keys import (
|
from .foreign_keys import ( # noqa
|
||||||
dependent_objects,
|
dependent_objects,
|
||||||
get_referencing_foreign_keys,
|
get_referencing_foreign_keys,
|
||||||
group_foreign_keys,
|
group_foreign_keys,
|
||||||
@@ -24,7 +24,7 @@ from .foreign_keys import (
|
|||||||
merge_references,
|
merge_references,
|
||||||
non_indexed_foreign_keys,
|
non_indexed_foreign_keys,
|
||||||
)
|
)
|
||||||
from .orm import (
|
from .orm import ( # noqa
|
||||||
get_bind,
|
get_bind,
|
||||||
get_class_by_table,
|
get_class_by_table,
|
||||||
get_column_key,
|
get_column_key,
|
||||||
@@ -43,40 +43,3 @@ from .orm import (
|
|||||||
quote,
|
quote,
|
||||||
table_name,
|
table_name,
|
||||||
)
|
)
|
||||||
|
|
||||||
__all__ = (
|
|
||||||
'create_database',
|
|
||||||
'create_mock_engine',
|
|
||||||
'database_exists',
|
|
||||||
'dependent_objects',
|
|
||||||
'drop_database',
|
|
||||||
'escape_like',
|
|
||||||
'get_bind',
|
|
||||||
'get_class_by_table',
|
|
||||||
'get_columns',
|
|
||||||
'get_declarative_base',
|
|
||||||
'get_hybrid_properties',
|
|
||||||
'get_mapper',
|
|
||||||
'get_query_entities',
|
|
||||||
'get_primary_keys',
|
|
||||||
'get_referencing_foreign_keys',
|
|
||||||
'get_tables',
|
|
||||||
'getdotattr',
|
|
||||||
'group_foreign_keys',
|
|
||||||
'has_changes',
|
|
||||||
'identity',
|
|
||||||
'is_loaded',
|
|
||||||
'is_auto_assigned_date_column',
|
|
||||||
'is_indexed_foreign_key',
|
|
||||||
'json_sql',
|
|
||||||
'make_order_by_deterministic',
|
|
||||||
'mock_engine',
|
|
||||||
'naturally_equivalent',
|
|
||||||
'non_indexed_foreign_keys',
|
|
||||||
'QuerySorterException',
|
|
||||||
'quote',
|
|
||||||
'render_expression',
|
|
||||||
'render_statement',
|
|
||||||
'sort_query',
|
|
||||||
'table_name',
|
|
||||||
)
|
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
from .chained_join import chained_join
|
from .chained_join import chained_join # noqa
|
||||||
from .select_aggregate import select_aggregate
|
from .select_aggregate import select_aggregate # noqa
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
import six
|
|
||||||
from sqlalchemy import types
|
from sqlalchemy import types
|
||||||
from sqlalchemy_utils.exceptions import ImproperlyConfigured
|
from sqlalchemy_utils.exceptions import ImproperlyConfigured
|
||||||
from sqlalchemy_utils.utils import str_coercible
|
from sqlalchemy_utils.utils import str_coercible
|
||||||
@@ -46,8 +45,9 @@ class PhoneNumber(BasePhoneNumber):
|
|||||||
italian_leading_zero=self._phone_number.italian_leading_zero,
|
italian_leading_zero=self._phone_number.italian_leading_zero,
|
||||||
raw_input=self._phone_number.raw_input,
|
raw_input=self._phone_number.raw_input,
|
||||||
country_code_source=self._phone_number.country_code_source,
|
country_code_source=self._phone_number.country_code_source,
|
||||||
preferred_domestic_carrier_code=
|
preferred_domestic_carrier_code=(
|
||||||
self._phone_number.preferred_domestic_carrier_code
|
self._phone_number.preferred_domestic_carrier_code
|
||||||
|
)
|
||||||
)
|
)
|
||||||
self.national = phonenumbers.format_number(
|
self.national = phonenumbers.format_number(
|
||||||
self._phone_number,
|
self._phone_number,
|
||||||
|
@@ -29,8 +29,8 @@ class URLType(types.TypeDecorator, ScalarCoercible):
|
|||||||
|
|
||||||
user = User(website=u'www.example.com')
|
user = User(website=u'www.example.com')
|
||||||
|
|
||||||
# website is coerced to furl object, hence all nice furl operations come
|
# website is coerced to furl object, hence all nice furl operations
|
||||||
# available
|
# come available
|
||||||
user.website.args['some_argument'] = '12'
|
user.website.args['some_argument'] = '12'
|
||||||
|
|
||||||
print user.website
|
print user.website
|
||||||
|
@@ -7,7 +7,9 @@ class TestAggregatesWithManyToManyRelationships(TestCase):
|
|||||||
dns = 'postgres://postgres@localhost/sqlalchemy_utils_test'
|
dns = 'postgres://postgres@localhost/sqlalchemy_utils_test'
|
||||||
|
|
||||||
def create_models(self):
|
def create_models(self):
|
||||||
user_group = sa.Table('user_group', self.Base.metadata,
|
user_group = sa.Table(
|
||||||
|
'user_group',
|
||||||
|
self.Base.metadata,
|
||||||
sa.Column('user_id', sa.Integer, sa.ForeignKey('user.id')),
|
sa.Column('user_id', sa.Integer, sa.ForeignKey('user.id')),
|
||||||
sa.Column('group_id', sa.Integer, sa.ForeignKey('group.id'))
|
sa.Column('group_id', sa.Integer, sa.ForeignKey('group.id'))
|
||||||
)
|
)
|
||||||
|
@@ -3,6 +3,7 @@ import sqlalchemy as sa
|
|||||||
from sqlalchemy_utils import aggregated
|
from sqlalchemy_utils import aggregated
|
||||||
from tests import TestCase
|
from tests import TestCase
|
||||||
|
|
||||||
|
|
||||||
class Test3LevelDeepOneToMany(TestCase):
|
class Test3LevelDeepOneToMany(TestCase):
|
||||||
dns = 'postgres://postgres@localhost/sqlalchemy_utils_test'
|
dns = 'postgres://postgres@localhost/sqlalchemy_utils_test'
|
||||||
|
|
||||||
|
@@ -1,7 +0,0 @@
|
|||||||
import sqlalchemy as sa
|
|
||||||
from tests import TestCase
|
|
||||||
from sqlalchemy_utils.functions import (
|
|
||||||
render_statement,
|
|
||||||
render_expression,
|
|
||||||
mock_engine
|
|
||||||
)
|
|
||||||
|
@@ -5,7 +5,7 @@ from flexmock import flexmock
|
|||||||
from pytest import mark
|
from pytest import mark
|
||||||
pymysql = None
|
pymysql = None
|
||||||
try:
|
try:
|
||||||
import pymysql
|
import pymysql # noqa
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@@ -91,7 +91,10 @@ class TestGetQueryEntities(TestCase):
|
|||||||
).label('number_of_articles')
|
).label('number_of_articles')
|
||||||
|
|
||||||
query = self.session.query(self.Article, number_of_articles)
|
query = self.session.query(self.Article, number_of_articles)
|
||||||
assert list(get_query_entities(query)) == [self.Article, number_of_articles]
|
assert list(get_query_entities(query)) == [
|
||||||
|
self.Article,
|
||||||
|
number_of_articles
|
||||||
|
]
|
||||||
|
|
||||||
def test_aliased_entity(self):
|
def test_aliased_entity(self):
|
||||||
alias = sa.orm.aliased(self.Article)
|
alias = sa.orm.aliased(self.Article)
|
||||||
|
@@ -1,11 +1,7 @@
|
|||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
from sqlalchemy_utils.aggregates import select_aggregate
|
from sqlalchemy_utils.aggregates import select_aggregate
|
||||||
from tests import TestCase
|
from tests import TestCase
|
||||||
from tests.mixins import (
|
from tests.mixins import ThreeLevelDeepManyToMany
|
||||||
ThreeLevelDeepManyToMany,
|
|
||||||
ThreeLevelDeepOneToMany,
|
|
||||||
ThreeLevelDeepOneToOne,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def normalize(sql):
|
def normalize(sql):
|
||||||
|
@@ -40,7 +40,7 @@ class TestExpressionParser(TestCase):
|
|||||||
assert str(expr) == 'category.name IN (:name_1, :name_2)'
|
assert str(expr) == 'category.name IN (:name_1, :name_2)'
|
||||||
|
|
||||||
def test_boolean_expression(self):
|
def test_boolean_expression(self):
|
||||||
expr = self.parser(self.User.name == False)
|
expr = self.parser(self.User.name == False) # noqa
|
||||||
assert str(expr) == 'category.name = 0'
|
assert str(expr) == 'category.name = 0'
|
||||||
|
|
||||||
def test_label(self):
|
def test_label(self):
|
||||||
|
@@ -119,7 +119,6 @@ class TestGeneratesWithSourcePath(DeepPathGeneratesTestCase):
|
|||||||
def copy_locale(self, document):
|
def copy_locale(self, document):
|
||||||
return document.locale
|
return document.locale
|
||||||
|
|
||||||
|
|
||||||
self.Document = Document
|
self.Document = Document
|
||||||
self.Section = Section
|
self.Section = Section
|
||||||
self.SubSection = SubSection
|
self.SubSection = SubSection
|
||||||
|
@@ -1,12 +1,11 @@
|
|||||||
from flexmock import flexmock
|
from flexmock import flexmock
|
||||||
from pytest import mark
|
from pytest import mark
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
from sqlalchemy_utils import ColorType
|
from sqlalchemy_utils import ColorType, types # noqa
|
||||||
from sqlalchemy_utils.types import color
|
|
||||||
from tests import TestCase
|
from tests import TestCase
|
||||||
|
|
||||||
|
|
||||||
@mark.skipif('color.python_colour_type is None')
|
@mark.skipif('types.color.python_colour_type is None')
|
||||||
class TestColorType(TestCase):
|
class TestColorType(TestCase):
|
||||||
def create_models(self):
|
def create_models(self):
|
||||||
class Document(self.Base):
|
class Document(self.Base):
|
||||||
|
@@ -4,7 +4,7 @@ import pytest
|
|||||||
from pytest import mark
|
from pytest import mark
|
||||||
cryptography = None
|
cryptography = None
|
||||||
try:
|
try:
|
||||||
import cryptography
|
import cryptography # noqa
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@@ -35,7 +35,7 @@ class NumberRangeTestCase(TestCase):
|
|||||||
|
|
||||||
def test_nullify_range(self):
|
def test_nullify_range(self):
|
||||||
building = self.create_building(None)
|
building = self.create_building(None)
|
||||||
assert building.persons_at_night == None
|
assert building.persons_at_night is None
|
||||||
|
|
||||||
def test_update_with_none(self):
|
def test_update_with_none(self):
|
||||||
interval = intervals.IntInterval('(,)')
|
interval = intervals.IntInterval('(,)')
|
||||||
|
@@ -52,6 +52,7 @@ class JSONTestCase(TestCase):
|
|||||||
class TestSqliteJSONType(JSONTestCase):
|
class TestSqliteJSONType(JSONTestCase):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@mark.skipif('json.json is None')
|
@mark.skipif('json.json is None')
|
||||||
class TestPostgresJSONType(JSONTestCase):
|
class TestPostgresJSONType(JSONTestCase):
|
||||||
dns = 'postgres://postgres@localhost/sqlalchemy_utils_test'
|
dns = 'postgres://postgres@localhost/sqlalchemy_utils_test'
|
||||||
|
@@ -2,11 +2,10 @@ from pytest import mark
|
|||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
from tests import TestCase
|
from tests import TestCase
|
||||||
from sqlalchemy import inspect
|
from sqlalchemy import inspect
|
||||||
from sqlalchemy_utils.types import password
|
from sqlalchemy_utils import Password, PasswordType, types # noqa
|
||||||
from sqlalchemy_utils import Password, PasswordType
|
|
||||||
|
|
||||||
|
|
||||||
@mark.skipif('password.passlib is None')
|
@mark.skipif('types.password.passlib is None')
|
||||||
class TestPasswordType(TestCase):
|
class TestPasswordType(TestCase):
|
||||||
def create_models(self):
|
def create_models(self):
|
||||||
class User(self.Base):
|
class User(self.Base):
|
||||||
@@ -142,12 +141,12 @@ class TestPasswordType(TestCase):
|
|||||||
obj.password = None
|
obj.password = None
|
||||||
|
|
||||||
assert obj.password is None
|
assert obj.password is None
|
||||||
assert obj.password == None
|
assert obj.password == None # noqa
|
||||||
|
|
||||||
obj.password = 'b'
|
obj.password = 'b'
|
||||||
|
|
||||||
assert obj.password is not None
|
assert obj.password is not None
|
||||||
assert obj.password != None
|
assert obj.password != None # noqa
|
||||||
|
|
||||||
def test_check_and_update_persist(self):
|
def test_check_and_update_persist(self):
|
||||||
"""
|
"""
|
||||||
|
@@ -3,11 +3,10 @@ import sqlalchemy as sa
|
|||||||
from pytest import mark
|
from pytest import mark
|
||||||
|
|
||||||
from tests import TestCase
|
from tests import TestCase
|
||||||
from sqlalchemy_utils import PhoneNumberType, PhoneNumber
|
from sqlalchemy_utils import PhoneNumberType, PhoneNumber, types # noqa
|
||||||
from sqlalchemy_utils.types import phone_number
|
|
||||||
|
|
||||||
|
|
||||||
@mark.skipif('phone_number.phonenumbers is None')
|
@mark.skipif('types.phone_number.phonenumbers is None')
|
||||||
class TestPhoneNumber(object):
|
class TestPhoneNumber(object):
|
||||||
def setup_method(self, method):
|
def setup_method(self, method):
|
||||||
self.valid_phone_numbers = [
|
self.valid_phone_numbers = [
|
||||||
@@ -48,13 +47,13 @@ class TestPhoneNumber(object):
|
|||||||
def test_phone_number_str_repr(self):
|
def test_phone_number_str_repr(self):
|
||||||
number = PhoneNumber('+358401234567')
|
number = PhoneNumber('+358401234567')
|
||||||
if six.PY2:
|
if six.PY2:
|
||||||
assert unicode(number) == number.national
|
assert unicode(number) == number.national # noqa
|
||||||
assert str(number) == number.national.encode('utf-8')
|
assert str(number) == number.national.encode('utf-8')
|
||||||
else:
|
else:
|
||||||
assert str(number) == number.national
|
assert str(number) == number.national
|
||||||
|
|
||||||
|
|
||||||
@mark.skipif('phone_number.phonenumbers is None')
|
@mark.skipif('types.phone_number.phonenumbers is None')
|
||||||
class TestPhoneNumberType(TestCase):
|
class TestPhoneNumberType(TestCase):
|
||||||
|
|
||||||
def create_models(self):
|
def create_models(self):
|
||||||
|
@@ -1,12 +1,7 @@
|
|||||||
from pytest import mark
|
|
||||||
import six
|
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
from sqlalchemy_utils.types import timezone
|
from sqlalchemy_utils.types import timezone
|
||||||
from tests import TestCase
|
from tests import TestCase
|
||||||
|
|
||||||
import dateutil
|
|
||||||
import pytz
|
|
||||||
|
|
||||||
|
|
||||||
class TestTimezoneType(TestCase):
|
class TestTimezoneType(TestCase):
|
||||||
def create_models(self):
|
def create_models(self):
|
||||||
|
Reference in New Issue
Block a user