From 768684c7ebf1952043a0010664880846ffdeafcd Mon Sep 17 00:00:00 2001 From: Philipp Spitzer Date: Sat, 20 Feb 2021 13:53:35 +0100 Subject: [PATCH] Use flask_sqlalchemy to manage the database connection. --- readme.md | 9 ++-- setup.py | 1 + tests/test_wradmin.py | 19 +++---- wradmin/__init__.py | 24 ++------- wradmin/app.py | 14 +++++ wradmin/controllers/bericht.py | 19 ++++--- wradmin/controllers/gasthaus.py | 14 ++--- wradmin/controllers/rodelbahn.py | 25 ++++----- wradmin/model/__init__.py | 89 +++++++++++++------------------- wradmin/model/meta.py | 15 ------ wradmin/test.cfg | 3 +- 11 files changed, 105 insertions(+), 127 deletions(-) create mode 100644 wradmin/app.py delete mode 100644 wradmin/model/meta.py diff --git a/readme.md b/readme.md index f66ccbf..c9196a5 100644 --- a/readme.md +++ b/readme.md @@ -30,22 +30,23 @@ Ipython shell: ``` $ FLASK_APP=wradmin FLASK_DEBUG=1 WRADMIN_SETTINGS=development.cfg ipython ->>> import wradmin.model ->>> wradmin.model.meta.Session.query(wradmin.model.MwUser).get(1) +>>> from wradmin.app import db +>>> from wradmin.model import MwUser +>>> user = db.session.query(MwUser).get(1) ``` ## Deploy Development environment: -``` +```{sh} $ python setup.py bdist_wheel $ scp bdist/wradmin-2.1.0.dev0-py3-none-any.whl colleen: ``` Server environment: -``` +```{sh} $ bin/wradmin stop $ pip uninstall wradmin $ pip install wradmin-2.1.0.dev0-py3-none-any.whl # or similar diff --git a/setup.py b/setup.py index 1e3cde9..290eaa9 100644 --- a/setup.py +++ b/setup.py @@ -17,6 +17,7 @@ setup( "Flask-Login", "Flask-Principal", "Flask-WTF", + "Flask-SQLAlchemy", "mysqlclient", ], packages=['wradmin', 'wradmin.auth', 'wradmin.model', 'wradmin.controllers'], diff --git a/tests/test_wradmin.py b/tests/test_wradmin.py index 35b8a05..44dce22 100644 --- a/tests/test_wradmin.py +++ b/tests/test_wradmin.py @@ -1,13 +1,17 @@ import unittest + import bs4 # beautiful soup + +import wradmin.app import wradmin.model -import wradmin +from wradmin.app import db class WradminTestBase(unittest.TestCase): def setUp(self): wradmin.app.config['TESTING'] = True self.app = wradmin.app.test_client() + self.db = db def login(self): return self.app.post('/login', data={'user_name': 'Johndoe', 'password': 'doejohn'}, follow_redirects=True) @@ -55,7 +59,7 @@ class TestDbWradmin(WradminTestBase): # fill database with open('tests/testdb.sql', 'r') as f: sql = f.read() - with wradmin.model.meta.engine.begin() as con: + with wradmin.db.engine.begin() as con: con.execution_options(no_parameters=True).execute(sql) # update dates @@ -119,7 +123,6 @@ class TestDbWradmin(WradminTestBase): self.assertIn('2018-01-30 15:09:00', str(soup)) def test_gasthaus_list(self): - result = self.login_and_get('/gasthaus/list') self.assertEqual(result.status_code, 200) self.assertTrue(result.data.startswith(b' SQLAlchemy: + db = SQLAlchemy(app) + + wrreport_table = wrmwdb.wrreport_table(db.metadata) + wrreportcache_table = wrmwdb.wrreportcache_table(db.metadata) + wrsledruncache_table = wrmwdb.wrsledruncache_table(db.metadata) + wrinncache_table = wrmwdb.wrinncache_table(db.metadata) + page_table = mwdb.page_table(db.metadata) + revision_table = mwdb.revision_table(db.metadata) + text_table = mwdb.text_table(db.metadata) + user_table = mwdb.user_table(db.metadata) + user_groups_table = mwdb.user_groups_table(db.metadata) + categorylinks_table = mwdb.categorylinks_table(db.metadata) + + orm.mapper(WrReport, wrreport_table) + # We could add a relation but we don't need it yet: + # orm.mapper(WrSledrunCache, wrsledruncache_table, + # properties = {'reports': orm.relation(WrReport, backref='sledding')}) + orm.mapper(WrSledrunCache, wrsledruncache_table) + orm.mapper(WrInnCache, wrinncache_table) + orm.mapper(MwText, text_table) + orm.mapper(MwUserGroups, user_groups_table) + orm.mapper(MwUser, user_table) + + return db diff --git a/wradmin/model/meta.py b/wradmin/model/meta.py deleted file mode 100644 index 8ce61aa..0000000 --- a/wradmin/model/meta.py +++ /dev/null @@ -1,15 +0,0 @@ -"""SQLAlchemy Metadata and Session object""" -from sqlalchemy import MetaData -from sqlalchemy.orm import scoped_session, sessionmaker - -__all__ = ['Session', 'engine', 'metadata'] - -# SQLAlchemy database engine. Updated by model.init_model() -engine = None - -# SQLAlchemy session manager. Updated by model.init_model() -Session = scoped_session(sessionmaker(autoflush=True, autocommit=False)) - -# Global metadata. If you have multiple databases with overlapping table -# names, you'll need a metadata for each database -metadata = MetaData() diff --git a/wradmin/test.cfg b/wradmin/test.cfg index 2a400ba..5f49193 100644 --- a/wradmin/test.cfg +++ b/wradmin/test.cfg @@ -1,4 +1,5 @@ DEBUG = False SECRET_KEY = b'.\xe2{\xa4ns\xb7\xbb\x0cHR\xdf@}\xfa\x05;.K\x9bQ\xbc!=' -DATABASE_URI = 'mysql://philipp@localhost:3306/philipp_winterrodeln_wiki_wradmin_test?charset=utf8&use_unicode=1' +SQLALCHEMY_DATABASE_URI = 'mysql://philipp@localhost:3306/philipp_winterrodeln_wiki_wradmin_test?charset=utf8mb4' WTF_CSRF_ENABLED = False +SQLALCHEMY_TRACK_MODIFICATIONS = False -- 2.39.5