Skip to content
Snippets Groups Projects
Commit de4d68ea authored by Julian Rother's avatar Julian Rother
Browse files

Caching for DN parsing and stringprep

parent 38eeb41c
No related branches found
No related tags found
No related merge requests found
Pipeline #9493 passed
...@@ -16,6 +16,7 @@ Limitations: ...@@ -16,6 +16,7 @@ Limitations:
import typing import typing
import re import re
import functools
from . import exceptions from . import exceptions
...@@ -45,6 +46,7 @@ class DN(tuple): ...@@ -45,6 +46,7 @@ class DN(tuple):
# distinguishedName = [ relativeDistinguishedName *( COMMA relativeDistinguishedName ) ] # distinguishedName = [ relativeDistinguishedName *( COMMA relativeDistinguishedName ) ]
@classmethod @classmethod
@functools.lru_cache(maxsize=128, typed=False)
def from_str(cls, schema, expr): def from_str(cls, schema, expr):
'''Parse string representation of a DN according to RFC 4514 '''Parse string representation of a DN according to RFC 4514
......
import unicodedata import unicodedata
import stringprep import stringprep
import enum import enum
import functools
SPACE = 0x0020 SPACE = 0x0020
...@@ -159,6 +160,7 @@ class SubstringType(enum.Enum): ...@@ -159,6 +160,7 @@ class SubstringType(enum.Enum):
ANY = enum.auto() ANY = enum.auto()
FINAL = enum.auto() FINAL = enum.auto()
@functools.lru_cache(maxsize=128, typed=False)
def prepare(value, matching_type=MatchingType.EXACT_STRING, def prepare(value, matching_type=MatchingType.EXACT_STRING,
substring_type=SubstringType.NONE): substring_type=SubstringType.NONE):
# Algortihm according to RFC 4518 # Algortihm according to RFC 4518
......
...@@ -543,3 +543,6 @@ class Schema(OIDDict): ...@@ -543,3 +543,6 @@ class Schema(OIDDict):
matching_rule_definitions=value.matching_rule_definitions, matching_rule_definitions=value.matching_rule_definitions,
attribute_type_definitions=value.attribute_type_definitions, attribute_type_definitions=value.attribute_type_definitions,
object_class_definitions=value.object_class_definitions) object_class_definitions=value.object_class_definitions)
def __hash__(self):
return id(self)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment