From de4d68eac3afc76d4169eb527fef0df6787e1298 Mon Sep 17 00:00:00 2001 From: Julian Rother <julian@jrother.eu> Date: Sat, 11 Dec 2021 16:30:23 +0100 Subject: [PATCH] Caching for DN parsing and stringprep --- ldapserver/dn.py | 2 ++ ldapserver/rfc4518_stringprep.py | 2 ++ ldapserver/schema/types.py | 3 +++ 3 files changed, 7 insertions(+) diff --git a/ldapserver/dn.py b/ldapserver/dn.py index f291fac..76a371f 100644 --- a/ldapserver/dn.py +++ b/ldapserver/dn.py @@ -16,6 +16,7 @@ Limitations: import typing import re +import functools from . import exceptions @@ -45,6 +46,7 @@ class DN(tuple): # distinguishedName = [ relativeDistinguishedName *( COMMA relativeDistinguishedName ) ] @classmethod + @functools.lru_cache(maxsize=128, typed=False) def from_str(cls, schema, expr): '''Parse string representation of a DN according to RFC 4514 diff --git a/ldapserver/rfc4518_stringprep.py b/ldapserver/rfc4518_stringprep.py index 6e4c93c..889b94b 100644 --- a/ldapserver/rfc4518_stringprep.py +++ b/ldapserver/rfc4518_stringprep.py @@ -1,6 +1,7 @@ import unicodedata import stringprep import enum +import functools SPACE = 0x0020 @@ -159,6 +160,7 @@ class SubstringType(enum.Enum): ANY = enum.auto() FINAL = enum.auto() +@functools.lru_cache(maxsize=128, typed=False) def prepare(value, matching_type=MatchingType.EXACT_STRING, substring_type=SubstringType.NONE): # Algortihm according to RFC 4518 diff --git a/ldapserver/schema/types.py b/ldapserver/schema/types.py index 4f3dcee..aba3bed 100644 --- a/ldapserver/schema/types.py +++ b/ldapserver/schema/types.py @@ -543,3 +543,6 @@ class Schema(OIDDict): matching_rule_definitions=value.matching_rule_definitions, attribute_type_definitions=value.attribute_type_definitions, object_class_definitions=value.object_class_definitions) + + def __hash__(self): + return id(self) -- GitLab