mirror of
https://github.com/evennia/evennia.git
synced 2026-04-05 07:27:17 +02:00
Fix case if using string "call:" anywhere in locktype tricked Command to not use a fallback. Resolve #3643.
This commit is contained in:
parent
04374e5392
commit
1360f17202
4 changed files with 33 additions and 6 deletions
|
|
@ -15,6 +15,8 @@
|
|||
- [Fix][pull3640]: Typo fixes for conjugate verbs (aMiss-aWry)
|
||||
- [Fix][pull3647]: Contents cache didn't reset internal typecache on use of `init` hook (InspectorCaracal)
|
||||
- [Fix][issue3627]: Traceback from contrib `in-game reports` `help manage` command (Griatch)
|
||||
- [Fix][issue3643]: Fix for Commands metaclass interpreting e.g. `usercmd:false()` locks as
|
||||
a `cmd:` type lock for the purposes of default access fallbacks (Griatch).
|
||||
- [Docs][pull3576]: Rework doc for [Pycharm howto][doc-pycharm]
|
||||
- Docs updates: feykrh, Griatch
|
||||
|
||||
|
|
@ -29,6 +31,7 @@
|
|||
[pull3647]: https://github.com/evennia/evennia/pull/3647
|
||||
[pull3635]: https://github.com/evennia/evennia/pull/3635
|
||||
[issue3627]: https://github.com/evennia/evennia/issues/3627
|
||||
[issue3643]: https://github.com/evennia/evennia/issues/3643
|
||||
[doc-pycharm]: https://www.evennia.com/docs/latest/Coding/Setting-up-PyCharm.html
|
||||
|
||||
## Evennia 4.4.1
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@
|
|||
- [Fix][pull3645]: Correct `character_creator` contrib's error return (InspectorCaracal)
|
||||
- [Fix][pull3640]: Typo fixes for conjugate verbs (aMiss-aWry)
|
||||
- [Fix][pull3647]: Contents cache didn't reset internal typecache on use of `init` hook (InspectorCaracal)
|
||||
- [Fix][issue3627]: Traceback from contrib `in-game reports` `help manage` command (Griatch)
|
||||
- [Fix][issue3643]: Fix for Commands metaclass interpreting e.g. `usercmd:false()` locks as
|
||||
a `cmd:` type lock for the purposes of default access fallbacks (Griatch).
|
||||
- [Docs][pull3576]: Rework doc for [Pycharm howto][doc-pycharm]
|
||||
- Docs updates: feykrh, Griatch
|
||||
|
||||
|
|
@ -27,6 +30,8 @@
|
|||
[pull3640]: https://github.com/evennia/evennia/pull/3640
|
||||
[pull3647]: https://github.com/evennia/evennia/pull/3647
|
||||
[pull3635]: https://github.com/evennia/evennia/pull/3635
|
||||
[issue3627]: https://github.com/evennia/evennia/issues/3627
|
||||
[issue3643]: https://github.com/evennia/evennia/issues/3643
|
||||
[doc-pycharm]: https://www.evennia.com/docs/latest/Coding/Setting-up-PyCharm.html
|
||||
|
||||
## Evennia 4.4.1
|
||||
|
|
|
|||
|
|
@ -12,13 +12,13 @@ import re
|
|||
from django.conf import settings
|
||||
from django.urls import reverse
|
||||
from django.utils.text import slugify
|
||||
|
||||
from evennia.locks.lockhandler import LockHandler
|
||||
from evennia.utils.ansi import ANSIString
|
||||
from evennia.utils.evtable import EvTable
|
||||
from evennia.utils.utils import fill, is_iter, lazy_property, make_iter
|
||||
|
||||
CMD_IGNORE_PREFIXES = settings.CMD_IGNORE_PREFIXES
|
||||
_RE_CMD_LOCKFUNC_IN_LOCKSTRING = re.compile(r"(^|;|\s)cmd\:\w+", re.DOTALL)
|
||||
|
||||
|
||||
class InterruptCommand(Exception):
|
||||
|
|
@ -74,7 +74,7 @@ def _init_command(cls, **kwargs):
|
|||
if not hasattr(cls, "locks"):
|
||||
# default if one forgets to define completely
|
||||
cls.locks = "cmd:all()"
|
||||
if "cmd:" not in cls.locks:
|
||||
if not _RE_CMD_LOCKFUNC_IN_LOCKSTRING.search(cls.locks):
|
||||
cls.locks = "cmd:all();" + cls.locks
|
||||
for lockstring in cls.locks.split(";"):
|
||||
if lockstring and ":" not in lockstring:
|
||||
|
|
@ -575,7 +575,7 @@ Command \"{cmdname}\" has no defined `func()` method. Available properties on th
|
|||
|
||||
ex.
|
||||
::
|
||||
url(r'characters/(?P<slug>[\w\d\-]+)/(?P<pk>[0-9]+)/$',
|
||||
url(r'characters/(?P<slug>[\\w\\d\\-]+)/(?P<pk>[0-9]+)/$',
|
||||
CharDetailView.as_view(), name='character-detail')
|
||||
|
||||
If no View has been created and defined in urls.py, returns an
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ Unit testing for the Command system itself.
|
|||
"""
|
||||
|
||||
from django.test import override_settings
|
||||
|
||||
from evennia.commands import cmdparser
|
||||
from evennia.commands.cmdset import CmdSet
|
||||
from evennia.commands.command import Command
|
||||
|
|
@ -991,9 +990,8 @@ class TestOptionTransferReplace(TestCase):
|
|||
|
||||
import sys
|
||||
|
||||
from twisted.trial.unittest import TestCase as TwistedTestCase
|
||||
|
||||
from evennia.commands import cmdhandler
|
||||
from twisted.trial.unittest import TestCase as TwistedTestCase
|
||||
|
||||
|
||||
def _mockdelay(time, func, *args, **kwargs):
|
||||
|
|
@ -1307,3 +1305,24 @@ class TestIssue3090(BaseEvenniaTest):
|
|||
self.assertEqual(result[3], 8)
|
||||
self.assertEqual(result[4], 1.0)
|
||||
self.assertEqual(result[5], "smile at")
|
||||
|
||||
|
||||
class _TestCmd1(Command):
|
||||
key = "testcmd"
|
||||
locks = "usecmd:false()"
|
||||
|
||||
def func():
|
||||
pass
|
||||
|
||||
|
||||
class TestIssue3643(BaseEvenniaTest):
|
||||
"""
|
||||
Commands with a 'cmd:' anywhere in its string, even `funccmd:` is assumed to
|
||||
be a cmd: type lock, meaning it will not auto-insert `cmd:all()` into the
|
||||
lockstring as intended.
|
||||
|
||||
"""
|
||||
|
||||
def test_issue_3643(self):
|
||||
cmd = _TestCmd1()
|
||||
self.assertEqual(cmd.locks, "cmd:all();usecmd:false()")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue