From 26d151d49a46a7f9f9d273690df423ffe092f8f6 Mon Sep 17 00:00:00 2001 From: Joe Banks Date: Fri, 26 Jul 2024 15:08:33 +0100 Subject: [PATCH] Cache the creation of clients for directory APIs --- arthur/apis/directory/freeipa.py | 2 ++ arthur/apis/directory/keycloak.py | 3 +++ arthur/apis/directory/ldap.py | 2 ++ 3 files changed, 7 insertions(+) diff --git a/arthur/apis/directory/freeipa.py b/arthur/apis/directory/freeipa.py index 4d8daf2..c534a6b 100644 --- a/arthur/apis/directory/freeipa.py +++ b/arthur/apis/directory/freeipa.py @@ -1,5 +1,6 @@ """API utilities for modifying data via FreeIPA.""" +from functools import cache from secrets import token_urlsafe from bonsai import LDAPDN @@ -11,6 +12,7 @@ PW_LENGTH = 20 +@cache def create_client() -> ClientMeta: """Create a new client and login to FreeIPA.""" username = LDAPDN(CONFIG.ldap_bind_user).rdns[0][0][1] diff --git a/arthur/apis/directory/keycloak.py b/arthur/apis/directory/keycloak.py index 60a76b3..836dfae 100644 --- a/arthur/apis/directory/keycloak.py +++ b/arthur/apis/directory/keycloak.py @@ -1,10 +1,13 @@ """Utilities for interacting with the Keycloak REST API.""" +from functools import cache + from keycloak import KeycloakAdmin from arthur.config import CONFIG +@cache def create_client() -> KeycloakAdmin: """Create a new client for the Keycloak API.""" return KeycloakAdmin( diff --git a/arthur/apis/directory/ldap.py b/arthur/apis/directory/ldap.py index 290380e..44c576a 100644 --- a/arthur/apis/directory/ldap.py +++ b/arthur/apis/directory/ldap.py @@ -1,6 +1,7 @@ """API utilities for fetching data from the LDAP directory.""" from dataclasses import dataclass +from functools import cache from bonsai import LDAPClient, LDAPDN, LDAPSearchScope @@ -23,6 +24,7 @@ def prepare_dn(dn: str) -> str: return f"{dn},{CONFIG.ldap_base_dn}" +@cache def create_client() -> LDAPClient: """Create an LDAP client with the configured settings.""" client = LDAPClient(str(CONFIG.ldap_host), tls=True)