本文整理汇总了Python中cms.db.Session.close方法的典型用法代码示例。如果您正苦于以下问题:Python Session.close方法的具体用法?Python Session.close怎么用?Python Session.close使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类cms.db.Session
的用法示例。
在下文中一共展示了Session.close方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: CommonRequestHandler
# 需要导入模块: from cms.db import Session [as 别名]
# 或者: from cms.db.Session import close [as 别名]
class CommonRequestHandler(RequestHandler):
"""Encapsulates shared RequestHandler functionality.
"""
# Whether the login cookie duration has to be refreshed when
# this handler is called. Useful to filter asynchronous
# requests.
refresh_cookie = True
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.timestamp = make_datetime()
self.sql_session = Session()
self.r_params = None
self.contest = None
self.url = None
def prepare(self):
"""This method is executed at the beginning of each request.
"""
super().prepare()
self.url = Url(get_url_root(self.request.path))
self.set_header("Cache-Control", "no-cache, must-revalidate")
def finish(self, *args, **kwargs):
"""Finish this response, ending the HTTP request.
We override this method in order to properly close the database.
TODO - Now that we have greenlet support, this method could be
refactored in terms of context manager or something like
that. So far I'm leaving it to minimize changes.
"""
if self.sql_session is not None:
try:
self.sql_session.close()
except Exception as error:
logger.warning("Couldn't close SQL connection: %r", error)
try:
super().finish(*args, **kwargs)
except OSError:
# When the client closes the connection before we reply,
# Tornado raises an OSError exception, that would pollute
# our log with unnecessarily critical messages
logger.debug("Connection closed before our reply.")
@property
def service(self):
return self.application.service
示例2: BaseHandler
# 需要导入模块: from cms.db import Session [as 别名]
# 或者: from cms.db.Session import close [as 别名]
class BaseHandler(CommonRequestHandler):
"""Base RequestHandler for this application.
All the RequestHandler classes in this application should be a
child of this class.
"""
def try_commit(self):
"""Try to commit the current session.
If not successful display a warning in the webpage.
return (bool): True if commit was successful, False otherwise.
"""
try:
self.sql_session.commit()
except IntegrityError as error:
self.application.service.add_notification(
make_datetime(),
"Operation failed.", "%s" % error)
return False
else:
self.application.service.add_notification(
make_datetime(),
"Operation successful.", "")
return True
def safe_get_item(self, cls, ident, session=None):
"""Get item from database of class cls and id ident, using
session if given, or self.sql_session if not given. If id is
not found, raise a 404.
cls (type): class of object to retrieve.
ident (string): id of object.
session (Session|None): session to use.
return (object): the object with the given id.
raise (HTTPError): 404 if not found.
"""
if session is None:
session = self.sql_session
entity = cls.get_from_id(ident, session)
if entity is None:
raise tornado.web.HTTPError(404)
return entity
def prepare(self):
"""This method is executed at the beginning of each request.
"""
# Attempt to update the contest and all its references
# If this fails, the request terminates.
self.set_header("Cache-Control", "no-cache, must-revalidate")
self.sql_session = Session()
self.sql_session.expire_all()
self.contest = None
def render_params(self):
"""Return the default render params used by almost all handlers.
return (dict): default render params
"""
params = {}
params["timestamp"] = make_datetime()
params["contest"] = self.contest
params["url_root"] = get_url_root(self.request.path)
if self.contest is not None:
params["phase"] = self.contest.phase(params["timestamp"])
# Keep "== None" in filter arguments. SQLAlchemy does not
# understand "is None".
params["unanswered"] = self.sql_session.query(Question)\
.join(Participation)\
.filter(Participation.contest_id == self.contest.id)\
.filter(Question.reply_timestamp == None)\
.filter(Question.ignored == False)\
.count() # noqa
# TODO: not all pages require all these data.
params["contest_list"] = self.sql_session.query(Contest).all()
params["task_list"] = self.sql_session.query(Task).all()
params["user_list"] = self.sql_session.query(User).all()
return params
def finish(self, *args, **kwds):
"""Finish this response, ending the HTTP request.
We override this method in order to properly close the database.
TODO - Now that we have greenlet support, this method could be
refactored in terms of context manager or something like
that. So far I'm leaving it to minimize changes.
"""
self.sql_session.close()
try:
#.........这里部分代码省略.........
示例3: BaseHandler
# 需要导入模块: from cms.db import Session [as 别名]
# 或者: from cms.db.Session import close [as 别名]
#.........这里部分代码省略.........
return (dict): default render params
"""
ret = {}
ret["timestamp"] = self.timestamp
ret["contest"] = self.contest
ret["url_root"] = get_url_root(self.request.path)
ret["phase"] = self.contest.phase(self.timestamp)
ret["printing_enabled"] = (config.printer is not None)
if self.current_user is not None:
participation = self.current_user
res = compute_actual_phase(
self.timestamp, self.contest.start, self.contest.stop,
self.contest.per_user_time, participation.starting_time,
participation.delay_time, participation.extra_time)
ret["actual_phase"], ret["current_phase_begin"], \
ret["current_phase_end"], ret["valid_phase_begin"], \
ret["valid_phase_end"] = res
if ret["actual_phase"] == 0:
ret["phase"] = 0
# set the timezone used to format timestamps
ret["timezone"] = get_timezone(participation.user, self.contest)
# some information about token configuration
ret["tokens_contest"] = self._get_token_status(self.contest)
t_tokens = sum(self._get_token_status(t) for t in self.contest.tasks)
if t_tokens == 0:
ret["tokens_tasks"] = 0 # all disabled
elif t_tokens == 2 * len(self.contest.tasks):
ret["tokens_tasks"] = 2 # all infinite
else:
ret["tokens_tasks"] = 1 # all finite or mixed
# TODO Now all language names are shown in the active language.
# It would be better to show them in the corresponding one.
ret["lang_names"] = {}
for lang_code, trans in self.langs.iteritems():
language_name = None
try:
language_name = translate_language_country_code(
lang_code, trans)
except ValueError:
language_name = translate_language_code(
lang_code, trans)
ret["lang_names"][lang_code.replace("_", "-")] = language_name
ret["cookie_lang"] = self.cookie_lang
ret["browser_lang"] = self.browser_lang
return ret
def finish(self, *args, **kwds):
"""Finish this response, ending the HTTP request.
We override this method in order to properly close the database.
TODO - Now that we have greenlet support, this method could be
refactored in terms of context manager or something like
that. So far I'm leaving it to minimize changes.
"""
if hasattr(self, "sql_session"):
try:
self.sql_session.close()
except Exception as error:
logger.warning("Couldn't close SQL connection: %r", error)
try:
tornado.web.RequestHandler.finish(self, *args, **kwds)
except IOError:
# When the client closes the connection before we reply,
# Tornado raises an IOError exception, that would pollute
# our log with unnecessarily critical messages
logger.debug("Connection closed before our reply.")
def write_error(self, status_code, **kwargs):
if "exc_info" in kwargs and \
kwargs["exc_info"][0] != tornado.web.HTTPError:
exc_info = kwargs["exc_info"]
logger.error(
"Uncaught exception (%r) while processing a request: %s",
exc_info[1], ''.join(traceback.format_exception(*exc_info)))
# We assume that if r_params is defined then we have at least
# the data we need to display a basic template with the error
# information. If r_params is not defined (i.e. something went
# *really* bad) we simply return a basic textual error notice.
if hasattr(self, 'r_params'):
self.render("error.html", status_code=status_code, **self.r_params)
else:
self.write("A critical error has occurred :-(")
self.finish()