[Python-modules-commits] [python-social-auth] 55/322: Simplify flask app initialization
Wolfgang Borgert
debacle at moszumanska.debian.org
Sat Dec 24 15:12:48 UTC 2016
This is an automated email from the git hooks/post-receive script.
debacle pushed a commit to tag v0.2.10
in repository python-social-auth.
commit cc5908675c95944b68aae038700c7ee901aff491
Author: Matías Aguirre <matiasaguirre at gmail.com>
Date: Sun Nov 23 01:45:47 2014 -0200
Simplify flask app initialization
---
examples/flask_example/__init__.py | 15 +++--
examples/flask_example/manage.py | 8 +--
examples/flask_example/models/user.py | 23 ++++---
examples/flask_example/settings.py | 9 +--
social/apps/flask_app/default/models.py | 103 ++++++++++++++++++--------------
social/storage/sqlalchemy_orm.py | 3 +-
6 files changed, 92 insertions(+), 69 deletions(-)
diff --git a/examples/flask_example/__init__.py b/examples/flask_example/__init__.py
index f791441..a5ebd77 100644
--- a/examples/flask_example/__init__.py
+++ b/examples/flask_example/__init__.py
@@ -1,7 +1,9 @@
import sys
+from sqlalchemy import create_engine
+from sqlalchemy.orm import scoped_session, sessionmaker
+
from flask import Flask, g
-from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext import login
sys.path.append('../..')
@@ -20,9 +22,12 @@ except ImportError:
pass
# DB
-db = SQLAlchemy(app)
+engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'])
+Session = sessionmaker(autocommit=False, autoflush=False, bind=engine)
+db_session = scoped_session(Session)
+
app.register_blueprint(social_auth)
-init_social(app, db)
+init_social(app, db_session)
login_manager = login.LoginManager()
login_manager.login_view = 'main'
@@ -49,12 +54,12 @@ def global_user():
@app.teardown_appcontext
def commit_on_success(error=None):
if error is None:
- db.session.commit()
+ db_session.commit()
@app.teardown_request
def shutdown_session(exception=None):
- db.session.remove()
+ db_session.remove()
@app.context_processor
diff --git a/examples/flask_example/manage.py b/examples/flask_example/manage.py
index 9c6302f..a298e00 100755
--- a/examples/flask_example/manage.py
+++ b/examples/flask_example/manage.py
@@ -5,14 +5,14 @@ from flask.ext.script import Server, Manager, Shell
sys.path.append('..')
-from flask_example import app, db
+from flask_example import app, db_session, engine
manager = Manager(app)
manager.add_command('runserver', Server())
manager.add_command('shell', Shell(make_context=lambda: {
'app': app,
- 'db': db
+ 'db_session': db_session
}))
@@ -20,8 +20,8 @@ manager.add_command('shell', Shell(make_context=lambda: {
def syncdb():
from flask_example.models import user
from social.apps.flask_app.default import models
- db.drop_all()
- db.create_all()
+ user.Base.metadata.create_all(engine)
+ models.PSABase.metadata.create_all(engine)
if __name__ == '__main__':
manager.run()
diff --git a/examples/flask_example/models/user.py b/examples/flask_example/models/user.py
index 32727f6..7cb7058 100644
--- a/examples/flask_example/models/user.py
+++ b/examples/flask_example/models/user.py
@@ -1,16 +1,23 @@
+from sqlalchemy import Column, String, Integer, Boolean
+from sqlalchemy.ext.declarative import declarative_base
+
from flask.ext.login import UserMixin
-from flask_example import db
+from flask_example import db_session
+
+
+Base = declarative_base()
+Base.query = db_session.query_property()
-class User(db.Model, UserMixin):
+class User(Base, UserMixin):
__tablename__ = 'users'
- id = db.Column(db.Integer, primary_key=True)
- username = db.Column(db.String(200))
- password = db.Column(db.String(200), default='')
- name = db.Column(db.String(100))
- email = db.Column(db.String(200))
- active = db.Column(db.Boolean, default=True)
+ id = Column(Integer, primary_key=True)
+ username = Column(String(200))
+ password = Column(String(200), default='')
+ name = Column(String(100))
+ email = Column(String(200))
+ active = Column(Boolean, default=True)
def is_active(self):
return self.active
diff --git a/examples/flask_example/settings.py b/examples/flask_example/settings.py
index 839e009..101f1b8 100644
--- a/examples/flask_example/settings.py
+++ b/examples/flask_example/settings.py
@@ -1,14 +1,9 @@
-from flask_example import app
-
-
-app.debug = True
+from os.path import dirname, abspath
SECRET_KEY = 'random-secret-key'
SESSION_COOKIE_NAME = 'psa_session'
-DEBUG = False
-from os.path import dirname, abspath
+DEBUG = True
SQLALCHEMY_DATABASE_URI = 'sqlite:////%s/test.db' % dirname(abspath(__file__))
-
DEBUG_TB_INTERCEPT_REDIRECTS = False
SESSION_PROTECTION = 'strong'
diff --git a/social/apps/flask_app/default/models.py b/social/apps/flask_app/default/models.py
index c284d09..556adc1 100644
--- a/social/apps/flask_app/default/models.py
+++ b/social/apps/flask_app/default/models.py
@@ -1,6 +1,8 @@
"""Flask SQLAlchemy ORM models for Social Auth"""
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, backref
+from sqlalchemy.schema import UniqueConstraint
+from sqlalchemy.ext.declarative import declarative_base
from social.utils import setting_name, module_member
from social.storage.sqlalchemy_orm import SQLAlchemyUserMixin, \
@@ -10,52 +12,65 @@ from social.storage.sqlalchemy_orm import SQLAlchemyUserMixin, \
BaseSQLAlchemyStorage
+PSABase = declarative_base()
+
+
+class _AppSession(PSABase):
+ __abstract__ = True
+
+ @classmethod
+ def _set_session(cls, app_session):
+ cls.app_session = app_session
+
+ @classmethod
+ def _session(cls):
+ return cls.app_session
+
+
+class UserSocialAuth(_AppSession, SQLAlchemyUserMixin):
+ """Social Auth association model"""
+ # Temporary override of constraints to avoid an error on the still-to-be
+ # missing column uid.
+ __table_args__ = ()
+
+ @classmethod
+ def user_model(cls):
+ return cls.user.property.argument
+
+ @classmethod
+ def username_max_length(cls):
+ user_model = cls.user_model()
+ return user_model.__table__.columns.get('username').type.length
+
+
+class Nonce(_AppSession, SQLAlchemyNonceMixin):
+ """One use numbers"""
+ pass
+
+
+class Association(_AppSession, SQLAlchemyAssociationMixin):
+ """OpenId account association"""
+ pass
+
+
+class Code(_AppSession, SQLAlchemyCodeMixin):
+ pass
+
+
class FlaskStorage(BaseSQLAlchemyStorage):
- user = None
- nonce = None
- association = None
- code = None
+ user = UserSocialAuth
+ nonce = Nonce
+ association = Association
+ code = Code
-def init_social(app, db):
+def init_social(app, session):
UID_LENGTH = app.config.get(setting_name('UID_LENGTH'), 255)
User = module_member(app.config[setting_name('USER_MODEL')])
- app_session = db.session
-
- class _AppSession(object):
- @classmethod
- def _session(cls):
- return app_session
-
- class UserSocialAuth(_AppSession, db.Model, SQLAlchemyUserMixin):
- """Social Auth association model"""
- uid = Column(String(UID_LENGTH))
- user_id = Column(Integer, ForeignKey(User.id),
- nullable=False, index=True)
- user = relationship(User, backref=backref('social_auth',
- lazy='dynamic'))
-
- @classmethod
- def username_max_length(cls):
- return User.__table__.columns.get('username').type.length
-
- @classmethod
- def user_model(cls):
- return User
-
- class Nonce(_AppSession, db.Model, SQLAlchemyNonceMixin):
- """One use numbers"""
- pass
-
- class Association(_AppSession, db.Model, SQLAlchemyAssociationMixin):
- """OpenId account association"""
- pass
-
- class Code(_AppSession, db.Model, SQLAlchemyCodeMixin):
- pass
-
- # Set the references in the storage class
- FlaskStorage.user = UserSocialAuth
- FlaskStorage.nonce = Nonce
- FlaskStorage.association = Association
- FlaskStorage.code = Code
+ _AppSession._set_session(session)
+ UserSocialAuth.__table_args__ = (UniqueConstraint('provider', 'uid'),)
+ UserSocialAuth.uid = Column(String(UID_LENGTH))
+ UserSocialAuth.user_id = Column(Integer, ForeignKey(User.id),
+ nullable=False, index=True)
+ UserSocialAuth.user = relationship(User, backref=backref('social_auth',
+ lazy='dynamic'))
diff --git a/social/storage/sqlalchemy_orm.py b/social/storage/sqlalchemy_orm.py
index f1934c4..1be8a1a 100644
--- a/social/storage/sqlalchemy_orm.py
+++ b/social/storage/sqlalchemy_orm.py
@@ -3,10 +3,11 @@ import base64
import six
import json
+from sqlalchemy import Column, Integer, String
from sqlalchemy.exc import IntegrityError
from sqlalchemy.types import PickleType, Text
-from sqlalchemy import Column, Integer, String
from sqlalchemy.schema import UniqueConstraint
+from sqlalchemy.ext.declarative import declared_attr
from social.storage.base import UserMixin, AssociationMixin, NonceMixin, \
CodeMixin, BaseStorage
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-social-auth.git
More information about the Python-modules-commits
mailing list