python-bottle/0010-Add-ServerAdapter-for-CherryPy-9.patch
zhang-liang-pengkun a53dc64be9 Add ServerAdapter for CherryPy >= 9
Signed-off-by: zhang-liang-pengkun <zhangliangpengkun@xfusion.com>
2024-01-18 20:28:26 +08:00

47 lines
1.8 KiB
Diff

From 888aa8e7b8f6490015463ee370ff4026fc951b1f Mon Sep 17 00:00:00 2001
From: 06180339 <mlrst@web.de>
Date: Sat, 28 Jan 2017 23:29:29 +0100
Subject: [PATCH] Add ServerAdapter for CherryPy >= 9
Since CherryPy >= 9, the server part of CherryPy has been extracted and named Cheroot. Thus the old CherryPy ServerAdapter does not work for CherryPy >= 9: the import fails, and the SSL part should be different too. Cheroot can be installed (git install cheroot) without CherryPy so that we can just have a CherootServer adapter in addition to the CherryPyServer adapter for the older versions.
(cherry picked from commit b9229eef97ea246e3d0e0c455071d54435a1557d)
Signed-off-by: Juerg Haefliger <juergh@protonmail.com>
---
bottle.py | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/bottle.py b/bottle.py
index 04ccf7d..73886a2 100644
--- a/bottle.py
+++ b/bottle.py
@@ -2816,6 +2816,25 @@ class CherryPyServer(ServerAdapter):
server.stop()
+class CherootServer(ServerAdapter):
+ def run(self, handler): # pragma: no cover
+ from cheroot import wsgi
+ from cheroot.ssl import builtin
+ self.options['bind_addr'] = (self.host, self.port)
+ self.options['wsgi_app'] = handler
+ certfile = self.options.pop('certfile', None)
+ keyfile = self.options.pop('keyfile', None)
+ chainfile = self.options.pop('chainfile', None)
+ server = wsgi.Server(**self.options)
+ if certfile and keyfile:
+ server.ssl_adapter = builtin.BuiltinSSLAdapter(
+ certfile, keyfile, chainfile)
+ try:
+ server.start()
+ finally:
+ server.stop()
+
+
class WaitressServer(ServerAdapter):
def run(self, handler):
from waitress import serve
--
2.39.0.windows.2