def register_extensions(app): sqlalchemy_utils.force_instant_defaults() sqlalchemy_utils.force_auto_coercion() DB.init_app(app) CORS.init_app(app) MIGRATE.init_app(app, DB) SOCKETIO.init_app(app) JWT.init_app(app) JWT._set_error_handler_callbacks(REST)
# | but WITHOUT ANY WARRANTY; without even the implied warranty of | # | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | # | GNU General Public License for more details. | # | | # | You should have received a copy of the GNU General Public License | # | along with this program. If not, see <http://www.gnu.org/licenses/>. | # +---------------------------------------------------------------------------+ from flask_cors import CORS import logging logging.getLogger('flask_cors').level = logging.DEBUG cross_origin_resource_sharing = CORS() from sqlalchemy_utils import force_auto_coercion, force_instant_defaults force_auto_coercion() force_instant_defaults() from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() from . import api from . import projects def init_app(app): """ Application extensions initialization. """ EXTENSIONS = (cross_origin_resource_sharing, api, projects, db)
# encoding: utf-8 # pylint: disable=invalid-name,wrong-import-position """ Extensions setup ================ """ from sqlalchemy_utils import force_auto_coercion, force_instant_defaults force_auto_coercion() force_instant_defaults() from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() from flask_login import LoginManager login_manager = LoginManager() from flask_marshmallow import Marshmallow marshmallow = Marshmallow() from . import api from .auth import OAuth2Provider oauth2 = OAuth2Provider() class AlembicDatabaseMigrationConfig(object): """ Helper config holder that provides missing functions of Flask-Alembic package since we use custom invoke tasks instead. """
MAX_WORD_LENGTH = 22 MAX_CLUE_LENGTH = 40 class User(BaseModel): id = Column(Integer, primary_key=True) language = Column(Enum(Language), nullable=False, default=DEFAULT_LANGUAGE) nickname = Column(String(MAX_NICKNAME_LENGTH)) player = relationship("DuetPlayer", cascade="save-update, merge, delete", uselist=False, back_populates="user") force_instant_defaults(User) class DuetPlayer(BaseModel): id = Column(Integer, ForeignKey("users.id"), primary_key=True) nickname = Column(String(MAX_NICKNAME_LENGTH), nullable=False) game_id = Column(UUIDType, ForeignKey("duet_games.id"), nullable=False) team = Column(Enum(duet.Team), nullable=False) user = relationship("User", lazy="joined", back_populates="player") game = relationship("DuetGame", back_populates="players") @validates("nickname") def trim_nickname(self, key, nickname: str) -> str: return nickname[:MAX_NICKNAME_LENGTH]