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 import ansi
|
||||||
from evennia.utils.utils import lazy_property, make_iter, variable_from_module
|
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))
|
_AT_SEARCH_RESULT = variable_from_module(*settings.SEARCH_AT_RESULT.rsplit(".", 1))
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
# Emote parser
|
# Emote parser
|
||||||
|
|
@ -256,12 +258,18 @@ def regex_tuple_from_key_alias(obj):
|
||||||
regex_tuple (tuple): A tuple
|
regex_tuple (tuple): A tuple
|
||||||
(ordered_permutation_regex, obj, key/alias)
|
(ordered_permutation_regex, obj, key/alias)
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return (
|
global _REGEX_TUPLE_CACHE
|
||||||
re.compile(ordered_permutation_regex(" ".join([obj.key] + obj.aliases.all())), _RE_FLAGS),
|
permutation_string = " ".join([obj.key] + obj.aliases.all())
|
||||||
obj,
|
|
||||||
obj.key,
|
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):
|
def parse_language(speaker, emote):
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,9 @@ Testing suite for contrib folder
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
|
from anything import Anything
|
||||||
from django.test import override_settings
|
from django.test import override_settings
|
||||||
from evennia.commands.default.tests import CommandTest
|
from evennia.commands.default.tests import CommandTest
|
||||||
from evennia.utils.test_resources import EvenniaTest, mockdelay, mockdeferLater
|
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("receiver of emotes"), self.receiver1)
|
||||||
self.assertEqual(self.speaker.search("colliding"), self.receiver2)
|
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):
|
class TestRPSystemCommands(CommandTest):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue