Whoosh indexing capabilities for Flask-SQLAlchemy, Python 3 compatibility fork.

Overview

Flask-WhooshAlchemy3

PyPI version license

Whoosh indexing capabilities for Flask-SQLAlchemy, Python 3 compatibility fork. Performance improvements and suggestions are readily welcome.

Inspired from gyllstromk's Flask-WhooshAlchemy.

Install

$ pip install flask-whooshalchemy3

..alternatively from source,

$ pip install git+git://github.com/blakev/Flask-WhooshAlchemy3.git@master

Quickstart

from datetime import datetime

import flask_sqlalchemy
import flask_whooshalchemy
from whoosh.analysis import StemmingAnalyzer

db = flask_sqlalchemy.SQLAlchemy()

class BlogPost(db.Model):
    __tablename__ = 'posts'
    __searchable__ = ['title', 'content', 'summary']  # indexed fields
    __analyzer__ = StemmingAnalyzer()
    
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(255), unique=True)
    content = db.Column(db.Text(32*1024))
    summary = db.Column(db.String(1024))
    created = db.Column(db.DateTime, default=datetime.utcnow)

Committing model instances to the session will write or update the Whoosh index.

db.session.add(BlogPost(title='First Post!', content='This is awesome.'))
db.session.commit()

Searching is done via Model.query.search(..). However, the request must be done within the Flask request context otherwise the database connection may not be established.

@app.route('/posts')
def posts():
    num_posts = min(request.args.get('limit', 10), 50)
    query = request.args.get('q', '')
    results = BlogPost.query.search(query, limit=num_posts)

Results are ordered by Whoosh's ranking-algorithm, but can be overwritten with SQLAlchemy .order_by.

yesterday = datetime.utcnow() - timedelta(days=1)
results = BlogPost.query
            .filter(BlogPost.created > yesterday)
            .search('first')
            .order_by(desc(BlogPost.created))

Flask Configuration

WHOOSH_ANALYZER (whoosh.Analyzer)

