mirror of
https://github.com/evennia/evennia.git
synced 2026-03-16 21:06:30 +01:00
Speed up rpsystem regex generation. Resolve #2265
This commit is contained in:
parent
bb8c212b8d
commit
e91671c053
2 changed files with 27 additions and 5 deletions
|
|
@ -103,6 +103,8 @@ from evennia import Command, CmdSet
|
|||
from evennia import ansi
|
||||
from evennia.utils.utils import lazy_property, make_iter, variable_from_module
|
||||
|
||||
_REGEX_TUPLE_CACHE = {}
|
||||
|
||||
_AT_SEARCH_RESULT = variable_from_module(*settings.SEARCH_AT_RESULT.rsplit(".", 1))
|
||||
# ------------------------------------------------------------
|
||||
# Emote parser
|
||||
|
|
@ -256,12 +258,18 @@ def regex_tuple_from_key_alias(obj):
|
|||
regex_tuple (tuple): A tuple
|
||||
(ordered_permutation_regex, obj, key/alias)
|
||||
|
||||
|
||||
"""
|
||||
return (
|
||||
re.compile(ordered_permutation_regex(" ".join([obj.key] + obj.aliases.all())), _RE_FLAGS),
|
||||
obj,
|
||||
obj.key,
|
||||
)
|
||||
global _REGEX_TUPLE_CACHE
|
||||
permutation_string = " ".join([obj.key] + obj.aliases.all())
|
||||
|
||||
if permutation_string not in _REGEX_TUPLE_CACHE:
|
||||
_REGEX_TUPLE_CACHE[permutation_string] = (
|
||||
re.compile(ordered_permutation_regex(permutation_string), _RE_FLAGS),
|
||||
obj,
|
||||
obj.key,
|
||||
)
|
||||
return _REGEX_TUPLE_CACHE[permutation_string]
|
||||
|
||||
|
||||
def parse_language(speaker, emote):
|
||||
|
|
|
|||
|
|
@ -4,7 +4,9 @@ Testing suite for contrib folder
|
|||
|
||||
"""
|
||||
|
||||
import time
|
||||
import datetime
|
||||
from anything import Anything
|
||||
from django.test import override_settings
|
||||
from evennia.commands.default.tests import CommandTest
|
||||
from evennia.utils.test_resources import EvenniaTest, mockdelay, mockdeferLater
|
||||
|
|
@ -233,6 +235,18 @@ class TestRPSystem(EvenniaTest):
|
|||
self.assertEqual(self.speaker.search("receiver of emotes"), self.receiver1)
|
||||
self.assertEqual(self.speaker.search("colliding"), self.receiver2)
|
||||
|
||||
def test_regex_tuple_from_key_alias(self):
|
||||
self.speaker.aliases.add("foo bar")
|
||||
self.speaker.aliases.add("this thing is a long thing")
|
||||
t0 = time.time()
|
||||
result = rpsystem.regex_tuple_from_key_alias(self.speaker)
|
||||
t1 = time.time()
|
||||
result = rpsystem.regex_tuple_from_key_alias(self.speaker)
|
||||
t2 = time.time()
|
||||
# print(f"t1: {t1 - t0}, t2: {t2 - t1}")
|
||||
self.assertLess(t2-t1, t1-t0)
|
||||
self.assertEqual(result, (Anything, self.speaker, self.speaker.key))
|
||||
|
||||
|
||||
class TestRPSystemCommands(CommandTest):
|
||||
def setUp(self):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue