Для начала вы можете взглянуть на
https://github.com/3kwa/cherrys
как этот парень пишет свой собственный сессионный класс и переписывает некоторые методы. Он делает это для Redis не MySQL. Вы бы написали методы для MySQL. Очень похожий класс уже существует в cherrypy в "cherrpy / lib / sessions.py":
class PostgresqlSession(Session)
что очень похоже на то, что вы хотите. Я бы сказал, возьмите подход к реализации из «3kwa», но вместо его класса RedisSession скопируйте класс PostgresqlSession из «cherrpy / lib / sessions.py» и измените его так, чтобы он соответствовал правильному синтаксису MySQL.
Возможный путь может быть:
Загрузите ссылку "cherrys.py" сверху и переименуйте в "mysqlsession.py". Переписать «RedisSessions (Session)» с помощью «PostgresqlSession (Session)» из «cherrpy / lib / sessions.py» и переименовать в «MySQLSession (Session)». Обязательно добавьте
locks = {}
def acquire_lock(self):
"""Acquire an exclusive lock on the currently-loaded session data."""
self.locked = True
self.locks.setdefault(self.id, threading.RLock()).acquire()
def release_lock(self):
"""Release the lock on the currently-loaded session data."""
self.locks[self.id].release()
self.locked = False
к вашему новому классу "MySQLSession" (как это делается в RedisSession (Session). Измените синтаксис PostgreSQL, чтобы он соответствовал синтаксису MySQL (что не должно быть сложно). Поместите куда-нибудь "mysqlsession.py" ниже директории вашего проекта и импортируйте в приложение с помощью
import mysqlsession
и используйте
cherrypy.lib.sessions.MySQLSession = mysqlsession.MySQLSession
в инициализации вашего приложения. В конфиге
tools.sessions.storage_type : 'mysql'
и параметры (например, хост, порт и т. Д.), Как если бы вы использовали класс "PostgreSQL".
Я могу ошибаться все время. Но так я бы попытался это решить.