Skip to content
Snippets Groups Projects
Commit 87b875d2 authored by Jakub Judiny's avatar Jakub Judiny
Browse files

Replace flask-sqlalchemy with sqlalchemy in sqlstorage.py, upgrade both

(Redmine issue: #7642)
parent 02cbe2ab
No related branches found
No related tags found
No related merge requests found
......@@ -3,7 +3,7 @@ psycopg2>=2.9.6,<2.10.0
babel>=2.12.1,<2.13.0
wtforms[email]>=3.0.1,<4.0.0
wtforms_sqlalchemy>=0.3,<1.0.0
sqlalchemy>=1.4.47,<2.0.0
sqlalchemy>=2.0.12,<=3.0.0
alembic>=1.10.2,<2.0.0
jinja2>=3.1.2,<3.2.0
bsddb3>=6.2.9,<6.3.0
......@@ -16,7 +16,7 @@ flask-babel>=3.0.1,<4.0.0
flask-principal>=0.4.0,<1.0.0
flask-wtf>=1.1.1,<2.0.0
flask-script>=2.0.6,<3.0.0
flask-sqlalchemy>=2.5.1,<3.0.0
flask-sqlalchemy>=3.0.3,<4.0.0
flask-debugtoolbar>=0.13.1,<1.0.0
flask-jsglue>=0.3.1,<1.0.0
dnspython>=2.3.0,<3.0.0
......
......@@ -10,8 +10,7 @@
"""
Database storage abstraction layer. The current implementation is based on the
awesome `SQLAlchemy <http://www.sqlalchemy.org/>`__ library accessed by
`flask_sqlalchemy <https://flask-sqlalchemy.palletsprojects.com/>`__.
awesome `SQLAlchemy <http://www.sqlalchemy.org/>`__ library.
.. warning::
......@@ -27,8 +26,7 @@ __credits__ = "Pavel Kácha <pavel.kacha@cesnet.cz>, Andrea Kropáčová <andrea
import copy
from flask import Flask
import flask_sqlalchemy
import sqlalchemy
#
# Custom libraries
......@@ -40,7 +38,7 @@ from mentat.datatype.sqldb import MODEL
_MANAGER = None
class RetryingQuery(flask_sqlalchemy.orm.Query):
class RetryingQuery(sqlalchemy.orm.Query):
"""
An override of SQLAlchemy's Query class, allowing for recovery from a lost DB
connection.
......@@ -49,7 +47,7 @@ class RetryingQuery(flask_sqlalchemy.orm.Query):
for _ in range(2):
try:
return super()._execute_and_instances(querycontext)
except flask_sqlalchemy.orm.exc.sa_exc.OperationalError:
except sqlalchemy.exc.OperationalError:
self.session.close()
continue
......@@ -68,14 +66,9 @@ class StorageService:
:param enginecfg: Connection arguments.
"""
self.app = Flask(__name__)
self.app.config['SQLALCHEMY_DATABASE_URI'] = enginecfg['url']
self.app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
self.db = flask_sqlalchemy.SQLAlchemy(self.app)
self.dbengine = self.db.engine_from_config(enginecfg, prefix = '')
self.sessionmaker = flask_sqlalchemy.orm.sessionmaker(bind = self.dbengine)
self._session = self.sessionmaker(query_cls = RetryingQuery)
self.dbengine = sqlalchemy.engine_from_config(enginecfg, prefix = '')
self.sessionmaker = sqlalchemy.orm.scoped_session(sqlalchemy.orm.sessionmaker(bind = self.dbengine))
self._session = self.sessionmaker(query_cls = RetryingQuery)
def __del__(self):
self.close()
......@@ -101,7 +94,7 @@ class StorageService:
"""
if self._session:
self._session.close()
self.sessionmaker.remove()
self._session = None
def session_new(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment