Make psycopg2 requirement optional

This commit is contained in:
Konsta Vesterinen
2015-05-28 17:52:36 +03:00
parent 238f2cee36
commit 6875073d45
2 changed files with 22 additions and 3 deletions

View File

@@ -4,6 +4,12 @@ Changelog
Here you can see the full list of changes between each SQLAlchemy-Utils release. Here you can see the full list of changes between each SQLAlchemy-Utils release.
0.30.6 (2015-05-28)
^^^^^^^^^^^^^^^^^^^
- Make psycopg2 requirement optional (#145, #146)
0.30.5 (2015-05-27) 0.30.5 (2015-05-27)
^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^

View File

@@ -95,10 +95,18 @@ http://schinckel.net/2014/09/24/using-postgres-composite-types-in-django/
""" """
from collections import namedtuple from collections import namedtuple
import psycopg2 psycopg2 = None
CompositeCaster = None
adapt = None
AsIs = None
register_adapter = None
try:
import psycopg2
from psycopg2.extras import CompositeCaster
from psycopg2.extensions import adapt, AsIs, register_adapter
except ImportError:
pass
import sqlalchemy as sa import sqlalchemy as sa
from psycopg2.extras import CompositeCaster
from psycopg2.extensions import adapt, AsIs, register_adapter
from sqlalchemy.dialects.postgresql import ARRAY from sqlalchemy.dialects.postgresql import ARRAY
from sqlalchemy.dialects.postgresql.psycopg2 import PGDialect_psycopg2 from sqlalchemy.dialects.postgresql.psycopg2 import PGDialect_psycopg2
from sqlalchemy.ext.compiler import compiles from sqlalchemy.ext.compiler import compiles
@@ -110,6 +118,7 @@ from sqlalchemy.types import (
TypeDecorator, TypeDecorator,
UserDefinedType UserDefinedType
) )
from sqlalchemy_utils import ImproperlyConfigured
class CompositeElement(FunctionElement): class CompositeElement(FunctionElement):
@@ -166,6 +175,10 @@ class CompositeType(UserDefinedType, SchemaType):
return CompositeElement(self.expr, key, type_) return CompositeElement(self.expr, key, type_)
def __init__(self, name, columns): def __init__(self, name, columns):
if psycopg2 is None:
raise ImproperlyConfigured(
"'psycopg2' package is required in order to use CompositeType."
)
SchemaType.__init__(self) SchemaType.__init__(self)
self.name = name self.name = name
self.columns = columns self.columns = columns