Мне нравится API CherryPy для сессий, за исключением одной детали. Вместо того, чтобы говорить cherrypy.session["spam"]
, я бы хотел просто сказать session["spam"]
.
К сожалению, я не могу просто иметь глобальный from cherrypy import session
в одном из моих модулей, потому что объект cherrypy.session
не создается до первого запроса страницы. Есть ли какой-нибудь способ заставить CherryPy немедленно инициализировать свой объект сеанса вместо запроса первой страницы?
У меня есть две уродливые альтернативы, если ответ - нет:
Во-первых, я могу сделать что-то вроде этого
def import_session():
global session
while not hasattr(cherrypy, "session"):
sleep(0.1)
session = cherrypy.session
Thread(target=import_session).start()
Это похоже на большой клудж, но я действительно ненавижу писать cherrypy.session["spam"]
каждый раз, так что для меня это того стоит.
Мое второе решение - сделать что-то вроде
class SessionKludge:
def __getitem__(self, name):
return cherrypy.session[name]
def __setitem__(self, name, val):
cherrypy.session[name] = val
session = SessionKludge()
но это похоже на еще больший kludge, и мне нужно было бы проделать больше работы для реализации других функций словаря, таких как .get
Так что я бы определенно предпочел простой способ инициализации объекта самостоятельно. Кто-нибудь знает, как это сделать?