Commit 0ce4e7be authored by PJ Janse van Rensburg's avatar PJ Janse van Rensburg

Lazily import sqlalchemy_utils and arrow.

parent 831e4389
...@@ -4,7 +4,6 @@ from enum import Enum, EnumMeta ...@@ -4,7 +4,6 @@ from enum import Enum, EnumMeta
from wtforms import fields, validators from wtforms import fields, validators
from sqlalchemy import Boolean, Column from sqlalchemy import Boolean, Column
from sqlalchemy.orm import ColumnProperty from sqlalchemy.orm import ColumnProperty
from sqlalchemy_utils import Choice
from flask_admin import form from flask_admin import form
from flask_admin.model.form import (converts, ModelConverterBase, from flask_admin.model.form import (converts, ModelConverterBase,
...@@ -428,6 +427,8 @@ def choice_type_coerce_factory(type_): ...@@ -428,6 +427,8 @@ def choice_type_coerce_factory(type_):
Return a function to coerce a ChoiceType column, for use by Select2Field. Return a function to coerce a ChoiceType column, for use by Select2Field.
:param type_: ChoiceType object :param type_: ChoiceType object
""" """
from sqlalchemy_utils import Choice
choices = type_.choices choices = type_.choices
if isinstance(choices, type) and issubclass(choices, Enum): if isinstance(choices, type) and issubclass(choices, Enum):
key, choice_cls = 'value', choices key, choice_cls = 'value', choices
......
from sqlalchemy.ext.associationproxy import _AssociationList from sqlalchemy.ext.associationproxy import _AssociationList
from flask_admin.model.typefmt import BASE_FORMATTERS, EXPORT_FORMATTERS, \ from flask_admin.model.typefmt import BASE_FORMATTERS, EXPORT_FORMATTERS, \
DETAIL_FORMATTERS, list_formatter list_formatter
from sqlalchemy.orm.collections import InstrumentedList from sqlalchemy.orm.collections import InstrumentedList
from sqlalchemy_utils import Choice
from arrow import Arrow
def choice_formatter(view, choice): def choice_formatter(view, choice):
...@@ -42,15 +40,20 @@ def arrow_export_formatter(view, arrow_time): ...@@ -42,15 +40,20 @@ def arrow_export_formatter(view, arrow_time):
DEFAULT_FORMATTERS = BASE_FORMATTERS.copy() DEFAULT_FORMATTERS = BASE_FORMATTERS.copy()
EXPORT_FORMATTERS = EXPORT_FORMATTERS.copy() EXPORT_FORMATTERS = EXPORT_FORMATTERS.copy()
DETAIL_FORMATTERS = DETAIL_FORMATTERS.copy()
DEFAULT_FORMATTERS.update({ DEFAULT_FORMATTERS.update({
InstrumentedList: list_formatter, InstrumentedList: list_formatter,
_AssociationList: list_formatter, _AssociationList: list_formatter,
Choice: choice_formatter,
Arrow: arrow_formatter,
})
EXPORT_FORMATTERS.update({
Arrow: arrow_export_formatter,
}) })
try:
from sqlalchemy_utils import Choice
DEFAULT_FORMATTERS[Choice] = choice_formatter
except ImportError:
pass
try:
from arrow import Arrow
DEFAULT_FORMATTERS[Arrow] = arrow_formatter
EXPORT_FORMATTERS[Arrow] = arrow_export_formatter
except ImportError:
pass
from sqlalchemy.orm.exc import NoResultFound from sqlalchemy.orm.exc import NoResultFound
from sqlalchemy_utils import Currency
from wtforms import ValidationError from wtforms import ValidationError
try: try:
...@@ -70,6 +69,7 @@ class ItemsRequired(InputRequired): ...@@ -70,6 +69,7 @@ class ItemsRequired(InputRequired):
def valid_currency(form, field): def valid_currency(form, field):
from sqlalchemy_utils import Currency
try: try:
Currency(field.data) Currency(field.data)
except (TypeError, ValueError): except (TypeError, ValueError):
......
...@@ -18,3 +18,5 @@ pylint ...@@ -18,3 +18,5 @@ pylint
sqlalchemy-citext sqlalchemy-citext
sqlalchemy_utils sqlalchemy_utils
azure-storage-blob azure-storage-blob
arrow
colour
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment