本文整理汇总了Python中tornado.httpserver.HTTPServer.close_all_connections方法的典型用法代码示例。如果您正苦于以下问题:Python HTTPServer.close_all_connections方法的具体用法?Python HTTPServer.close_all_connections怎么用?Python HTTPServer.close_all_connections使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类tornado.httpserver.HTTPServer
的用法示例。
在下文中一共展示了HTTPServer.close_all_connections方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: UIServer
# 需要导入模块: from tornado.httpserver import HTTPServer [as 别名]
# 或者: from tornado.httpserver.HTTPServer import close_all_connections [as 别名]
class UIServer(object):
def __init__(self, project, prepare_stage, event_handler, io_loop):
assert event_handler is not None
assert io_loop is not None
self._application = UIApplication(project, prepare_stage, event_handler, io_loop)
self._http = HTTPServer(self._application, io_loop=io_loop)
# these would throw OSError on failure
sockets = bind_sockets(port=None, address='127.0.0.1')
self._port = None
for s in sockets:
# we have to find the ipv4 one
if s.family == socket.AF_INET:
self._port = s.getsockname()[1]
assert self._port is not None
self._http.add_sockets(sockets)
self._http.start(1)
@property
def port(self):
return self._port
@property
def url(self):
return "http://localhost:%d/" % self.port
def unlisten(self):
"""Permanently close down the HTTP server, no longer listen on any sockets."""
self._http.close_all_connections()
self._http.stop()
示例2: FakeAnacondaServer
# 需要导入模块: from tornado.httpserver import HTTPServer [as 别名]
# 或者: from tornado.httpserver.HTTPServer import close_all_connections [as 别名]
class FakeAnacondaServer(object):
def __init__(self, io_loop, fail_these, expected_basename):
assert io_loop is not None
self.fail_these = fail_these
self.expected_basename = expected_basename
self._application = FakeAnacondaApplication(server=self, io_loop=io_loop)
self._http = HTTPServer(self._application, io_loop=io_loop)
# these would throw OSError on failure
sockets = bind_sockets(port=None, address='127.0.0.1')
self._port = None
for s in sockets:
# we have to find the ipv4 one
if s.family == socket.AF_INET:
self._port = s.getsockname()[1]
assert self._port is not None
self._http.add_sockets(sockets)
self._http.start(1)
@property
def port(self):
return self._port
@property
def url(self):
return "http://localhost:%d/" % self.port
def unlisten(self):
"""Permanently close down the HTTP server, no longer listen on any sockets."""
self._http.close_all_connections()
self._http.stop()
示例3: TestAgentSubscription
# 需要导入模块: from tornado.httpserver import HTTPServer [as 别名]
# 或者: from tornado.httpserver.HTTPServer import close_all_connections [as 别名]
class TestAgentSubscription(tornado.web.Application, Singleton):
pool_executor_cls = ThreadPoolExecutor
max_workers = 1
started = False
def __init__(self):
Singleton.__init__(self)
self.options = default_options
def configure(self, options, **kwargs):
Singleton.configure(self)
options = options if options else self.options
self.ssl = None
if options.subscription_server_cert and options.subscription_server_key:
self.ssl = dict(
certfile=abs_path(options.subscription_server_cert),
keyfile=abs_path(options.subscription_server_key)
)
if options.subscription_client_ca:
self.ssl["ca_certs"] = abs_path(options.subscription_client_ca)
self.ssl["cert_reqs"] = CERT_REQUIRED
tornado.web.Application.__init__(self, debug=options.debug, handlers=handlers, ssl_options=self.ssl)
self.started = False
self.options = options
atexit.register(self.stop)
self.http_server = HTTPServer(self, ssl_options=self.ssl)
@Singleton._if_configured(SubscriptionServiceException)
def start(self):
self.pool = self.pool_executor_cls(max_workers=self.max_workers)
self.listen(
self.options.subscription_port,
address=self.options.subscription_address,
ssl_options=self.ssl,
xheaders=True
)
logger.info("Subscription APIs available at http%s://%s:%s" % ('s' if self.ssl else '', self.options.subscription_address, self.options.subscription_port))
self.started = True
@Singleton._if_configured(SubscriptionServiceException)
def listen(self, port, address="", **kwargs):
self.http_server.listen(port, address)
@Singleton._if_configured(SubscriptionServiceException)
def stop(self):
if self.started:
self.http_server.close_all_connections()
self.http_server.stop()
self.pool.shutdown(wait=False)
self.started = False
@Singleton._if_configured(SubscriptionServiceException)
def delay(self, method, *args, **kwargs):
return self.pool.submit(partial(method, *args, **kwargs))
示例4: _TestServer
# 需要导入模块: from tornado.httpserver import HTTPServer [as 别名]
# 或者: from tornado.httpserver.HTTPServer import close_all_connections [as 别名]
class _TestServer(object):
def __init__(self):
self._application = _TestServerApplication()
self._http = HTTPServer(self._application)
# these would throw OSError on failure
sockets = bind_sockets(port=None, address='127.0.0.1')
self._port = None
for s in sockets:
# we have to find the ipv4 one
if s.family == socket.AF_INET:
self._port = s.getsockname()[1]
assert self._port is not None
self._http.add_sockets(sockets)
@property
def port(self):
return self._port
@property
def url(self):
return "http://localhost:%d/" % self.port
def start(self):
self._http.start(1)
def unlisten(self):
self._http.close_all_connections()
self._http.stop()
@property
def error_url(self):
return self.url + "error"
def new_download_url(self, download_length, hash_algorithm):
url = (self.url + "download?id=" + str(uuid.uuid4()) + "&length=" + str(download_length))
if hash_algorithm:
url += "&hash_algorithm=" + hash_algorithm
return url
def server_computed_hash_for_downloaded_url(self, download_url):
i = download_url.index("id=")
download_id = download_url[(i + 3):][:36]
if download_id not in self._application.hashes:
raise RuntimeError("It looks like the download from %s did not complete" % download_url)
return self._application.hashes[download_id]
示例5: Server
# 需要导入模块: from tornado.httpserver import HTTPServer [as 别名]
# 或者: from tornado.httpserver.HTTPServer import close_all_connections [as 别名]
#.........这里部分代码省略.........
'''
assert not self._started, "Already started"
self._started = True
self._tornado.start()
def stop(self, wait=True):
''' Stop the Bokeh Server.
Args:
fast (boolean): whether to wait for orderly cleanup (default: True)
Returns:
None
'''
assert not self._stopped, "Already stopped"
self._stopped = True
self._tornado.stop(wait)
self._http.stop()
def run_until_shutdown(self):
''' Run the Bokeh Server until shutdown is requested by the user,
either via a Keyboard interrupt (Ctrl-C) or SIGTERM.
'''
if not self._started:
self.start()
# Install shutdown hooks
atexit.register(self._atexit)
signal.signal(signal.SIGTERM, self._sigterm)
try:
self._loop.start()
except KeyboardInterrupt:
print("\nInterrupted, shutting down")
self.stop()
_atexit_ran = False
def _atexit(self):
if self._atexit_ran:
return
self._atexit_ran = True
log.debug("Shutdown: cleaning up")
if not self._stopped:
self.stop(wait=False)
def _sigterm(self, signum, frame):
print("Received signal %d, shutting down" % (signum,))
# Tell self._loop.start() to return.
self._loop.add_callback_from_signal(self._loop.stop)
def unlisten(self):
'''Stop listening on ports (Server will no longer be usable after calling this)
Returns:
None
'''
self._http.close_all_connections()
self._http.stop()
def get_session(self, app_path, session_id):
'''Gets a session by name (session must already exist)'''
return self._tornado.get_session(app_path, session_id)
def get_sessions(self, app_path=None):
'''Gets all live sessions for an application.'''
if app_path is not None:
return self._tornado.get_sessions(app_path)
all_sessions = []
for path in self._tornado.app_paths:
all_sessions += self._tornado.get_sessions(path)
return all_sessions
def show(self, app_path, browser=None, new='tab'):
''' Opens an app in a browser window or tab.
Useful for testing server applications on your local desktop but
should not call when running bokeh-server on an actual server.
Args:
app_path (str) : the app path to open
The part of the URL after the hostname:port, with leading slash.
browser (str, optional) : browser to show with (default: None)
For systems that support it, the **browser** argument allows
specifying which browser to display in, e.g. "safari", "firefox",
"opera", "windows-default" (see the ``webbrowser`` module
documentation in the standard lib for more details).
new (str, optional) : window or tab (default: "tab")
If ``new`` is 'tab', then opens a new tab.
If ``new`` is 'window', then opens a new window.
Returns:
None
'''
if not app_path.startswith("/"):
raise ValueError("app_path must start with a /")
from bokeh.util.browser import view
url = "http://localhost:%d%s%s" % (self.port, self.prefix, app_path)
view(url, browser=browser, new=new)
示例6: runCouchPotato
# 需要导入模块: from tornado.httpserver import HTTPServer [as 别名]
# 或者: from tornado.httpserver.HTTPServer import close_all_connections [as 别名]
#.........这里部分代码省略.........
(r"%s(.*)(/?)" % web_base, WebHandler),
(r"(.*)", WebHandler),
],
)
# Static paths
static_path = "%sstatic/" % web_base
for dir_name in ["fonts", "images", "scripts", "style"]:
application.add_handlers(
".*$",
[
(
"%s%s/(.*)" % (static_path, dir_name),
StaticFileHandler,
{"path": sp(os.path.join(base_path, "couchpotato", "static", dir_name))},
)
],
)
Env.set("static_path", static_path)
# Load configs & plugins
loader = Env.get("loader")
loader.preload(root=sp(base_path))
loader.run()
# Fill database with needed stuff
fireEvent("database.setup")
if not db_exists:
fireEvent("app.initialize", in_order=True)
fireEvent("app.migrate")
# Go go go!
from tornado.ioloop import IOLoop
from tornado.autoreload import add_reload_hook
loop = IOLoop.current()
# Reload hook
def reload_hook():
fireEvent("app.shutdown")
add_reload_hook(reload_hook)
# Some logging and fire load event
try:
log.info("Starting server on port %(port)s", config)
except:
pass
fireEventAsync("app.load")
ssl_options = None
if config["ssl_cert"] and config["ssl_key"]:
ssl_options = {"certfile": config["ssl_cert"], "keyfile": config["ssl_key"]}
server = HTTPServer(application, no_keep_alive=True, ssl_options=ssl_options)
try_restart = True
restart_tries = 5
while try_restart:
try:
if config["host"].startswith("unix:"):
server.add_socket(bind_unix_socket(config["host"][5:]))
else:
server.listen(config["port"], config["host"])
if Env.setting("ipv6", default=False):
try:
server.listen(config["port"], config["host6"])
except:
log.info2("Tried to bind to IPV6 but failed")
loop.start()
server.close_all_connections()
server.stop()
loop.close(all_fds=True)
except Exception as e:
log.error("Failed starting: %s", traceback.format_exc())
try:
nr, msg = e
if nr == 48:
log.info(
"Port (%s) needed for CouchPotato is already in use, try %s more time after few seconds",
(config.get("port"), restart_tries),
)
time.sleep(1)
restart_tries -= 1
if restart_tries > 0:
continue
else:
return
except ValueError:
return
except:
pass
raise
try_restart = False
示例7: runCouchPotato
# 需要导入模块: from tornado.httpserver import HTTPServer [as 别名]
# 或者: from tornado.httpserver.HTTPServer import close_all_connections [as 别名]
#.........这里部分代码省略.........
# Request handlers
application.add_handlers(".*$", [
(r'%snonblock/(.*)(/?)' % api_base, NonBlockHandler),
# API handlers
(r'%s(.*)(/?)' % api_base, ApiHandler), # Main API handler
(r'%sgetkey(/?)' % web_base, KeyHandler), # Get API key
(r'%s' % api_base, RedirectHandler, {"url": web_base + 'docs/'}), # API docs
# Login handlers
(r'%slogin(/?)' % web_base, LoginHandler),
(r'%slogout(/?)' % web_base, LogoutHandler),
# Catch all webhandlers
(r'%s(.*)(/?)' % web_base, WebHandler),
(r'(.*)', WebHandler),
])
# Static paths
static_path = '%sstatic/' % web_base
for dir_name in ['fonts', 'images', 'scripts', 'style']:
application.add_handlers(".*$", [
('%s%s/(.*)' % (static_path, dir_name), StaticFileHandler, {'path': sp(os.path.join(base_path, 'couchpotato', 'static', dir_name))})
])
Env.set('static_path', static_path)
# Load configs & plugins
loader = Env.get('loader')
loader.preload(root = sp(base_path))
loader.run()
# Fill database with needed stuff
fireEvent('database.setup')
if not db_exists:
fireEvent('app.initialize', in_order = True)
fireEvent('app.migrate')
# Go go go!
from tornado.ioloop import IOLoop
from tornado.autoreload import add_reload_hook
loop = IOLoop.current()
# Reload hook
def reload_hook():
fireEvent('app.shutdown')
add_reload_hook(reload_hook)
# Some logging and fire load event
try: log.info('Starting server on port %(port)s', config)
except: pass
fireEventAsync('app.load')
ssl_options = None
if config['ssl_cert'] and config['ssl_key']:
ssl_options = {
'certfile': config['ssl_cert'],
'keyfile': config['ssl_key'],
}
server = HTTPServer(application, no_keep_alive = True, ssl_options = ssl_options)
try_restart = True
restart_tries = 5
while try_restart:
try:
if config['host'].startswith('unix:'):
server.add_socket(bind_unix_socket(config['host'][5:]))
else:
server.listen(config['port'], config['host'])
if Env.setting('ipv6', default = False):
try: server.listen(config['port'], config['host6'])
except: log.info2('Tried to bind to IPV6 but failed')
loop.start()
server.close_all_connections()
server.stop()
loop.close(all_fds = True)
except Exception as e:
log.error('Failed starting: %s', traceback.format_exc())
try:
nr, msg = e
if nr == 48:
log.info('Port (%s) needed for CouchPotato is already in use, try %s more time after few seconds', (config.get('port'), restart_tries))
time.sleep(1)
restart_tries -= 1
if restart_tries > 0:
continue
else:
return
except ValueError:
return
except:
pass
raise
try_restart = False
示例8: Server
# 需要导入模块: from tornado.httpserver import HTTPServer [as 别名]
# 或者: from tornado.httpserver.HTTPServer import close_all_connections [as 别名]
#.........这里部分代码省略.........
self._http.start(1)
except OSError as e:
import errno
if e.errno == errno.EADDRINUSE:
log.critical("Cannot start Bokeh server, port %s is already in use", self._port)
elif e.errno == errno.EADDRNOTAVAIL:
log.critical("Cannot start Bokeh server, address '%s' not available", self._address)
else:
codename = errno.errorcode[e.errno]
log.critical("Cannot start Bokeh server, %s %r", codename, e)
sys.exit(1)
@property
def port(self):
return self._port
@property
def address(self):
return self._address
@property
def prefix(self):
return self._prefix
@property
def io_loop(self):
return self._tornado.io_loop
def start(self, start_loop=True):
''' Start the Bokeh Server's IO loop and background tasks.
Args:
start_loop (boolean, optional): whether to start the IO loop after
starting background tasks (default: True).
Returns:
None
Notes:
Keyboard interrupts or sigterm will cause the server to shut down.
'''
self._tornado.start(start_loop=start_loop)
def stop(self):
''' Stop the Bokeh Server's IO loop.
Returns:
None
'''
self._tornado.stop()
def unlisten(self):
'''Stop listening on ports (Server will no longer be usable after calling this)
Returns:
None
'''
self._http.close_all_connections()
self._http.stop()
def get_session(self, app_path, session_id):
'''Gets a session by name (session must already exist)'''
return self._tornado.get_session(app_path, session_id)
def get_sessions(self, app_path):
'''Gets all live sessions for an application.'''
return self._tornado.get_sessions(app_path)
def show(self, app_path, browser=None, new='tab'):
''' Opens an app in a browser window or tab.
Useful for testing server applications on your local desktop but
should not call when running bokeh-server on an actual server.
Args:
app_path (str) : the app path to open
The part of the URL after the hostname:port, with leading slash.
browser (str, optional) : browser to show with (default: None)
For systems that support it, the **browser** argument allows
specifying which browser to display in, e.g. "safari", "firefox",
"opera", "windows-default" (see the ``webbrowser`` module
documentation in the standard lib for more details).
new (str, optional) : window or tab (default: "tab")
If ``new`` is 'tab', then opens a new tab.
If ``new`` is 'window', then opens a new window.
Returns:
None
'''
if not app_path.startswith("/"):
raise ValueError("app_path must start with a /")
from bokeh.util.browser import view
url = "http://localhost:%d%s%s" % (self.port, self.prefix, app_path)
view(url, browser=browser, new=new)
示例9: HTTPD
# 需要导入模块: from tornado.httpserver import HTTPServer [as 别名]
# 或者: from tornado.httpserver.HTTPServer import close_all_connections [as 别名]
class HTTPD(object): # noqa
"""
HTTP Server implementation that attaches to an event loop and socket, and
is capable of handling mesos wire protocol messages.
"""
def __init__(self, sock, loop):
"""
Construct an HTTP server on a socket given an ioloop.
"""
self.loop = loop
self.sock = sock
self.app = Application(handlers=[(r'/.*$', Blackhole)])
self.server = HTTPServer(self.app, io_loop=self.loop)
self.server.add_sockets([sock])
self.sock.listen(1024)
def terminate(self):
log.info('Terminating HTTP server and all connections')
self.server.close_all_connections()
self.sock.close()
def mount_process(self, process):
"""
Mount a Process onto the http server to receive message callbacks.
"""
for route_path in process.route_paths:
route = '/%s%s' % (process.pid.id, route_path)
log.info('Mounting route %s' % route)
self.app.add_handlers('.*$', [(
re.escape(route),
RoutedRequestHandler,
dict(process=process, path=route_path)
)])
for message_name in process.message_names:
route = '/%s/%s' % (process.pid.id, message_name)
log.info('Mounting message handler %s' % route)
self.app.add_handlers('.*$', [(
re.escape(route),
WireProtocolMessageHandler,
dict(process=process, name=message_name)
)])
def unmount_process(self, process):
"""
Unmount a process from the http server to stop receiving message
callbacks.
"""
# There is no remove_handlers, but .handlers is public so why not. server.handlers is a list of
# 2-tuples of the form (host_pattern, [list of RequestHandler]) objects. We filter out all
# handlers matching our process from the RequestHandler list for each host pattern.
def nonmatching(handler):
return 'process' not in handler.kwargs or handler.kwargs['process'] != process
def filter_handlers(handlers):
host_pattern, handlers = handlers
return (host_pattern, list(filter(nonmatching, handlers)))
self.app.handlers = [filter_handlers(handlers) for handlers in self.app.handlers]
示例10: WebServer
# 需要导入模块: from tornado.httpserver import HTTPServer [as 别名]
# 或者: from tornado.httpserver.HTTPServer import close_all_connections [as 别名]
#.........这里部分代码省略.........
self.app = Application(
debug=True,
autoreload=False,
gzip=sickrage.app.config.web_use_gzip,
cookie_secret=sickrage.app.config.web_cookie_secret,
login_url='%s/login/' % sickrage.app.config.web_root)
# Websocket handler
self.app.add_handlers(".*$", [
(r'%s/ws/ui' % sickrage.app.config.web_root, WebSocketUIHandler)
])
# Static File Handlers
self.app.add_handlers('.*$', [
# api
(r'%s/api/(\w{32})(/?.*)' % sickrage.app.config.web_root, ApiHandler),
# redirect to home
(r"(%s)" % sickrage.app.config.web_root, RedirectHandler,
{"url": "%s/home" % sickrage.app.config.web_root}),
# api builder
(r'%s/api/builder' % sickrage.app.config.web_root, RedirectHandler,
{"url": sickrage.app.config.web_root + '/apibuilder/'}),
# login
(r'%s/login(/?)' % sickrage.app.config.web_root, LoginHandler),
# logout
(r'%s/logout(/?)' % sickrage.app.config.web_root, LogoutHandler),
# calendar
(r'%s/calendar' % sickrage.app.config.web_root, CalendarHandler),
# favicon
(r'%s/(favicon\.ico)' % sickrage.app.config.web_root, StaticNoCacheFileHandler,
{"path": os.path.join(sickrage.app.config.gui_static_dir, 'images/favicon.ico')}),
# images
(r'%s/images/(.*)' % sickrage.app.config.web_root, StaticImageHandler,
{"path": os.path.join(sickrage.app.config.gui_static_dir, 'images')}),
# css
(r'%s/css/(.*)' % sickrage.app.config.web_root, StaticNoCacheFileHandler,
{"path": os.path.join(sickrage.app.config.gui_static_dir, 'css')}),
# scss
(r'%s/scss/(.*)' % sickrage.app.config.web_root, StaticNoCacheFileHandler,
{"path": os.path.join(sickrage.app.config.gui_static_dir, 'scss')}),
# fonts
(r'%s/fonts/(.*)' % sickrage.app.config.web_root, StaticNoCacheFileHandler,
{"path": os.path.join(sickrage.app.config.gui_static_dir, 'fonts')}),
# javascript
(r'%s/js/(.*)' % sickrage.app.config.web_root, StaticNoCacheFileHandler,
{"path": os.path.join(sickrage.app.config.gui_static_dir, 'js')}),
# videos
(r'%s/videos/(.*)' % sickrage.app.config.web_root, StaticNoCacheFileHandler,
{"path": self.video_root}),
])
# Web Handlers
self.app.add_handlers('.*$', Route.get_routes(sickrage.app.config.web_root))
# HTTPS Cert/Key object
ssl_ctx = None
if sickrage.app.config.enable_https:
ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_ctx.load_cert_chain(sickrage.app.config.https_cert, sickrage.app.config.https_key)
# Web Server
self.server = HTTPServer(self.app, ssl_options=ssl_ctx, xheaders=sickrage.app.config.handle_reverse_proxy)
try:
self.server.listen(sickrage.app.config.web_port)
sickrage.app.log.info(
"SiCKRAGE :: STARTED")
sickrage.app.log.info(
"SiCKRAGE :: VERSION:[{}]".format(sickrage.version()))
sickrage.app.log.info(
"SiCKRAGE :: CONFIG:[{}] [v{}]".format(sickrage.app.config_file, sickrage.app.config.config_version))
sickrage.app.log.info(
"SiCKRAGE :: DATABASE:[v{}]".format(sickrage.app.main_db.version))
sickrage.app.log.info(
"SiCKRAGE :: URL:[{}://{}:{}{}]".format(('http', 'https')[sickrage.app.config.enable_https],
sickrage.app.config.web_host, sickrage.app.config.web_port,
sickrage.app.config.web_root))
except socket.error as e:
sickrage.app.log.warning(e.strerror)
raise SystemExit
def shutdown(self):
if self.started:
self.started = False
if self.server:
self.server.close_all_connections()
self.server.stop()
示例11: WebServer
# 需要导入模块: from tornado.httpserver import HTTPServer [as 别名]
# 或者: from tornado.httpserver.HTTPServer import close_all_connections [as 别名]
#.........这里部分代码省略.........
[
# api
(r'%s(/?.*)' % self.api_root, ApiHandler),
# redirect to web root
(r"(?!%s)(.*)" % sickrage.app.config.web_root, RedirectHandler,
{"url": "%s/{0}" % sickrage.app.config.web_root}),
# api key
(r'%s/getkey(/?.*)' % sickrage.app.config.web_root, KeyHandler),
# api builder
(r'%s/api/builder' % sickrage.app.config.web_root, RedirectHandler,
{"url": sickrage.app.config.web_root + '/apibuilder/'}),
# login
(r'%s/login(/?)' % sickrage.app.config.web_root, LoginHandler),
# logout
(r'%s/logout(/?)' % sickrage.app.config.web_root, LogoutHandler),
# calendar
(r'%s/calendar' % sickrage.app.config.web_root, CalendarHandler),
# favicon
(r'%s/(favicon\.ico)' % sickrage.app.config.web_root, StaticFileHandler,
{"path": os.path.join(sickrage.app.config.gui_static_dir, 'images/favicon.ico')}),
# images
(r'%s/images/(.*)' % sickrage.app.config.web_root, StaticImageHandler,
{"path": os.path.join(sickrage.app.config.gui_static_dir, 'images')}),
# css
(r'%s/css/(.*)' % sickrage.app.config.web_root, StaticFileHandler,
{"path": os.path.join(sickrage.app.config.gui_static_dir, 'css')}),
# scss
(r'%s/scss/(.*)' % sickrage.app.config.web_root, StaticFileHandler,
{"path": os.path.join(sickrage.app.config.gui_static_dir, 'scss')}),
# fonts
(r'%s/fonts/(.*)' % sickrage.app.config.web_root, StaticFileHandler,
{"path": os.path.join(sickrage.app.config.gui_static_dir, 'fonts')}),
# javascript
(r'%s/js/(.*)' % sickrage.app.config.web_root, StaticFileHandler,
{"path": os.path.join(sickrage.app.config.gui_static_dir, 'js')}),
# videos
(r'%s/videos/(.*)' % sickrage.app.config.web_root, StaticFileHandler,
{"path": self.video_root}),
] + Route.get_routes(sickrage.app.config.web_root),
debug=True,
autoreload=False,
gzip=sickrage.app.config.web_use_gzip,
xheaders=sickrage.app.config.handle_reverse_proxy,
cookie_secret=sickrage.app.config.web_cookie_secret,
login_url='%s/login/' % sickrage.app.config.web_root)
self.server = HTTPServer(self.app, no_keep_alive=True)
if sickrage.app.config.enable_https: self.server.ssl_options = {
"certfile": sickrage.app.config.https_cert,
"keyfile": sickrage.app.config.https_key
}
try:
self.server.listen(sickrage.app.config.web_port, None)
sickrage.app.log.info(
"SiCKRAGE :: STARTED")
sickrage.app.log.info(
"SiCKRAGE :: VERSION:[{}]".format(sickrage.app.version_updater.version))
sickrage.app.log.info(
"SiCKRAGE :: CONFIG:[{}] [v{}]".format(sickrage.app.config_file, sickrage.app.config.config_version))
sickrage.app.log.info(
"SiCKRAGE :: URL:[{}://{}:{}/]".format(
('http', 'https')[sickrage.app.config.enable_https],
sickrage.app.config.web_host, sickrage.app.config.web_port))
# launch browser window
if all([not sickrage.app.no_launch, sickrage.app.config.launch_browser]):
threading.Thread(None,
lambda: launch_browser(
('http', 'https')[sickrage.app.config.enable_https],
sickrage.app.config.web_host,
sickrage.app.config.web_port
), name="LAUNCH-BROWSER").start()
sickrage.app.io_loop.start()
except socket.error as e:
sickrage.app.log.warning(e.strerror)
raise SystemExit
def shutdown(self):
if self.started:
self.started = False
self.server.close_all_connections()
self.server.stop()
sickrage.app.io_loop.stop()
示例12: srWebServer
# 需要导入模块: from tornado.httpserver import HTTPServer [as 别名]
# 或者: from tornado.httpserver.HTTPServer import close_all_connections [as 别名]
#.........这里部分代码省略.........
debug=False,
autoreload=False,
gzip=sickrage.srCore.srConfig.WEB_USE_GZIP,
xheaders=sickrage.srCore.srConfig.HANDLE_REVERSE_PROXY,
cookie_secret=sickrage.srCore.srConfig.WEB_COOKIE_SECRET,
login_url='%s/login/' % sickrage.srCore.srConfig.WEB_ROOT)
# Main Handlers
self.app.add_handlers('.*$', [
# webapi handler
(r'%s(/?.*)' % self.api_root, ApiHandler),
# webapi key retrieval
(r'%s/getkey(/?.*)' % sickrage.srCore.srConfig.WEB_ROOT, KeyHandler),
# webapi builder redirect
(r'%s/api/builder' % sickrage.srCore.srConfig.WEB_ROOT, RedirectHandler,
{"url": sickrage.srCore.srConfig.WEB_ROOT + '/apibuilder/'}),
# webui login/logout handlers
(r'%s/login(/?)' % sickrage.srCore.srConfig.WEB_ROOT, LoginHandler),
(r'%s/logout(/?)' % sickrage.srCore.srConfig.WEB_ROOT, LogoutHandler),
# webui handlers
] + Route.get_routes(sickrage.srCore.srConfig.WEB_ROOT))
# Web calendar handler (Needed because option Unprotected calendar)
self.app.add_handlers('.*$', [
(r'%s/calendar' % sickrage.srCore.srConfig.WEB_ROOT, CalendarHandler),
])
# Static File Handlers
self.app.add_handlers(".*$", [
# favicon
(r'%s/(favicon\.ico)' % sickrage.srCore.srConfig.WEB_ROOT, StaticFileHandler,
{"path": os.path.join(sickrage.srCore.srConfig.GUI_DIR, 'images/ico/favicon.ico')}),
# images
(r'%s.*?/images/(.*)' % sickrage.srCore.srConfig.WEB_ROOT, StaticImageHandler,
{"path": os.path.join(sickrage.srCore.srConfig.GUI_DIR, 'images')}),
# css
(r'%s/css/(.*)' % sickrage.srCore.srConfig.WEB_ROOT, StaticFileHandler,
{"path": os.path.join(sickrage.srCore.srConfig.GUI_DIR, 'css')}),
# scss
(r'%s/scss/(.*)' % sickrage.srCore.srConfig.WEB_ROOT, StaticFileHandler,
{"path": os.path.join(sickrage.srCore.srConfig.GUI_DIR, 'scss')}),
# fonts
(r'%s/fonts/(.*)' % sickrage.srCore.srConfig.WEB_ROOT, StaticFileHandler,
{"path": os.path.join(sickrage.srCore.srConfig.GUI_DIR, 'fonts')}),
# javascript
(r'%s/js/(.*)' % sickrage.srCore.srConfig.WEB_ROOT, StaticFileHandler,
{"path": os.path.join(sickrage.srCore.srConfig.GUI_DIR, 'js')}),
# videos
] + [(r'%s/videos/(.*)' % sickrage.srCore.srConfig.WEB_ROOT, StaticFileHandler,
{"path": self.video_root})])
self.server = HTTPServer(self.app, no_keep_alive=True)
if sickrage.srCore.srConfig.ENABLE_HTTPS: self.server.ssl_options = {
"certfile": sickrage.srCore.srConfig.HTTPS_CERT,
"keyfile": sickrage.srCore.srConfig.HTTPS_KEY
}
try:
self.server.listen(sickrage.srCore.srConfig.WEB_PORT, None)
except socket.error as e:
print(e.message)
raise
# launch browser window
if all([not sickrage.NOLAUNCH, sickrage.srCore.srConfig.LAUNCH_BROWSER]):
threading.Thread(None,
lambda: launch_browser(
('http', 'https')[sickrage.srCore.srConfig.ENABLE_HTTPS],
get_lan_ip(),
sickrage.srCore.srConfig.WEB_PORT
)).start()
# clear mako cache folder
makocache = os.path.join(sickrage.srCore.srConfig.CACHE_DIR, 'mako')
if os.path.isdir(makocache):
shutil.rmtree(makocache)
sickrage.srCore.srLogger.info("SiCKRAGE :: STARTED")
sickrage.srCore.srLogger.info("SiCKRAGE :: VERSION:[{}]".format(sickrage.srCore.VERSIONUPDATER.updater.version))
sickrage.srCore.srLogger.info("SiCKRAGE :: CONFIG:[{}]".format(sickrage.CONFIG_FILE))
sickrage.srCore.srLogger.info("SiCKRAGE :: URL:[{}://{}:{}/]".format(
('http', 'https')[sickrage.srCore.srConfig.ENABLE_HTTPS],
get_lan_ip(), sickrage.srCore.srConfig.WEB_PORT))
def shutdown(self):
if self.started:
self.server.close_all_connections()
self.server.stop()
self.started = False