WHOOSH_INDEX_PATH (str)

  • File path to where the text indexes will be saved.
  • Default: {cwd}/.indexes/*

WHOOSH_INDEXING_CPUS (int)

  • The number of system processes to spawn for indexing new and modified documents.
  • Default: 2

WHOOSH_INDEXING_RAM (int)

  • The amount of RAM, in megabytes, to reserve per indexing process for data processing.
  • Default: 256

WHOOSH_RAM_CACHE (bool)

  • Allows common queries and their fields to be stored in cache, in RAM.
  • Default: False

License

MIT License

Copyright (c) 2017 Blake VandeMerwe

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Comments
  • AttributeError: 'BaseQuery' object has no attribute 'search'

    AttributeError: 'BaseQuery' object has no attribute 'search'

    hi i testing this extension but get error my config for Flask

    <Config {'DEBUG': True, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': None, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(31), 'USE_X_SENDFILE': False, 'LOGGER_NAME': 'test', 'LOGGER_HANDLER_POLICY': 'always', 'SERVER_NAME': None, 'APPLICATION_ROOT': None, 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(0, 43200), 'TRAP_BAD_REQUEST_ERRORS': False, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': True, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'BASEDIR': '/mnt/website/WORKING/website_crawler/config', 'SQLALCHEMY_DATABASE_URI': 'sqlite:////mnt/website/WORKING/website_crawler/config/app.db', 'SQLALCHEMY_TRACK_MODIFICATIONS': False, 'TOP_LEVEL_DIR': '/mnt/website/WORKING/website_crawler/config', 'WHOOSH_BASE': '/mnt/website/WORKING/website_crawler/config/packtpub', 'WHOOSH_INDEX_PATH': '/mnt/website/WORKING/website_crawler/config/packtpub', 'SQLALCHEMY_BINDS': None, 'SQLALCHEMY_NATIVE_UNICODE': None, 'SQLALCHEMY_ECHO': False, 'SQLALCHEMY_RECORD_QUERIES': None, 'SQLALCHEMY_POOL_SIZE': None, 'SQLALCHEMY_POOL_TIMEOUT': None, 'SQLALCHEMY_POOL_RECYCLE': None, 'SQLALCHEMY_MAX_OVERFLOW': None, 'SQLALCHEMY_COMMIT_ON_TEARDOWN': False}>

    and my main.py

    from flask import Flask, request
    from flask_sqlalchemy import SQLAlchemy
    import flask_whooshalchemy
    from whoosh.analysis import StemmingAnalyzer
    app = Flask(__name__)
    app.config.from_pyfile('settings.py')
    db = SQLAlchemy(app)
    class PACKTPUB(db.Model):
        __tablename__ = "packtpubs"
        # these fields will be indexed by whoosh
        __searchable__ = ['title', 'isbn']
        _analyzer__ = StemmingAnalyzer()
        id = db.Column(db.Integer, primary_key=True)
        title = db.Column(db.String(500))
        isbn = db.Column(db.String(50), index=True, unique=True)
        def __init__(self, title, isbn):
            self.title = title
            self.isbn = isbn
        def __repr__(self):
            return '<PacktPub Title %r>' % (self.title)
    @app.route('/packtpubs/search')
    def search():
        num_posts = min(request.args.get('limit', 10), 50)
        query = request.args.get('q', '')
        results = PACKTPUB.query.search(query, limit=num_posts)
        return results
    @app.route('/packtpubs/create', methods=['POST'])
    def packtpubs_create():
        packtpub = PACKTPUB(
            title=request.get_json().get('title'),
            isbn=request.get_json().get('isbn')
        )
        db.session.add(packtpub)
        db.session.commit()
        return 'DONE'
    if __name__ == "__main__":
        app.run()
    

    how to make it works

    opened by alochym01 9
  • SQLAlchemy is locked to 1.1.13

    SQLAlchemy is locked to 1.1.13

    Requirements.txt forces SQLAlchemy to 1.1.13 which is vulnerable to: CVE-2019-7164 CVE-2019-7548

    Can this be updated to work on SQLAlchemy 1.3 and later where these were patched?

    opened by TheMeanCanEHdian 4
  • AttributeError: 'BaseQuery' object has no attribute 'search'

    AttributeError: 'BaseQuery' object has no attribute 'search'

    Hi there,

    Giving this a go.

    Here is my config:

    # Database
    SQLALCHEMY_DATABASE_URI = 'sqlite:///db/site.db'
    # turning on tracking so the search extension can track if anything in the database changes
    SQL_TRACK_MODIFICATIONS = True
    
    # set the location for the whoosh index
    WHOOSH_INDEX_PATH = 'whooshIndex'
    WHOOSH_ANALYZER = 'StemmingAnalyzer'
    

    My model:

    class Org(db.Model):
        __searchable__ = ['orgName', 'phone1', 'phone2', 'phone3', 'email1', 'email2', 'email3', 'backgroundInfo']
        __analyzer__ = StemmingAnalyzer()
        id = db.Column(db.Integer, primary_key=True)
        active = db.Column(db.Boolean, unique=False, default=True)
        orgName = db.Column(db.String(200), unique=True, nullable=False)
        posts = db.relationship('Log', backref='organisation', lazy=True)
        postalStreet = db.Column(db.String(200))
        postalTown = db.Column(db.String(60))
        postalState = db.Column(db.String(20))
        postalPostCode = db.Column(db.String(10))
        backgroundInfo = db.Column(db.String(1000))
        phone1 = db.Column(db.String(128))
        phone2 = db.Column(db.String(128))
        phone3 = db.Column(db.String(128))
        phone1Type = db.Column(db.String(24))
        phone2Type = db.Column(db.String(24))
        phone3Type = db.Column(db.String(24))
        email1 = db.Column(db.String(128))
        email2 = db.Column(db.String(128))
        email3 = db.Column(db.String(128))
        email1Type = db.Column(db.String(24))
        email2Type = db.Column(db.String(24))
        email3Type = db.Column(db.String(24))
    
        def __repr__(self):  # this is how our object is printed when we print it out
            return f"Org('{self.orgName}')"
    

    If I add data it creates the index files. I can see them being created in the file system. All good from that end.

    Here is my search code in a view:

    num_posts = min(request.args.get('limit', 10), 50)
    query = request.args.get('q', '')
    results = Org.query.search(query, limit=num_posts)
    

    It's returning AttributeError: 'BaseQuery' object has no attribute 'search'

    I've done a heap of searching but am coming up empty. Can you spot what the issue is?

    Thank you

    opened by therealrobster 4
  • Flask_whooshalchemy3 not indexing entries in blueprints

    Flask_whooshalchemy3 not indexing entries in blueprints

    I have no problem when using flask_whooshalchemy3 without blueprints but with blueprints and factory function, either the indexes were not created or created but never searched.

    Without Blueprint: Here is a portion of the view file, I called the flask_whooshalchemy3 search method in the before_first_request decorator.

    from datetime import datetime
    import json
    import flask_whooshalchemy
    
    from flask import render_template, request, abort, redirect, \
        url_for, flash
    from werkzeug.urls import url_parse
    from flask_security import Security, SQLAlchemyUserDatastore, \
        utils, login_required, login_user, logout_user, current_user
    from flask_admin import Admin
    
    from . import app
    from .models import Article, Tag, db, User, Role, articles_tags, \
                        ArticleAdmin, TagAdmin, UserAdmin, RoleAdmin
    from .forms import ArticleForm, LoginForm, RegistrationForm
    from .utilities import split_article, update_article, can_edit
    # ----------- Initializations----------------------------------
    # Initialize the SQLAlchemy data store.
    user_datastore = SQLAlchemyUserDatastore(db, User, Role)
    # Initialize Flask-Security.
    Security(app, user_datastore)
    
    # Executes before the first request is processed.
    @app.before_first_request
    def before_first_request():
    
        # Create any database tables that don't exist yet.
        db.create_all()
        # Indexing of articles to be search ready
        flask_whooshalchemy.search_index(app, Article)
    

    With Blueprint: I called the search method in the app factory

    from flask import Flask
    from flask_admin import Admin
    import flask_whooshalchemy
    from flask_fileupload import FlaskFileUpload
    from models import Article, Tag, db, User, Role, ArticleAdmin, \
                        TagAdmin, UserAdmin, RoleAdmin
    from config import config
    
    def create_app(config_name):
        app=Flask(__name__)
        app.config.from_object(config[config_name])
        db.init_app(app)
        db.reflect(app=app)
        # Initialize Flask-FileUpload.
        FlaskFileUpload(app)
        flask_whooshalchemy.search_index(app, Article)
        # Initialize Flask-Admin.
        admin = Admin(app)
        admin.add_view(ArticleAdmin(Article, db.session))
        admin.add_view(TagAdmin(Tag, db.session))
        admin.add_view(UserAdmin(User, db.session))
        admin.add_view(RoleAdmin(Role, db.session))
        # ----------- Initializations----------------------------------
        # Initialize the SQLAlchemy data store.
        from flask_security import Security, SQLAlchemyUserDatastore
        user_datastore = SQLAlchemyUserDatastore(db, User, Role)
        # Initialize Flask-Security.
        Security(app, user_datastore)
        from equimolar_blog.main_app import create_module
        with app.app_context():
            # Time to make sure roles exist in the database
            db.create_all()
            try:
                from create_db import create_roles
                create_roles(user_datastore, db)
            except ImportError:
                pass
            create_module(app)
        return app
    

    I can't seem to point-out where the problem is.

    opened by EwetoyeIbrahim 2
  • Unknown system variable 'tx_isolation'

    Unknown system variable 'tx_isolation'

    I have mysql version 8 installed mysql-8.0.18-winx64 When I have migrate command done, it shows following error

    python app.py db migrate Traceback (most recent call last): File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect return fn() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout fairy = _ConnectionRecord.checkout(pool) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout rec = pool._do_get() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get return self._create_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection return _ConnectionRecord(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init self.__connect(first_connect_check=True) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect exec_once(self.connection, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once self(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call fn(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go return once_fn(*arg, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect dialect.initialize(c) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize default.DefaultDialect.initialize(self, connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize self.get_isolation_level(connection.connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level cursor.execute('SELECT @@tx_isolation') File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute result = self._query(query) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query conn.query(q) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result result.read() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read first_packet = self.connection._read_packet() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet packet.check_error() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error err.raise_mysql_exception(self._data) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.InternalError: (1193, "Unknown system variable 'tx_isolation'")

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "app.py", line 44, in manager.run() File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 417, in run result = self.handle(argv[0], argv[1:]) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 386, in handle res = handle(*args, **config) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script\commands.py", line 216, in call return self.run(*args, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 95, in wrapped f(*args, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 215, in migrate version_path=version_path, rev_id=rev_id) File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\command.py", line 214, in revision script_directory.run_env() File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\script\base.py", line 489, in run_env util.load_python_file(self.dir, "env.py") File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\pyfiles.py", line 98, in load_python_file module = load_module_py(module_id, path) File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\compat.py", line 173, in load_module_py spec.loader.exec_module(module) File "", line 728, in exec_module File "", line 219, in _call_with_frames_removed File "migrations\env.py", line 96, in run_migrations_online() File "migrations\env.py", line 81, in run_migrations_online with connectable.connect() as connection: File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2091, in connect return self._connection_cls(self, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 90, in init if connection is not None else engine.raw_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2177, in raw_connection self.pool.unique_connection, _connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2151, in _wrap_pool_connect e, dialect, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 1465, in _handle_dbapi_exception_noconnection exc_info File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 203, in raise_from_cause reraise(type(exception), exception, tb=exc_tb, cause=cause) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 186, in reraise raise value.with_traceback(tb) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect return fn() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout fairy = _ConnectionRecord.checkout(pool) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout rec = pool._do_get() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get return self._create_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection return _ConnectionRecord(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init self.__connect(first_connect_check=True) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect exec_once(self.connection, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once self(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call fn(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go return once_fn(*arg, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect dialect.initialize(c) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize default.DefaultDialect.initialize(self, connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize self.get_isolation_level(connection.connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level cursor.execute('SELECT @@tx_isolation') File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute result = self._query(query) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query conn.query(q) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result result.read() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read first_packet = self.connection._read_packet() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet packet.check_error() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error err.raise_mysql_exception(self._data) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception raise errorclass(errno, errval) sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1193, "Unknown system variable 'tx_isolation'")

    (env) C:\sources\Demo\Demo_api>python app.py db stamp head Traceback (most recent call last): File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect return fn() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout fairy = _ConnectionRecord.checkout(pool) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout rec = pool._do_get() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get return self._create_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection return _ConnectionRecord(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init self.__connect(first_connect_check=True) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect exec_once(self.connection, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once self(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call fn(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go return once_fn(*arg, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect dialect.initialize(c) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize default.DefaultDialect.initialize(self, connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize self.get_isolation_level(connection.connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level cursor.execute('SELECT @@tx_isolation') File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute result = self._query(query) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query conn.query(q) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result result.read() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read first_packet = self.connection._read_packet() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet packet.check_error() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error err.raise_mysql_exception(self._data) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.InternalError: (1193, "Unknown system variable 'tx_isolation'")

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "app.py", line 44, in manager.run() File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 417, in run result = self.handle(argv[0], argv[1:]) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 386, in handle res = handle(*args, **config) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script\commands.py", line 216, in call return self.run(*args, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 95, in wrapped f(*args, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 412, in stamp command.stamp(config, revision, sql=sql, tag=tag) File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\command.py", line 579, in stamp script.run_env() File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\script\base.py", line 489, in run_env util.load_python_file(self.dir, "env.py") File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\pyfiles.py", line 98, in load_python_file module = load_module_py(module_id, path) File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\compat.py", line 173, in load_module_py spec.loader.exec_module(module) File "", line 728, in exec_module File "", line 219, in _call_with_frames_removed File "migrations\env.py", line 96, in run_migrations_online() File "migrations\env.py", line 81, in run_migrations_online with connectable.connect() as connection: File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2091, in connect return self._connection_cls(self, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 90, in init if connection is not None else engine.raw_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2177, in raw_connection self.pool.unique_connection, _connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2151, in _wrap_pool_connect e, dialect, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 1465, in _handle_dbapi_exception_noconnection exc_info File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 203, in raise_from_cause reraise(type(exception), exception, tb=exc_tb, cause=cause) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 186, in reraise raise value.with_traceback(tb) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect return fn() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout fairy = _ConnectionRecord.checkout(pool) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout rec = pool._do_get() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get return self._create_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection return _ConnectionRecord(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init self.__connect(first_connect_check=True) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect exec_once(self.connection, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once self(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call fn(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go return once_fn(*arg, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect dialect.initialize(c) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize default.DefaultDialect.initialize(self, connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize self.get_isolation_level(connection.connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level cursor.execute('SELECT @@tx_isolation') File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute result = self._query(query) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query conn.query(q) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result result.read() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read first_packet = self.connection._read_packet() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet packet.check_error() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error err.raise_mysql_exception(self._data) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception raise errorclass(errno, errval) sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1193, "Unknown system variable 'tx_isolation'")

    (env) C:\sources\Demo\Demo_api>python app.py db upgrade Traceback (most recent call last): File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect return fn() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout fairy = _ConnectionRecord.checkout(pool) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout rec = pool._do_get() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get return self._create_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection return _ConnectionRecord(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init self.__connect(first_connect_check=True) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect exec_once(self.connection, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once self(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call fn(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go return once_fn(*arg, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect dialect.initialize(c) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize default.DefaultDialect.initialize(self, connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize self.get_isolation_level(connection.connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level cursor.execute('SELECT @@tx_isolation') File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute result = self._query(query) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query conn.query(q) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result result.read() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read first_packet = self.connection._read_packet() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet packet.check_error() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error err.raise_mysql_exception(self._data) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.InternalError: (1193, "Unknown system variable 'tx_isolation'")

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "app.py", line 44, in manager.run() File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 417, in run result = self.handle(argv[0], argv[1:]) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 386, in handle res = handle(*args, **config) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script\commands.py", line 216, in call return self.run(*args, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 95, in wrapped f(*args, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 280, in upgrade command.upgrade(config, revision, sql=sql, tag=tag) File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\command.py", line 298, in upgrade script.run_env() File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\script\base.py", line 489, in run_env util.load_python_file(self.dir, "env.py") File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\pyfiles.py", line 98, in load_python_file module = load_module_py(module_id, path) File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\compat.py", line 173, in load_module_py spec.loader.exec_module(module) File "", line 728, in exec_module File "", line 219, in _call_with_frames_removed File "migrations\env.py", line 96, in run_migrations_online() File "migrations\env.py", line 81, in run_migrations_online with connectable.connect() as connection: File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2091, in connect return self._connection_cls(self, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 90, in init if connection is not None else engine.raw_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2177, in raw_connection self.pool.unique_connection, _connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2151, in _wrap_pool_connect e, dialect, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 1465, in _handle_dbapi_exception_noconnection exc_info File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 203, in raise_from_cause reraise(type(exception), exception, tb=exc_tb, cause=cause) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 186, in reraise raise value.with_traceback(tb) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect return fn() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout fairy = _ConnectionRecord.checkout(pool) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout rec = pool._do_get() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get return self._create_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection return _ConnectionRecord(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init self.__connect(first_connect_check=True) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect exec_once(self.connection, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once self(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call fn(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go return once_fn(*arg, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect dialect.initialize(c) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize default.DefaultDialect.initialize(self, connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize self.get_isolation_level(connection.connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level cursor.execute('SELECT @@tx_isolation') File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute result = self._query(query) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query conn.query(q) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result result.read() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read first_packet = self.connection._read_packet() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet packet.check_error() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error err.raise_mysql_exception(self._data) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception raise errorclass(errno, errval) sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1193, "Unknown system variable 'tx_isolation'")

    (env) C:\sources\Demo\Demo_api>python app.py db stamp head Traceback (most recent call last): File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect return fn() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout fairy = _ConnectionRecord.checkout(pool) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout rec = pool._do_get() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get return self._create_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection return _ConnectionRecord(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init self.__connect(first_connect_check=True) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect exec_once(self.connection, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once self(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call fn(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go return once_fn(*arg, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect dialect.initialize(c) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize default.DefaultDialect.initialize(self, connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize self.get_isolation_level(connection.connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level cursor.execute('SELECT @@tx_isolation') File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute result = self._query(query) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query conn.query(q) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result result.read() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read first_packet = self.connection._read_packet() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet packet.check_error() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error err.raise_mysql_exception(self._data) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.InternalError: (1193, "Unknown system variable 'tx_isolation'")

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "app.py", line 44, in manager.run() File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 417, in run result = self.handle(argv[0], argv[1:]) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 386, in handle res = handle(*args, **config) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script\commands.py", line 216, in call return self.run(*args, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 95, in wrapped f(*args, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 412, in stamp command.stamp(config, revision, sql=sql, tag=tag) File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\command.py", line 579, in stamp script.run_env() File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\script\base.py", line 489, in run_env util.load_python_file(self.dir, "env.py") File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\pyfiles.py", line 98, in load_python_file module = load_module_py(module_id, path) File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\compat.py", line 173, in load_module_py spec.loader.exec_module(module) File "", line 728, in exec_module File "", line 219, in _call_with_frames_removed File "migrations\env.py", line 96, in run_migrations_online() File "migrations\env.py", line 81, in run_migrations_online with connectable.connect() as connection: File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2091, in connect return self._connection_cls(self, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 90, in init if connection is not None else engine.raw_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2177, in raw_connection self.pool.unique_connection, _connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2151, in _wrap_pool_connect e, dialect, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 1465, in _handle_dbapi_exception_noconnection exc_info File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 203, in raise_from_cause reraise(type(exception), exception, tb=exc_tb, cause=cause) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 186, in reraise raise value.with_traceback(tb) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect return fn() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout fairy = _ConnectionRecord.checkout(pool) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout rec = pool._do_get() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get return self._create_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection return _ConnectionRecord(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init self.__connect(first_connect_check=True) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect exec_once(self.connection, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once self(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call fn(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go return once_fn(*arg, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect dialect.initialize(c) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize default.DefaultDialect.initialize(self, connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize self.get_isolation_level(connection.connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level cursor.execute('SELECT @@tx_isolation') File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute result = self._query(query) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query conn.query(q) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result result.read() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read first_packet = self.connection._read_packet() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet packet.check_error() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error err.raise_mysql_exception(self._data) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception raise errorclass(errno, errval) sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1193, "Unknown system variable 'tx_isolation'")

    (env) C:\sources\Demo\Demo_api>python app.py db migrate Traceback (most recent call last): File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect return fn() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout fairy = _ConnectionRecord.checkout(pool) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout rec = pool._do_get() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get return self._create_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection return _ConnectionRecord(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init self.__connect(first_connect_check=True) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect exec_once(self.connection, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once self(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call fn(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go return once_fn(*arg, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect dialect.initialize(c) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize default.DefaultDialect.initialize(self, connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize self.get_isolation_level(connection.connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level cursor.execute('SELECT @@tx_isolation') File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute result = self._query(query) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query conn.query(q) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result result.read() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read first_packet = self.connection._read_packet() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet packet.check_error() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error err.raise_mysql_exception(self._data) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.InternalError: (1193, "Unknown system variable 'tx_isolation'")

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "app.py", line 44, in manager.run() File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 417, in run result = self.handle(argv[0], argv[1:]) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script_init_.py", line 386, in handle res = handle(*args, **config) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_script\commands.py", line 216, in call return self.run(*args, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 95, in wrapped f(*args, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\flask_migrate_init_.py", line 215, in migrate version_path=version_path, rev_id=rev_id) File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\command.py", line 214, in revision script_directory.run_env() File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\script\base.py", line 489, in run_env util.load_python_file(self.dir, "env.py") File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\pyfiles.py", line 98, in load_python_file module = load_module_py(module_id, path) File "C:\sources\Demo\Demo_api\env\lib\site-packages\alembic\util\compat.py", line 173, in load_module_py spec.loader.exec_module(module) File "", line 728, in exec_module File "", line 219, in _call_with_frames_removed File "migrations\env.py", line 96, in run_migrations_online() File "migrations\env.py", line 81, in run_migrations_online with connectable.connect() as connection: File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2091, in connect return self._connection_cls(self, **kwargs) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 90, in init if connection is not None else engine.raw_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2177, in raw_connection self.pool.unique_connection, _connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2151, in _wrap_pool_connect e, dialect, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 1465, in _handle_dbapi_exception_noconnection exc_info File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 203, in raise_from_cause reraise(type(exception), exception, tb=exc_tb, cause=cause) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\compat.py", line 186, in reraise raise value.with_traceback(tb) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\base.py", line 2147, in _wrap_pool_connect return fn() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 766, in _checkout fairy = _ConnectionRecord.checkout(pool) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 516, in checkout rec = pool._do_get() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 1229, in _do_get return self._create_connection() File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 333, in _create_connection return _ConnectionRecord(self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 461, in init self.__connect(first_connect_check=True) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\pool.py", line 661, in __connect exec_once(self.connection, self) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 246, in exec_once self(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\event\attr.py", line 256, in call fn(*args, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\util\langhelpers.py", line 1331, in go return once_fn(*arg, **kw) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 181, in first_connect dialect.initialize(c) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1714, in initialize default.DefaultDialect.initialize(self, connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\engine\default.py", line 256, in initialize self.get_isolation_level(connection.connection) File "C:\sources\Demo\Demo_api\env\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 1569, in get_isolation_level cursor.execute('SELECT @@tx_isolation') File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 170, in execute result = self._query(query) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\cursors.py", line 328, in _query conn.query(q) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 517, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result result.read() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 1075, in read first_packet = self.connection._read_packet() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\connections.py", line 684, in _read_packet packet.check_error() File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\protocol.py", line 220, in check_error err.raise_mysql_exception(self._data) File "C:\sources\Demo\Demo_api\env\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception raise errorclass(errno, errval) sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1193, "Unknown system variable 'tx_isolation'")

    opened by windson 2
  • AttributeError: module 'sqlalchemy.types' has no attribute 'Binary'

    AttributeError: module 'sqlalchemy.types' has no attribute 'Binary'

    With the latest update to SQLAlchemy (1.4.22), the class Binary has been removed and replaced withLargeBinary. This change needs to be made in __init__.py.

    Source: Official documentation

    opened by pathnames 1
  • AttributeError: 'result' object has no attribute 'id'

    AttributeError: 'result' object has no attribute 'id'

    When searching, no error is thrown if the search does not produce result, but when results are available, flask-whoshalchemy3 throws an AttributeError as shown below

    Traceback (most recent call last):
      File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
        response = self.full_dispatch_request()
      File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
        reraise(exc_type, exc_value, tb)
      File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
        raise value
      File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
        rv = self.dispatch_request()
      File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)
      File "/usr/local/Equimolar/EquimolarBlog/equimolar_blog/views.py", line 191, in search
        results = pub_article.search(q).paginate(1)
      File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 501, in paginate
        total = self.order_by(None).count()
      File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3776, in count
        return self.from_self(col).scalar()
      File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3496, in scalar
        ret = self.one()
      File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3463, in one
        ret = self.one_or_none()
      File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3432, in one_or_none
        ret = list(self)
      File "/usr/local/Equimolar/eq_env/lib/python3.8/site-packages/flask_whooshalchemy/__init__.py", line 70, in __iter__
        str_pk = str(getattr(row, self._pk))
    AttributeError: 'result' object has no attribute 'id'
    
    opened by EwetoyeIbrahim 1
  • Flask' object has no attribute 'search_indexes'

    Flask' object has no attribute 'search_indexes'

    When I am trying to create new index, using flask_whooshalchemy.create_index(app, Store), it throws Flask' object has no attribute 'search_indexes'.

    I used this function to create indexes because my hunch is that it replaces old flask_whooshalchemy.whoosh_index(app, Store) function.

    Though ReadMe file does not ask me to add flask_whooshalchemy.create_index(app, Store) at the end of the model I want to index, but if I don't do that, it throws me an error when I try to query using MyModel.query.search(query_string)

    opened by inboxdarpan 1
  • Issues with required version of SQLALchemy on Python 3.8+

    Issues with required version of SQLALchemy on Python 3.8+

    opened by TheMeanCanEHdian 1
  • Update SQLAlchemy version in requirements.txt to 1.3.12

    Update SQLAlchemy version in requirements.txt to 1.3.12

    As addressed in the issues I opened #3 and #5 the requirement.txt SQLAlchemy version of 1.1.3 has some vulnerabilities and is incompatible with Python 3.8+.

    Upgrading SQLALchemy to 1.3.12 after installing Flask-WhooshAlchemy3 looks to have broken nothing. Indexes are created and search functionality continues to work.

    Let me know if there is anything else you'd like to me do in order to get this approved.

    opened by TheMeanCanEHdian 0
  • feat: Correct Pagination Bug

    feat: Correct Pagination Bug

    Corrected Pagination BUG

    Error when using .paginate() function

    File "..\flask_whooshalchemy_init_.py", line 70, in iter str_pk = str(getattr(row, self._pk)) AttributeError: 'result' object has no attribute 'id'

    opened by Eliasmgprado 1
  • BaseQuery object has no attribute 'search'

    BaseQuery object has no attribute 'search'

    I followed the sample code in the readme but i end up with this error....no attribute search.

    Is there more to be added to the sample code before i can make a search query ?

    opened by komus-Israel 2
Owner
Blake VandeMerwe
Blake VandeMerwe
High level Python client for Elasticsearch

Elasticsearch DSL Elasticsearch DSL is a high-level library whose aim is to help with writing and running queries against Elasticsearch. It is built o

elastic 3.6k Dec 30, 2022
Pysolr — Python Solr client

pysolr pysolr is a lightweight Python client for Apache Solr. It provides an interface that queries the server and returns results based on the query.

Haystack Search 626 Dec 1, 2022
Senginta is All in one Search Engine Scrapper for used by API or Python Module. It's Free!

Senginta is All in one Search Engine Scrapper. With traditional scrapping, Senginta can be powerful to get result from any Search Engine, and convert to Json. Now support only for Google Product Search Engine (GShop, GVideo and many too) and Baidu Search Engine.

null 33 Nov 21, 2022
esguard provides a Python decorator that waits for processing while monitoring the load of Elasticsearch.

esguard esguard provides a Python decorator that waits for processing while monitoring the load of Elasticsearch. Quick Start You need to launch elast

po3rin 5 Dec 8, 2021
A real-time tech course finder, created using Elasticsearch, Python, React+Redux, Docker, and Kubernetes.

A real-time tech course finder, created using Elasticsearch, Python, React+Redux, Docker, and Kubernetes.

Dinesh Sonachalam 130 Dec 20, 2022
a Telegram bot writen in Python for searching files in Drive. Based on SearchX-bot

Drive Search Bot This is a Telegram bot writen in Python for searching files in Drive. Based on SearchX-bot How to deploy? Clone this repo: git clone

Hafitz Setya 25 Dec 9, 2022
Simple algorithm search engine like google in python using function

Mini-Search-Engine-Like-Google I have created the simple algorithm search engine like google in python using function. I am matching every word with w

Sachin Vinayak Dabhade 5 Sep 24, 2021
User-friendly, tiny source code searcher written by pure Python.

User-friendly, tiny source code searcher written in pure Python. Example Usages Cat is equivalent in the regular expression as '^Cat$' bor class Cat

Furkan Onder 106 Nov 2, 2022
Eland is a Python Elasticsearch client for exploring and analyzing data in Elasticsearch with a familiar Pandas-compatible API.

Python Client and Toolkit for DataFrames, Big Data, Machine Learning and ETL in Elasticsearch

elastic 463 Dec 30, 2022
This is a Telegram Bot written in Python for searching data on Google Drive.

This is a Telegram Bot written in Python for searching data on Google Drive. Supports multiple Shared Drives (TDs). Manual Guide for deploying the bot

Levi 158 Dec 27, 2022
Pythonic Lucene - A simplified python impelementaiton of Apache Lucene

A simplified python impelementaiton of Apache Lucene, mabye helps to understand how an enterprise search engine really works.

Mahdi Sadeghzadeh Ghamsary 2 Sep 12, 2022
A Python web searcher library with different search engines

Robert A simple Python web searcher library with different search engines. Install pip install roberthelper Usage from robert import GoogleSearcher

null 1 Dec 23, 2021
A fast, efficiency python package for searching and getting search results with many different search engines

search A fast, efficiency python package for searching and getting search results with many different search engines. Installation To install the pack

Neurs 0 Oct 6, 2022
Frets on Fire X: a fork of Frets on Fire with many added features and capabilities

Frets on Fire X - FoFiX This is Frets on Fire X, a highly customizable rhythm game supporting many modes of guitar, bass, drum, and vocal gameplay for

FoFiX 377 Jan 2, 2023
PEP-484 typing stubs for SQLAlchemy 1.4 and SQLAlchemy 2.0

SQLAlchemy 2 Stubs These are PEP-484 typing stubs for SQLAlchemy 1.4 and 2.0. They are released concurrently along with a Mypy extension which is desi

SQLAlchemy 139 Dec 30, 2022
Sqlalchemy-databricks - SQLAlchemy dialect for Databricks

sqlalchemy-databricks A SQLAlchemy Dialect for Databricks using the officially s

Flynn 19 Nov 3, 2022
Flask-Potion is a RESTful API framework for Flask and SQLAlchemy, Peewee or MongoEngine

Flask-Potion Description Flask-Potion is a powerful Flask extension for building RESTful JSON APIs. Potion features include validation, model resource

DTU Biosustain 491 Dec 8, 2022
Flask-Potion is a RESTful API framework for Flask and SQLAlchemy, Peewee or MongoEngine

Flask-Potion Description Flask-Potion is a powerful Flask extension for building RESTful JSON APIs. Potion features include validation, model resource

DTU Biosustain 484 Feb 3, 2021
A Discord Token Spammer, multi webhooks compatibility, made in python +3.7. By Ezermoz

DiscordWebhookSpammer A Discord Token Spammer, multi webhooks compatibility, made in python +3.7. By Ezermoz Put you webhook in webhooks.txt if you wa

null 3 Nov 24, 2021
Python Implementation of Scalable In-Memory Updatable Bitmap Indexing

PyUpBit CS490 Large Scale Data Analytics — Implementation of Updatable Compressed Bitmap Indexing Paper Table of Contents About The Project Usage Cont

Hyeong Kyun (Daniel) Park 1 Jun 28, 2022