From 1f0aff0999c756edad5233a58d2fe86f34efa798 Mon Sep 17 00:00:00 2001
From: Tim Kreuzer <t.kreuzer@fz-juelich.de>
Date: Thu, 19 Dec 2024 09:40:00 +0100
Subject: [PATCH] use pycurl as default if available

---
 outpostspawner/api_flavors_update.py | 10 ++++++++++
 outpostspawner/outpostspawner.py     |  9 +++++++++
 2 files changed, 19 insertions(+)

diff --git a/outpostspawner/api_flavors_update.py b/outpostspawner/api_flavors_update.py
index da84c16..f696a88 100644
--- a/outpostspawner/api_flavors_update.py
+++ b/outpostspawner/api_flavors_update.py
@@ -52,6 +52,16 @@ async def async_get_flavors(log, user=None):
                 urls_tokens = list(
                     zip(initial_system_urls_list, initial_system_tokens_list)
                 )
+                # use pycurl by default, if available:
+                try:
+                    AsyncHTTPClient.configure(
+                        "tornado.curl_httpclient.CurlAsyncHTTPClient"
+                    )
+                except ImportError as e:
+                    log.debug(
+                        "Could not load pycurl: %s\npycurl is recommended if you have a large number of users.",
+                        e,
+                    )
                 http_client = AsyncHTTPClient(
                     force_instance=True, defaults=dict(validate_cert=False)
                 )
diff --git a/outpostspawner/outpostspawner.py b/outpostspawner/outpostspawner.py
index a47e597..f8650a2 100644
--- a/outpostspawner/outpostspawner.py
+++ b/outpostspawner/outpostspawner.py
@@ -614,6 +614,15 @@ class OutpostSpawner(ForwardBaseSpawner):
 
     @default("http_client")
     def _default_http_client(self):
+        """Configure tornado to use pycurl by default, if available"""
+        # use pycurl by default, if available:
+        try:
+            AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient")
+        except ImportError as e:
+            self.log.debug(
+                "Could not load pycurl: %s\npycurl is recommended if you have a large number of users.",
+                e,
+            )
         return AsyncHTTPClient(force_instance=True, defaults=dict(validate_cert=False))
 
     async def fetch(self, req, action):
-- 
GitLab