Skip to content

Commit 7535558

Browse files
committed
Update basemodels.py
some fixs to the BaseMixin, and removing flask-sqlalchemy
1 parent 753f4b0 commit 7535558

File tree

1 file changed

+20
-28
lines changed

1 file changed

+20
-28
lines changed

flask_xxl/basemodels.py

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,52 +16,46 @@
1616
from sqlalchemy.ext.declarative import as_declarative, declarative_base, declared_attr
1717
from sqlalchemy.ext.declarative.api import DeclarativeMeta
1818
from sqlalchemy.orm import scoped_session, sessionmaker
19-
from flask.ext.sqlalchemy import SQLAlchemy, _BoundDeclarativeMeta
2019
from sqlalchemy import UniqueConstraint,Column,Integer,Text,String,Date,DateTime,ForeignKey,func,create_engine
2120

2221
# classproperty decorator
2322
class classproperty(object):
2423
def __init__(self, getter):
2524
self.getter = getter
26-
2725
def __get__(self, instance, owner):
2826
return self.getter(owner)
2927

3028

31-
echo_sql = lambda: os.environ.get('DATABASE_URI') or current_app.config.get('SQLALCHEMY_ECHO',False)
32-
get_engine = lambda: create_engine(os.environ.get('DATABASE_URI') or current_app.config['SQLALCHEMY_DATABASE_URI'],echo=echo_sql())
33-
Session = lambda e: scoped_session(sessionmaker(bind=e))
29+
echo_sql = lambda: os.environ.get('DATABASE_URI') and current_app.config.get('SQLALCHEMY_ECHO',False)
30+
get_engine = lambda: create_engine(os.environ.get('DATABASE_URI') or current_app.config['DATABASE_URI'],echo=echo_sql())
3431

35-
Model = declarative_base()
32+
Base = declarative_base()
3633

3734

3835
class SQLAlchemyMissingException(Exception):
3936
pass
4037

41-
class ModelDeclarativeMeta(_BoundDeclarativeMeta):
42-
pass
43-
44-
@as_declarative(name='BaseMixin',metaclass=ModelDeclarativeMeta)
45-
class BaseMixin(object):
38+
class BaseMixin(Base):
4639
__table_args__ = {
4740
'extend_existing':True
4841
}
4942
__abstract__ = True
5043
_session = None
51-
_e = None
44+
_engine = None
45+
_query = None
5246
_meta = None
5347

5448
def __init__(self,*args,**kwargs):
5549
super(BaseMixin,self).__init__(*args,**kwargs)
56-
metadata = BaseMixin.metadata or Model.metadata
50+
metadata = BaseMixin.metadata or Base.metadata
5751
self.metadata = BaseMixin.metadata = metadata
5852

5953
@classproperty
60-
def _engine(cls):
61-
if cls._e is None:
62-
cls._e = get_engine()
63-
cls._e.echo = echo_sql()
64-
return cls._e
54+
def engine(cls):
55+
if BaseMixin._engine is None:
56+
BaseMixin._engine = get_engine()
57+
BaseMixin._engine.echo = echo_sql()
58+
return BaseMixin._engine
6559

6660
@declared_attr
6761
def id(self):
@@ -70,8 +64,14 @@ def id(self):
7064
@classproperty
7165
def session(cls):
7266
if cls._session is None:
73-
cls._session = Session(cls._engine)
74-
return cls._session()
67+
cls._session = scoped_session(sessionmaker(bind=cls.engine))()
68+
return cls._session
69+
70+
@classproperty
71+
def query(cls):
72+
if cls._query is None:
73+
cls._query = cls.session.query(cls)
74+
return cls._query
7575

7676
@declared_attr
7777
def __tablename__(self):
@@ -116,18 +116,13 @@ def delete(self, commit=True):
116116
self.session.delete(self)
117117
return commit and self.session.commit()
118118

119-
@classproperty
120-
def query(cls):
121-
return cls.session.query(cls)
122-
123119
@property
124120
def absolute_url(self):
125121
return self._get_absolute_url()
126122

127123
def _get_absolute_url(self):
128124
raise NotImplementedError('need to define _get_absolute_url')
129125

130-
131126
@classmethod
132127
def get_all_columns(cls,exclude=['id']):
133128
if not 'id' in exclude:
@@ -156,9 +151,6 @@ def date_added(self):
156151
def date_modified(self):
157152
return sq.Column(sq.DateTime,onupdate=dt.now)
158153

159-
160-
161-
162154
def _clean_name(name):
163155
names = name.split('_')
164156
if len(names) > 1:

0 commit comments

Comments
 (0)