From 0779ec82b6b7c15d2c99a943155f9db319d5c8ba Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 26 Apr 2025 14:07:38 +0200 Subject: [PATCH] Apply black on code --- evennia/accounts/accounts.py | 11 ++++++-- evennia/accounts/bots.py | 6 +++-- evennia/commands/cmdhandler.py | 1 + evennia/commands/command.py | 1 + evennia/commands/default/account.py | 3 ++- evennia/commands/default/building.py | 3 ++- evennia/commands/default/general.py | 1 + evennia/commands/default/help.py | 9 ++++++- evennia/commands/default/system.py | 5 ++-- evennia/commands/default/tests.py | 26 ++++++++++++++----- evennia/commands/tests.py | 4 ++- evennia/comms/comms.py | 2 +- evennia/comms/models.py | 2 ++ evennia/comms/tests.py | 2 +- .../godotwebsocket/test_text2bbcode.py | 2 +- .../base_systems/godotwebsocket/webclient.py | 1 + .../base_systems/ingame_python/typeclasses.py | 7 ++++- .../base_systems/ingame_python/utils.py | 9 ++++--- .../base_systems/ingame_reports/reports.py | 1 + .../base_systems/ingame_reports/tests.py | 5 ++-- .../base_systems/menu_login/menu_login.py | 1 + .../full_systems/evscaperoom/commands.py | 3 ++- .../game_systems/achievements/achievements.py | 2 +- .../contrib/game_systems/clothing/tests.py | 4 ++- .../game_systems/containers/containers.py | 2 +- .../game_systems/multidescer/multidescer.py | 1 + .../contrib/game_systems/storage/storage.py | 2 +- .../contrib/grid/ingame_map_display/tests.py | 2 +- evennia/contrib/rpg/buffs/buff.py | 10 +++---- evennia/contrib/rpg/traits/tests.py | 3 ++- evennia/contrib/rpg/traits/traits.py | 8 +++++- .../tutorials/talking_npc/talking_npc.py | 1 + evennia/help/models.py | 1 + evennia/help/tests.py | 1 + evennia/help/utils.py | 7 ++--- evennia/objects/manager.py | 2 +- evennia/objects/models.py | 1 + evennia/objects/objects.py | 3 ++- evennia/objects/tests.py | 7 ++++- evennia/prototypes/prototypes.py | 1 + evennia/scripts/models.py | 1 + evennia/scripts/scripthandler.py | 1 + evennia/scripts/scripts.py | 5 ++-- evennia/scripts/taskhandler.py | 7 ++--- evennia/scripts/tests.py | 3 ++- evennia/scripts/tickerhandler.py | 3 ++- evennia/server/inputfuncs.py | 1 + evennia/server/models.py | 1 + evennia/server/portal/mssp.py | 1 + evennia/server/portal/mxp.py | 2 +- evennia/server/portal/naws.py | 6 +++-- evennia/server/portal/service.py | 1 + evennia/server/portal/suppress_ga.py | 6 ++--- evennia/server/service.py | 7 ++--- evennia/typeclasses/attributes.py | 4 ++- evennia/typeclasses/tags.py | 1 + evennia/utils/ansi.py | 1 + evennia/utils/containers.py | 1 + evennia/utils/dbserialize.py | 3 ++- evennia/utils/evmenu.py | 10 +++++-- evennia/utils/evmore.py | 4 +-- evennia/utils/gametime.py | 2 +- evennia/utils/tests/test_batchprocessors.py | 2 +- evennia/utils/tests/test_dbserialize.py | 3 ++- evennia/utils/tests/test_evmenu.py | 1 + evennia/utils/tests/test_text2html.py | 2 +- evennia/utils/tests/test_utils.py | 12 +++++---- evennia/utils/tests/test_validatorfuncs.py | 2 +- evennia/utils/utils.py | 12 ++++----- evennia/web/admin/help.py | 1 + 70 files changed, 184 insertions(+), 85 deletions(-) diff --git a/evennia/accounts/accounts.py b/evennia/accounts/accounts.py index 9cf3d313a..9266f3d4a 100644 --- a/evennia/accounts/accounts.py +++ b/evennia/accounts/accounts.py @@ -16,13 +16,14 @@ import time import typing from random import getrandbits -import evennia from django.conf import settings from django.contrib.auth import authenticate, password_validation from django.core.exceptions import ImproperlyConfigured, ValidationError from django.utils import timezone from django.utils.module_loading import import_string from django.utils.translation import gettext as _ + +import evennia from evennia.accounts.manager import AccountManager from evennia.accounts.models import AccountDB from evennia.commands.cmdsethandler import CmdSetHandler @@ -41,7 +42,13 @@ from evennia.typeclasses.attributes import ModelAttributeBackend, NickHandler from evennia.typeclasses.models import TypeclassBase from evennia.utils import class_from_module, create, logger from evennia.utils.optionhandler import OptionHandler -from evennia.utils.utils import is_iter, lazy_property, make_iter, to_str, variable_from_module +from evennia.utils.utils import ( + is_iter, + lazy_property, + make_iter, + to_str, + variable_from_module, +) __all__ = ("DefaultAccount", "DefaultGuest") diff --git a/evennia/accounts/bots.py b/evennia/accounts/bots.py index c7a020dc6..f4315257d 100644 --- a/evennia/accounts/bots.py +++ b/evennia/accounts/bots.py @@ -555,7 +555,7 @@ class DiscordBot(Bot): """ factory_path = "evennia.server.portal.discord.DiscordWebsocketServerFactory" - + def _load_channels(self): self.ndb.ev_channels = {} if channel_links := self.db.channels: @@ -594,7 +594,9 @@ class DiscordBot(Bot): if not channel.connect(self): logger.log_warn(f"{self} could not connect to Evennia channel {channel}.") if not channel.access(self, "send"): - logger.log_warn(f"{self} doesn't have permission to send messages to Evennia channel {channel}.") + logger.log_warn( + f"{self} doesn't have permission to send messages to Evennia channel {channel}." + ) # these will be made available as properties on the protocol factory configdict = {"uid": self.dbid} diff --git a/evennia/commands/cmdhandler.py b/evennia/commands/cmdhandler.py index b8332189d..8b93d6689 100644 --- a/evennia/commands/cmdhandler.py +++ b/evennia/commands/cmdhandler.py @@ -261,6 +261,7 @@ def _progressive_cmd_run(cmd, generator, response=None): class NoCmdSets(Exception): "No cmdsets found. Critical error." + pass diff --git a/evennia/commands/command.py b/evennia/commands/command.py index 26c1ca7e8..8931442bb 100644 --- a/evennia/commands/command.py +++ b/evennia/commands/command.py @@ -12,6 +12,7 @@ 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 diff --git a/evennia/commands/default/account.py b/evennia/commands/default/account.py index 3be3fab3e..46cfc8415 100644 --- a/evennia/commands/default/account.py +++ b/evennia/commands/default/account.py @@ -22,8 +22,9 @@ method. Otherwise all text will be returned to all connected sessions. import time from codecs import lookup as codecs_lookup -import evennia from django.conf import settings + +import evennia from evennia.utils import create, logger, search, utils COMMAND_DEFAULT_CLASS = utils.class_from_module(settings.COMMAND_DEFAULT_CLASS) diff --git a/evennia/commands/default/building.py b/evennia/commands/default/building.py index 084da76e2..40f1b6037 100644 --- a/evennia/commands/default/building.py +++ b/evennia/commands/default/building.py @@ -5,10 +5,11 @@ Building and world design commands import re import typing -import evennia from django.conf import settings from django.core.paginator import Paginator from django.db.models import Max, Min, Q + +import evennia from evennia import InterruptCommand from evennia.commands.cmdhandler import generate_cmdset_providers, get_and_merge_cmdsets from evennia.locks.lockhandler import LockException diff --git a/evennia/commands/default/general.py b/evennia/commands/default/general.py index af70f2b46..c5af73af7 100644 --- a/evennia/commands/default/general.py +++ b/evennia/commands/default/general.py @@ -5,6 +5,7 @@ General Character commands usually available to all characters import re from django.conf import settings + from evennia.objects.objects import DefaultObject from evennia.typeclasses.attributes import NickTemplateInvalid from evennia.utils import utils diff --git a/evennia/commands/default/help.py b/evennia/commands/default/help.py index 5026e3740..dbdfe6537 100644 --- a/evennia/commands/default/help.py +++ b/evennia/commands/default/help.py @@ -13,6 +13,7 @@ from dataclasses import dataclass from itertools import chain from django.conf import settings + from evennia.help.filehelp import FILE_HELP_ENTRIES from evennia.help.models import HelpEntry from evennia.help.utils import help_search_with_index, parse_entry_for_subcategories @@ -20,7 +21,13 @@ from evennia.locks.lockhandler import LockException from evennia.utils import create, evmore from evennia.utils.ansi import ANSIString from evennia.utils.eveditor import EvEditor -from evennia.utils.utils import class_from_module, dedent, format_grid, inherits_from, pad +from evennia.utils.utils import ( + class_from_module, + dedent, + format_grid, + inherits_from, + pad, +) CMD_IGNORE_PREFIXES = settings.CMD_IGNORE_PREFIXES COMMAND_DEFAULT_CLASS = class_from_module(settings.COMMAND_DEFAULT_CLASS) diff --git a/evennia/commands/default/system.py b/evennia/commands/default/system.py index 9ab2b9af3..b09aa8cb1 100644 --- a/evennia/commands/default/system.py +++ b/evennia/commands/default/system.py @@ -7,15 +7,16 @@ System commands import code import datetime import os +import subprocess import sys import time import traceback import django -import evennia -import subprocess import twisted from django.conf import settings + +import evennia from evennia.accounts.models import AccountDB from evennia.scripts.taskhandler import TaskHandlerTask from evennia.utils import gametime, logger, search, utils diff --git a/evennia/commands/default/tests.py b/evennia/commands/default/tests.py index ccafd8d98..852e4c6b2 100644 --- a/evennia/commands/default/tests.py +++ b/evennia/commands/default/tests.py @@ -14,27 +14,39 @@ main test suite started with import datetime from unittest.mock import MagicMock, Mock, patch -import evennia from anything import Anything from django.conf import settings from django.test import override_settings +from parameterized import parameterized +from twisted.internet import task -from evennia.objects.objects import DefaultCharacter, DefaultExit, DefaultObject, DefaultRoom -from evennia.objects.models import ObjectDB -from evennia.utils.search import search_object +import evennia from evennia.commands import cmdparser from evennia.commands.cmdset import CmdSet from evennia.commands.command import Command, InterruptCommand -from evennia.commands.default import account, admin, batchprocess, building, comms, general +from evennia.commands.default import ( + account, + admin, + batchprocess, + building, + comms, + general, +) from evennia.commands.default import help as help_module from evennia.commands.default import syscommands, system, unloggedin from evennia.commands.default.cmdset_character import CharacterCmdSet from evennia.commands.default.muxcommand import MuxCommand +from evennia.objects.models import ObjectDB +from evennia.objects.objects import ( + DefaultCharacter, + DefaultExit, + DefaultObject, + DefaultRoom, +) from evennia.prototypes import prototypes as protlib from evennia.utils import create, gametime, utils +from evennia.utils.search import search_object from evennia.utils.test_resources import BaseEvenniaCommandTest # noqa -from parameterized import parameterized -from twisted.internet import task # ------------------------------------------------------------ # Command testing diff --git a/evennia/commands/tests.py b/evennia/commands/tests.py index ea9c954b2..d1b8f4eb4 100644 --- a/evennia/commands/tests.py +++ b/evennia/commands/tests.py @@ -4,6 +4,7 @@ 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 @@ -990,9 +991,10 @@ class TestOptionTransferReplace(TestCase): import sys -from evennia.commands import cmdhandler from twisted.trial.unittest import TestCase as TwistedTestCase +from evennia.commands import cmdhandler + def _mockdelay(time, func, *args, **kwargs): return func(*args, **kwargs) diff --git a/evennia/comms/comms.py b/evennia/comms/comms.py index 78811572c..343c7b9e4 100644 --- a/evennia/comms/comms.py +++ b/evennia/comms/comms.py @@ -9,9 +9,9 @@ from django.contrib.contenttypes.models import ContentType from django.urls import reverse from django.utils.text import slugify -from evennia.objects.objects import DefaultObject from evennia.comms.managers import ChannelManager from evennia.comms.models import ChannelDB +from evennia.objects.objects import DefaultObject from evennia.typeclasses.models import TypeclassBase from evennia.utils import create, logger from evennia.utils.utils import inherits_from, make_iter diff --git a/evennia/comms/models.py b/evennia/comms/models.py index efab6ee4d..b8053015e 100644 --- a/evennia/comms/models.py +++ b/evennia/comms/models.py @@ -184,6 +184,7 @@ class Msg(SharedMemoryModel): class Meta(object): "Define Django meta options" + verbose_name = "Msg" @lazy_property @@ -712,6 +713,7 @@ class ChannelDB(TypedObject): class Meta: "Define Django meta options" + verbose_name = "Channel" verbose_name_plural = "Channels" diff --git a/evennia/comms/tests.py b/evennia/comms/tests.py index 7bd9a8c6a..96ac1a38d 100644 --- a/evennia/comms/tests.py +++ b/evennia/comms/tests.py @@ -1,7 +1,7 @@ from django.test import SimpleTestCase -from evennia.comms.comms import DefaultChannel from evennia.commands.default.comms import CmdChannel +from evennia.comms.comms import DefaultChannel from evennia.utils.create import create_message from evennia.utils.test_resources import BaseEvenniaTest diff --git a/evennia/contrib/base_systems/godotwebsocket/test_text2bbcode.py b/evennia/contrib/base_systems/godotwebsocket/test_text2bbcode.py index deb099d74..783e78aec 100644 --- a/evennia/contrib/base_systems/godotwebsocket/test_text2bbcode.py +++ b/evennia/contrib/base_systems/godotwebsocket/test_text2bbcode.py @@ -1,4 +1,4 @@ -"""Tests for text2bbcode """ +"""Tests for text2bbcode""" import mock from django.test import TestCase diff --git a/evennia/contrib/base_systems/godotwebsocket/webclient.py b/evennia/contrib/base_systems/godotwebsocket/webclient.py index bd8576ff1..0706781ba 100644 --- a/evennia/contrib/base_systems/godotwebsocket/webclient.py +++ b/evennia/contrib/base_systems/godotwebsocket/webclient.py @@ -65,6 +65,7 @@ class GodotWebSocketClient(webclient.WebSocketClient): def start_plugin_services(portal): class GodotWebsocket(WebSocketServerFactory): "Only here for better naming in logs" + pass factory = GodotWebsocket() diff --git a/evennia/contrib/base_systems/ingame_python/typeclasses.py b/evennia/contrib/base_systems/ingame_python/typeclasses.py index af9a40032..1e0abac22 100644 --- a/evennia/contrib/base_systems/ingame_python/typeclasses.py +++ b/evennia/contrib/base_systems/ingame_python/typeclasses.py @@ -7,13 +7,18 @@ default ones in evennia core. """ -from evennia.objects.objects import DefaultCharacter, DefaultExit, DefaultObject, DefaultRoom from evennia.contrib.base_systems.ingame_python.callbackhandler import CallbackHandler from evennia.contrib.base_systems.ingame_python.utils import ( phrase_event, register_events, time_event, ) +from evennia.objects.objects import ( + DefaultCharacter, + DefaultExit, + DefaultObject, + DefaultRoom, +) from evennia.utils.utils import inherits_from, lazy_property # Character help diff --git a/evennia/contrib/base_systems/ingame_python/utils.py b/evennia/contrib/base_systems/ingame_python/utils.py index c991d720f..d332e3981 100644 --- a/evennia/contrib/base_systems/ingame_python/utils.py +++ b/evennia/contrib/base_systems/ingame_python/utils.py @@ -7,12 +7,15 @@ These functions are to be used by developers to customize events and callbacks. from django.conf import settings -from evennia.scripts.models import ScriptDB -from evennia.utils import logger -from evennia.contrib.base_systems.custom_gametime import UNITS, gametime_to_realtime +from evennia.contrib.base_systems.custom_gametime import ( + UNITS, + gametime_to_realtime, +) from evennia.contrib.base_systems.custom_gametime import ( real_seconds_until as custom_rsu, ) +from evennia.scripts.models import ScriptDB +from evennia.utils import logger from evennia.utils.create import create_script from evennia.utils.gametime import real_seconds_until as standard_rsu from evennia.utils.utils import class_from_module diff --git a/evennia/contrib/base_systems/ingame_reports/reports.py b/evennia/contrib/base_systems/ingame_reports/reports.py index b5758baac..73b348e1f 100644 --- a/evennia/contrib/base_systems/ingame_reports/reports.py +++ b/evennia/contrib/base_systems/ingame_reports/reports.py @@ -32,6 +32,7 @@ The contrib can be further configured through two settings, `INGAME_REPORT_TYPES """ from django.conf import settings + from evennia import CmdSet from evennia.commands.default.muxcommand import MuxCommand from evennia.comms.models import Msg diff --git a/evennia/contrib/base_systems/ingame_reports/tests.py b/evennia/contrib/base_systems/ingame_reports/tests.py index 4556c250a..376939050 100644 --- a/evennia/contrib/base_systems/ingame_reports/tests.py +++ b/evennia/contrib/base_systems/ingame_reports/tests.py @@ -1,6 +1,7 @@ -from unittest.mock import Mock, patch, MagicMock -from evennia.utils import create +from unittest.mock import MagicMock, Mock, patch + from evennia.comms.models import TempMsg +from evennia.utils import create from evennia.utils.test_resources import EvenniaCommandTest from . import menu, reports diff --git a/evennia/contrib/base_systems/menu_login/menu_login.py b/evennia/contrib/base_systems/menu_login/menu_login.py index bf9d1609d..2e081e640 100644 --- a/evennia/contrib/base_systems/menu_login/menu_login.py +++ b/evennia/contrib/base_systems/menu_login/menu_login.py @@ -232,6 +232,7 @@ class MenuLoginEvMenu(EvMenu): class UnloggedinCmdSet(CmdSet): "Cmdset for the unloggedin state" + key = "DefaultUnloggedin" priority = 0 diff --git a/evennia/contrib/full_systems/evscaperoom/commands.py b/evennia/contrib/full_systems/evscaperoom/commands.py index 2b96b0ad0..dba5f1e9b 100644 --- a/evennia/contrib/full_systems/evscaperoom/commands.py +++ b/evennia/contrib/full_systems/evscaperoom/commands.py @@ -29,8 +29,9 @@ Admin/development commands import re -import evennia from django.conf import settings + +import evennia from evennia import default_cmds, syscmdkeys from evennia.commands.cmdset import CmdSet from evennia.commands.command import Command, InterruptCommand diff --git a/evennia/contrib/game_systems/achievements/achievements.py b/evennia/contrib/game_systems/achievements/achievements.py index 82eed2a9e..13ad3b7e9 100644 --- a/evennia/contrib/game_systems/achievements/achievements.py +++ b/evennia/contrib/game_systems/achievements/achievements.py @@ -23,7 +23,7 @@ The recognized fields for an achievement are: - name (str): The name of the achievement. This is not the key and does not need to be unique. - desc (str): The longer description of the achievement. Common uses for this would be flavor text or hints on how to complete it. -- category (str): The category of conditions which this achievement tracks. It will most likely be +- category (str): The category of conditions which this achievement tracks. It will most likely be an action and you will most likely specify it based on where you're checking from. e.g. killing 10 rats might have a category of "defeat", which you'd then check from your code that runs when a player defeats something. diff --git a/evennia/contrib/game_systems/clothing/tests.py b/evennia/contrib/game_systems/clothing/tests.py index 4cc207b7e..b3bf62375 100644 --- a/evennia/contrib/game_systems/clothing/tests.py +++ b/evennia/contrib/game_systems/clothing/tests.py @@ -85,7 +85,9 @@ class TestClothingCmd(BaseEvenniaCommandTest): ) # Test remove command. - self.call(clothing.CmdRemove(), "", "Usage: remove ", caller=self.wearer) + self.call( + clothing.CmdRemove(), "", "Usage: remove ", caller=self.wearer + ) self.call( clothing.CmdRemove(), "hat", diff --git a/evennia/contrib/game_systems/containers/containers.py b/evennia/contrib/game_systems/containers/containers.py index be718d526..42d37148c 100644 --- a/evennia/contrib/game_systems/containers/containers.py +++ b/evennia/contrib/game_systems/containers/containers.py @@ -11,7 +11,7 @@ To install, import and add the `ContainerCmdSet` to `CharacterCmdSet` in your `d class CharacterCmdSet(default_cmds.CharacterCmdSet): # ... - + def at_cmdset_creation(self): # ... self.add(ContainerCmdSet) diff --git a/evennia/contrib/game_systems/multidescer/multidescer.py b/evennia/contrib/game_systems/multidescer/multidescer.py index 177437206..55cba97c3 100644 --- a/evennia/contrib/game_systems/multidescer/multidescer.py +++ b/evennia/contrib/game_systems/multidescer/multidescer.py @@ -41,6 +41,7 @@ _RE_KEYS = re.compile(r"([\w\s]+)(?:\+*?)", re.U + re.I) class DescValidateError(ValueError): "Used for tracebacks from desc systems" + pass diff --git a/evennia/contrib/game_systems/storage/storage.py b/evennia/contrib/game_systems/storage/storage.py index fe97ecee7..184b6e449 100644 --- a/evennia/contrib/game_systems/storage/storage.py +++ b/evennia/contrib/game_systems/storage/storage.py @@ -1,7 +1,7 @@ from evennia import CmdSet +from evennia.commands.default.muxcommand import MuxCommand from evennia.utils import list_to_string from evennia.utils.search import search_object_by_tag -from evennia.commands.default.muxcommand import MuxCommand SHARED_TAG_PREFIX = "shared" diff --git a/evennia/contrib/grid/ingame_map_display/tests.py b/evennia/contrib/grid/ingame_map_display/tests.py index 567ec228b..d3baf45a8 100644 --- a/evennia/contrib/grid/ingame_map_display/tests.py +++ b/evennia/contrib/grid/ingame_map_display/tests.py @@ -33,7 +33,7 @@ class TestIngameMap(BaseEvenniaCommandTest): create_object( exits.Exit, key="shopfront", - aliases=["w","west"], + aliases=["w", "west"], location=self.east_room, destination=self.west_room, ) diff --git a/evennia/contrib/rpg/buffs/buff.py b/evennia/contrib/rpg/buffs/buff.py index d77d47dc9..7afb20d69 100644 --- a/evennia/contrib/rpg/buffs/buff.py +++ b/evennia/contrib/rpg/buffs/buff.py @@ -1,7 +1,7 @@ """ Buffs - Tegiminis 2022 -A buff is a timed object, attached to a game entity, that modifies values, triggers +A buff is a timed object, attached to a game entity, that modifies values, triggers code, or both. It is a common design pattern in RPGs, particularly action games. This contrib gives you a buff handler to apply to your objects, a buff class to extend them, @@ -25,7 +25,7 @@ To make use of the handler, you will need: ### Applying a Buff -Call the handler `add(BuffClass)` method. This requires a class reference, and also contains a number of +Call the handler `add(BuffClass)` method. This requires a class reference, and also contains a number of optional arguments to customize the buff's duration, stacks, and so on. ```python @@ -36,8 +36,8 @@ self.buffs.add(ReflectBuff, to_cache={'reflect': 0.5}) # A single stack of Refl ### Modify -Call the handler `check(value, stat)` method wherever you want to see the modified value. -This will return the value, modified by and relevant buffs on the handler's owner (identified by +Call the handler `check(value, stat)` method wherever you want to see the modified value. +This will return the value, modified by and relevant buffs on the handler's owner (identified by the `stat` string). For example: ```python @@ -49,7 +49,7 @@ def take_damage(self, source, damage): ### Trigger -Call the handler `trigger(triggerstring)` method wherever you want an event call. This +Call the handler `trigger(triggerstring)` method wherever you want an event call. This will call the `at_trigger` hook method on all buffs with the relevant trigger. ```python diff --git a/evennia/contrib/rpg/traits/tests.py b/evennia/contrib/rpg/traits/tests.py index 607dab88f..8e0f406bd 100644 --- a/evennia/contrib/rpg/traits/tests.py +++ b/evennia/contrib/rpg/traits/tests.py @@ -9,9 +9,10 @@ Unit test module for Trait classes. from copy import copy from anything import Something +from mock import MagicMock, patch + from evennia.objects.objects import DefaultCharacter from evennia.utils.test_resources import BaseEvenniaTestCase, EvenniaTest -from mock import MagicMock, patch from . import traits diff --git a/evennia/contrib/rpg/traits/traits.py b/evennia/contrib/rpg/traits/traits.py index 4c21e6c4b..c38e92a0f 100644 --- a/evennia/contrib/rpg/traits/traits.py +++ b/evennia/contrib/rpg/traits/traits.py @@ -456,9 +456,15 @@ from functools import total_ordering from time import time from django.conf import settings + from evennia.utils import logger from evennia.utils.dbserialize import _SaverDict -from evennia.utils.utils import class_from_module, inherits_from, list_to_string, percent +from evennia.utils.utils import ( + class_from_module, + inherits_from, + list_to_string, + percent, +) # Available Trait classes. # This way the user can easily supply their own. Each diff --git a/evennia/contrib/tutorials/talking_npc/talking_npc.py b/evennia/contrib/tutorials/talking_npc/talking_npc.py index 3e9aa0cb4..ca19feb10 100644 --- a/evennia/contrib/tutorials/talking_npc/talking_npc.py +++ b/evennia/contrib/tutorials/talking_npc/talking_npc.py @@ -123,6 +123,7 @@ class CmdTalk(default_cmds.MuxCommand): class TalkingCmdSet(CmdSet): "Stores the talk command." + key = "talkingcmdset" def at_cmdset_creation(self): diff --git a/evennia/help/models.py b/evennia/help/models.py index a60aff47a..09834128d 100644 --- a/evennia/help/models.py +++ b/evennia/help/models.py @@ -109,6 +109,7 @@ class HelpEntry(SharedMemoryModel): class Meta: "Define Django meta options" + verbose_name = "Help Entry" verbose_name_plural = "Help Entries" diff --git a/evennia/help/tests.py b/evennia/help/tests.py index 086c10a14..02e4ccb59 100644 --- a/evennia/help/tests.py +++ b/evennia/help/tests.py @@ -5,6 +5,7 @@ command test-suite). """ from unittest import mock + from parameterized import parameterized from evennia.help import filehelp diff --git a/evennia/help/utils.py b/evennia/help/utils.py index 5ad469a50..537cbca97 100644 --- a/evennia/help/utils.py +++ b/evennia/help/utils.py @@ -11,7 +11,6 @@ import re from django.conf import settings from lunr.stemmer import stemmer - _RE_HELP_SUBTOPICS_START = re.compile(r"^\s*?#\s*?subtopics\s*?$", re.I + re.M) _RE_HELP_SUBTOPIC_SPLIT = re.compile(r"^\s*?(\#{2,6}\s*?\w+?[a-z0-9 \-\?!,\.]*?)$", re.M + re.I) _RE_HELP_SUBTOPIC_PARSE = re.compile(r"^(?P\#{2,6})\s*?(?P.*?)$", re.I + re.M) @@ -80,12 +79,10 @@ class LunrSearch: before twisted's logging has been set up """ # Lunr-related imports - from lunr import get_default_builder - from lunr import lunr - from lunr import stop_word_filter + from lunr import get_default_builder, lunr, stop_word_filter from lunr.exceptions import QueryParseError - from lunr.stemmer import stemmer from lunr.pipeline import Pipeline + from lunr.stemmer import stemmer # Store imported modules as instance attributes self.get_default_builder = get_default_builder diff --git a/evennia/objects/manager.py b/evennia/objects/manager.py index b41805d31..2982daa1d 100644 --- a/evennia/objects/manager.py +++ b/evennia/objects/manager.py @@ -322,7 +322,7 @@ class ObjectDBManager(TypedObjectManager): ) # convert search term to partial-match regex - search_regex = r".* ".join(r"\b" + re.escape(word) for word in ostring.split()) + r'.*' + search_regex = r".* ".join(r"\b" + re.escape(word) for word in ostring.split()) + r".*" # do the fuzzy search and return whatever it matches return ( diff --git a/evennia/objects/models.py b/evennia/objects/models.py index 5db789a00..24286de0c 100644 --- a/evennia/objects/models.py +++ b/evennia/objects/models.py @@ -20,6 +20,7 @@ from django.conf import settings from django.core.exceptions import ObjectDoesNotExist from django.core.validators import validate_comma_separated_integer_list from django.db import models + from evennia.objects.manager import ObjectDBManager from evennia.typeclasses.models import TypedObject from evennia.utils import logger diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index 1498163a7..7643fec2b 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -10,10 +10,11 @@ import time import typing from collections import defaultdict -import evennia import inflect from django.conf import settings from django.utils.translation import gettext as _ + +import evennia from evennia.commands import cmdset from evennia.commands.cmdsethandler import CmdSetHandler from evennia.objects.manager import ObjectManager diff --git a/evennia/objects/tests.py b/evennia/objects/tests.py index 3c9ab7857..3d5997127 100644 --- a/evennia/objects/tests.py +++ b/evennia/objects/tests.py @@ -1,7 +1,12 @@ from unittest import skip -from evennia.objects.objects import DefaultCharacter, DefaultExit, DefaultObject, DefaultRoom from evennia.objects.models import ObjectDB +from evennia.objects.objects import ( + DefaultCharacter, + DefaultExit, + DefaultObject, + DefaultRoom, +) from evennia.typeclasses.attributes import AttributeProperty from evennia.typeclasses.tags import ( AliasProperty, diff --git a/evennia/prototypes/prototypes.py b/evennia/prototypes/prototypes.py index 569179817..c369e4fa8 100644 --- a/evennia/prototypes/prototypes.py +++ b/evennia/prototypes/prototypes.py @@ -12,6 +12,7 @@ from django.conf import settings from django.core.paginator import Paginator from django.db.models import Q from django.utils.translation import gettext as _ + from evennia.locks.lockhandler import check_lockstring, validate_lockstring from evennia.objects.models import ObjectDB from evennia.scripts.scripts import DefaultScript diff --git a/evennia/scripts/models.py b/evennia/scripts/models.py index e2f98dea4..592df28d2 100644 --- a/evennia/scripts/models.py +++ b/evennia/scripts/models.py @@ -126,6 +126,7 @@ class ScriptDB(TypedObject): class Meta(object): "Define Django meta options" + verbose_name = "Script" # diff --git a/evennia/scripts/scripthandler.py b/evennia/scripts/scripthandler.py index 35971669b..3e6268dc6 100644 --- a/evennia/scripts/scripthandler.py +++ b/evennia/scripts/scripthandler.py @@ -7,6 +7,7 @@ added to all game objects. You access it through the property """ from django.utils.translation import gettext as _ + from evennia.scripts.models import ScriptDB from evennia.utils import create, logger diff --git a/evennia/scripts/scripts.py b/evennia/scripts/scripts.py index 1f2da8551..5d1b45f36 100644 --- a/evennia/scripts/scripts.py +++ b/evennia/scripts/scripts.py @@ -6,12 +6,13 @@ ability to run timers. """ from django.utils.translation import gettext as _ +from twisted.internet.defer import Deferred, maybeDeferred +from twisted.internet.task import LoopingCall + from evennia.scripts.manager import ScriptManager from evennia.scripts.models import ScriptDB from evennia.typeclasses.models import TypeclassBase from evennia.utils import create, logger -from twisted.internet.defer import Deferred, maybeDeferred -from twisted.internet.task import LoopingCall __all__ = ["DefaultScript", "DoNothing", "Store"] diff --git a/evennia/scripts/taskhandler.py b/evennia/scripts/taskhandler.py index 4a7e0386e..4493ca57f 100644 --- a/evennia/scripts/taskhandler.py +++ b/evennia/scripts/taskhandler.py @@ -5,13 +5,14 @@ Module containing the task handler for Evennia deferred tasks, persistent or not from datetime import datetime, timedelta from pickle import PickleError -from evennia.server.models import ServerConfig -from evennia.utils.dbserialize import dbserialize, dbunserialize -from evennia.utils.logger import log_err from twisted.internet import reactor from twisted.internet.defer import CancelledError as DefCancelledError from twisted.internet.task import deferLater +from evennia.server.models import ServerConfig +from evennia.utils.dbserialize import dbserialize, dbunserialize +from evennia.utils.logger import log_err + TASK_HANDLER = None diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index f7f3eaec4..b62de636d 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -6,6 +6,8 @@ Unit tests for the scripts package from collections import defaultdict from unittest import TestCase, mock +from parameterized import parameterized + from evennia import DefaultScript from evennia.objects.objects import DefaultObject from evennia.scripts.manager import ScriptDBManager @@ -17,7 +19,6 @@ from evennia.scripts.tickerhandler import TickerHandler from evennia.utils.create import create_script from evennia.utils.dbserialize import dbserialize from evennia.utils.test_resources import BaseEvenniaTest, EvenniaTest -from parameterized import parameterized class TestScript(BaseEvenniaTest): diff --git a/evennia/scripts/tickerhandler.py b/evennia/scripts/tickerhandler.py index 4848fe8a4..cd0e3825c 100644 --- a/evennia/scripts/tickerhandler.py +++ b/evennia/scripts/tickerhandler.py @@ -69,12 +69,13 @@ call the handler's `save()` and `restore()` methods when the server reboots. import inspect from django.core.exceptions import ObjectDoesNotExist +from twisted.internet.defer import inlineCallbacks + from evennia.scripts.scripts import ExtendedLoopingCall from evennia.server.models import ServerConfig from evennia.utils import inherits_from, variable_from_module from evennia.utils.dbserialize import dbserialize, dbunserialize, pack_dbobj from evennia.utils.logger import log_err, log_trace -from twisted.internet.defer import inlineCallbacks _GA = object.__getattribute__ _SA = object.__setattr__ diff --git a/evennia/server/inputfuncs.py b/evennia/server/inputfuncs.py index 637c73456..0c56d20ea 100644 --- a/evennia/server/inputfuncs.py +++ b/evennia/server/inputfuncs.py @@ -24,6 +24,7 @@ import importlib from codecs import lookup as codecs_lookup from django.conf import settings + from evennia.accounts.models import AccountDB from evennia.commands.cmdhandler import cmdhandler from evennia.utils.logger import log_err diff --git a/evennia/server/models.py b/evennia/server/models.py index f945409ad..f7313407e 100644 --- a/evennia/server/models.py +++ b/evennia/server/models.py @@ -110,6 +110,7 @@ class ServerConfig(WeakSharedMemoryModel): class Meta: "Define Django meta options" + verbose_name = "Server Config value" verbose_name_plural = "Server Config values" diff --git a/evennia/server/portal/mssp.py b/evennia/server/portal/mssp.py index 2b0a3bbe9..b32c0dd86 100644 --- a/evennia/server/portal/mssp.py +++ b/evennia/server/portal/mssp.py @@ -12,6 +12,7 @@ active players and so on. """ import weakref + from django.conf import settings from evennia.utils import utils diff --git a/evennia/server/portal/mxp.py b/evennia/server/portal/mxp.py index b9952864c..260cd9708 100644 --- a/evennia/server/portal/mxp.py +++ b/evennia/server/portal/mxp.py @@ -25,7 +25,7 @@ URL_SUB = re.compile(r"\|lu(.*?)\|lt(.*?)\|le", re.DOTALL) # MXP Telnet option MXP = bytes([91]) # b"\x5b" -MXP_TEMPSECURE = "\x1B[4z" +MXP_TEMPSECURE = "\x1b[4z" MXP_SEND = MXP_TEMPSECURE + '' + "\\2" + MXP_TEMPSECURE + "" MXP_URL = MXP_TEMPSECURE + '' + "\\2" + MXP_TEMPSECURE + "" diff --git a/evennia/server/portal/naws.py b/evennia/server/portal/naws.py index d3c62a413..e72021033 100644 --- a/evennia/server/portal/naws.py +++ b/evennia/server/portal/naws.py @@ -10,8 +10,8 @@ client and update it when the size changes """ -from codecs import encode as codecs_encode import weakref +from codecs import encode as codecs_encode from django.conf import settings @@ -86,4 +86,6 @@ class Naws: width = options[0] + options[1] self.protocol().protocol_flags["SCREENWIDTH"][0] = int(codecs_encode(width, "hex"), 16) height = options[2] + options[3] - self.protocol().protocol_flags["SCREENHEIGHT"][0] = int(codecs_encode(height, "hex"), 16) + self.protocol().protocol_flags["SCREENHEIGHT"][0] = int( + codecs_encode(height, "hex"), 16 + ) diff --git a/evennia/server/portal/service.py b/evennia/server/portal/service.py index 048ad8ea1..66bf38803 100644 --- a/evennia/server/portal/service.py +++ b/evennia/server/portal/service.py @@ -223,6 +223,7 @@ class EvenniaPortalService(MultiService): class Websocket(WebSocketServerFactory): "Only here for better naming in logs" + pass factory = Websocket() diff --git a/evennia/server/portal/suppress_ga.py b/evennia/server/portal/suppress_ga.py index f933b359e..ddba5ed15 100644 --- a/evennia/server/portal/suppress_ga.py +++ b/evennia/server/portal/suppress_ga.py @@ -41,9 +41,9 @@ class SuppressGA: self.protocol = weakref.ref(protocol) self.protocol().protocol_flags["NOGOAHEAD"] = True - self.protocol().protocol_flags["NOPROMPTGOAHEAD"] = ( - True # Used to send a GA after a prompt line only, set in TTYPE (per client) - ) + self.protocol().protocol_flags[ + "NOPROMPTGOAHEAD" + ] = True # Used to send a GA after a prompt line only, set in TTYPE (per client) # tell the client that we prefer to suppress GA ... self.protocol().will(SUPPRESS_GA).addCallbacks(self.will_suppress_ga, self.wont_suppress_ga) diff --git a/evennia/server/service.py b/evennia/server/service.py index cfda89270..ee640e84f 100644 --- a/evennia/server/service.py +++ b/evennia/server/service.py @@ -8,19 +8,20 @@ import time import traceback import django -import evennia from django.conf import settings from django.db import connection from django.db.utils import OperationalError from django.utils.translation import gettext as _ -from evennia.utils import logger -from evennia.utils.utils import get_evennia_version, make_iter, mod_import from twisted.application import internet from twisted.application.service import MultiService from twisted.internet import defer, reactor from twisted.internet.defer import Deferred from twisted.internet.task import LoopingCall +import evennia +from evennia.utils import logger +from evennia.utils.utils import get_evennia_version, make_iter, mod_import + _SA = object.__setattr__ diff --git a/evennia/typeclasses/attributes.py b/evennia/typeclasses/attributes.py index 2059ecca1..5d8d7aca8 100644 --- a/evennia/typeclasses/attributes.py +++ b/evennia/typeclasses/attributes.py @@ -17,6 +17,7 @@ from copy import copy from django.conf import settings from django.db import models from django.utils.encoding import smart_str + from evennia.locks.lockhandler import LockHandler from evennia.utils.dbserialize import from_pickle, to_pickle from evennia.utils.idmapper.models import SharedMemoryModel @@ -62,7 +63,7 @@ class IAttribute: return LockHandler(self) key = property(lambda self: self.db_key) - strvalue = property(lambda self: getattr(self, 'db_strvalue', None)) + strvalue = property(lambda self: getattr(self, "db_strvalue", None)) category = property(lambda self: self.db_category) model = property(lambda self: self.db_model) attrtype = property(lambda self: self.db_attrtype) @@ -411,6 +412,7 @@ class Attribute(IAttribute, SharedMemoryModel): class Meta: "Define Django meta options" + verbose_name = "Attribute" # Wrapper properties to easily set database fields. These are diff --git a/evennia/typeclasses/tags.py b/evennia/typeclasses/tags.py index 66cf60e1c..017cf5bc7 100644 --- a/evennia/typeclasses/tags.py +++ b/evennia/typeclasses/tags.py @@ -14,6 +14,7 @@ from collections import defaultdict from django.conf import settings from django.db import models + from evennia.locks.lockfuncs import perm as perm_lockfunc from evennia.utils.utils import make_iter, to_str diff --git a/evennia/utils/ansi.py b/evennia/utils/ansi.py index 06e243825..38bea3fcb 100644 --- a/evennia/utils/ansi.py +++ b/evennia/utils/ansi.py @@ -67,6 +67,7 @@ import re from collections import OrderedDict from django.conf import settings + from evennia.utils import logger, utils from evennia.utils.hex_colors import HexColors from evennia.utils.utils import to_str diff --git a/evennia/utils/containers.py b/evennia/utils/containers.py index 53496e5a0..f7427f950 100644 --- a/evennia/utils/containers.py +++ b/evennia/utils/containers.py @@ -14,6 +14,7 @@ from pickle import dumps from django.conf import settings from django.db.utils import OperationalError, ProgrammingError + from evennia.scripts.models import ScriptDB from evennia.utils import logger from evennia.utils.utils import callables_from_module, class_from_module diff --git a/evennia/utils/dbserialize.py b/evennia/utils/dbserialize.py index 8984c876e..73d00e7cc 100644 --- a/evennia/utils/dbserialize.py +++ b/evennia/utils/dbserialize.py @@ -28,6 +28,8 @@ try: except ImportError: from pickle import dumps, loads +from enum import IntFlag + from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist from django.utils.safestring import SafeString @@ -35,7 +37,6 @@ from django.utils.safestring import SafeString import evennia from evennia.utils import logger from evennia.utils.utils import is_iter, to_bytes, uses_database -from enum import IntFlag __all__ = ("to_pickle", "from_pickle", "do_pickle", "do_unpickle", "dbserialize", "dbunserialize") diff --git a/evennia/utils/evmenu.py b/evennia/utils/evmenu.py index e98ddbccb..106e31ecd 100644 --- a/evennia/utils/evmenu.py +++ b/evennia/utils/evmenu.py @@ -1421,14 +1421,20 @@ def list_node(option_generator, select=None, pagesize=10): options.append( { "key": (_("|wp|Wrevious page|n"), "p"), - "goto": (lambda caller: None, kwargs | {"optionpage_index": page_index - 1}), + "goto": ( + lambda caller: None, + kwargs | {"optionpage_index": page_index - 1}, + ), } ) if page_index < npages - 1: options.append( { "key": (_("|wn|Wext page|n"), "n"), - "goto": (lambda caller: None, kwargs | {"optionpage_index": page_index + 1}), + "goto": ( + lambda caller: None, + kwargs | {"optionpage_index": page_index + 1}, + ), } ) diff --git a/evennia/utils/evmore.py b/evennia/utils/evmore.py index 5aebc899d..3bbd42d42 100644 --- a/evennia/utils/evmore.py +++ b/evennia/utils/evmore.py @@ -79,7 +79,7 @@ class CmdMore(Command): Implement the command """ more = self.caller.ndb._more - if not more and hasattr(self.caller, 'account') and self.caller.account: + if not more and hasattr(self.caller, "account") and self.caller.account: more = self.caller.account.ndb._more if not more: self.caller.msg("Error in loading the pager. Contact an admin.") @@ -113,7 +113,7 @@ class CmdMoreExit(Command): Exit pager and re-fire the failed command. """ more = self.caller.ndb._more - if not more and hasattr(self.caller, 'account') and self.caller.account: + if not more and hasattr(self.caller, "account") and self.caller.account: more = self.caller.account.ndb._more if not more: self.caller.msg("Error in exiting the pager. Contact an admin.") diff --git a/evennia/utils/gametime.py b/evennia/utils/gametime.py index f1e499a43..9cd2b49d4 100644 --- a/evennia/utils/gametime.py +++ b/evennia/utils/gametime.py @@ -8,12 +8,12 @@ total runtime of the server and the current uptime. """ import time -import evennia from datetime import datetime, timedelta from django.conf import settings from django.db.utils import OperationalError +import evennia from evennia.scripts.scripts import DefaultScript from evennia.server.models import ServerConfig from evennia.utils.create import create_script diff --git a/evennia/utils/tests/test_batchprocessors.py b/evennia/utils/tests/test_batchprocessors.py index 61374e671..a55a2949b 100644 --- a/evennia/utils/tests/test_batchprocessors.py +++ b/evennia/utils/tests/test_batchprocessors.py @@ -1,4 +1,4 @@ -"""Tests for batchprocessors """ +"""Tests for batchprocessors""" import codecs import textwrap diff --git a/evennia/utils/tests/test_dbserialize.py b/evennia/utils/tests/test_dbserialize.py index 61fac175b..2533afd99 100644 --- a/evennia/utils/tests/test_dbserialize.py +++ b/evennia/utils/tests/test_dbserialize.py @@ -3,13 +3,13 @@ Tests for dbserialize module """ from collections import defaultdict, deque +from enum import IntFlag, auto from django.test import TestCase from parameterized import parameterized from evennia.objects.objects import DefaultObject from evennia.utils import dbserialize -from enum import IntFlag, auto class TestDbSerialize(TestCase): @@ -24,6 +24,7 @@ class TestDbSerialize(TestCase): def test_intflag(self): class TestFlag(IntFlag): foo = auto() + self.obj.db.test = TestFlag.foo self.assertEqual(self.obj.db.test, TestFlag.foo) self.obj.save() diff --git a/evennia/utils/tests/test_evmenu.py b/evennia/utils/tests/test_evmenu.py index 9a83b440d..4f97d684f 100644 --- a/evennia/utils/tests/test_evmenu.py +++ b/evennia/utils/tests/test_evmenu.py @@ -29,6 +29,7 @@ from evennia.utils.test_resources import BaseEvenniaTest class TestEvMenu(TestCase): "Run the EvMenu testing." + menutree = {} # can also be the path to the menu tree startnode = "start" cmdset_mergetype = "Replace" diff --git a/evennia/utils/tests/test_text2html.py b/evennia/utils/tests/test_text2html.py index f8aec0c1d..b5e48b853 100644 --- a/evennia/utils/tests/test_text2html.py +++ b/evennia/utils/tests/test_text2html.py @@ -1,4 +1,4 @@ -"""Tests for text2html """ +"""Tests for text2html""" import unittest diff --git a/evennia/utils/tests/test_utils.py b/evennia/utils/tests/test_utils.py index 44540338f..0c55c4ad6 100644 --- a/evennia/utils/tests/test_utils.py +++ b/evennia/utils/tests/test_utils.py @@ -821,13 +821,13 @@ class TestAtSearchResult(TestCase): class MockObject: def __init__(self, key): self.key = key - self.aliases = '' + self.aliases = "" def get_display_name(self, looker, **kwargs): return self.key - + def get_extra_info(self, looker, **kwargs): - return '' + return "" def __repr__(self): return f"MockObject({self.key})" @@ -846,7 +846,7 @@ class TestAtSearchResult(TestCase): def test_basic_multimatch(self): """multiple matches with the same name should return a message with incrementing indices""" - matches = [ self.MockObject("obj1") for _ in range(3) ] + matches = [self.MockObject("obj1") for _ in range(3)] caller = mock.MagicMock() self.assertIsNone(utils.at_search_result(matches, caller, "obj1")) multimatch_msg = """\ @@ -858,7 +858,9 @@ More than one match for 'obj1' (please narrow target): def test_partial_multimatch(self): """multiple partial matches with different names should increment index by unique name""" - matches = [ self.MockObject("obj1") for _ in range(3) ] + [ self.MockObject("obj2") for _ in range(2) ] + matches = [self.MockObject("obj1") for _ in range(3)] + [ + self.MockObject("obj2") for _ in range(2) + ] caller = mock.MagicMock() self.assertIsNone(utils.at_search_result(matches, caller, "obj")) multimatch_msg = """\ diff --git a/evennia/utils/tests/test_validatorfuncs.py b/evennia/utils/tests/test_validatorfuncs.py index f691d9283..30a616086 100644 --- a/evennia/utils/tests/test_validatorfuncs.py +++ b/evennia/utils/tests/test_validatorfuncs.py @@ -1,4 +1,4 @@ -"""Tests for validatorfuncs """ +"""Tests for validatorfuncs""" import datetime diff --git a/evennia/utils/utils.py b/evennia/utils/utils.py index 5c6264fc5..12e54a22b 100644 --- a/evennia/utils/utils.py +++ b/evennia/utils/utils.py @@ -494,7 +494,7 @@ def compress_whitespace(text, max_linebreaks=1, max_spacing=2): # this allows the blank-line compression to eliminate them if needed text = re_empty.sub("\n\n", text) # replace groups of extra spaces with the maximum number of spaces - text = re.sub(fr"(?<=\S) {{{max_spacing},}}", " " * max_spacing, text) + text = re.sub(rf"(?<=\S) {{{max_spacing},}}", " " * max_spacing, text) # replace groups of extra newlines with the maximum number of newlines text = re.sub(f"\n{{{max_linebreaks},}}", "\n" * max_linebreaks, text) return text @@ -2401,10 +2401,8 @@ def at_search_result(matches, caller, query="", quiet=False, **kwargs): grouped_matches = defaultdict(list) for item in matches: group_key = ( - item.get_display_name(caller) - if hasattr(item, "get_display_name") - else query - ) + item.get_display_name(caller) if hasattr(item, "get_display_name") else query + ) grouped_matches[group_key].append(item) for key, match_list in grouped_matches.items(): @@ -2415,7 +2413,9 @@ def at_search_result(matches, caller, query="", quiet=False, **kwargs): # result is a typeclassed entity where `.aliases` is an AliasHandler. aliases = result.aliases.all(return_objs=True) # remove pluralization aliases - aliases = [alias.db_key for alias in aliases if alias.db_category != "plural_key"] + aliases = [ + alias.db_key for alias in aliases if alias.db_category != "plural_key" + ] else: # result is likely a Command, where `.aliases` is a list of strings. aliases = result.aliases diff --git a/evennia/web/admin/help.py b/evennia/web/admin/help.py index 9c64630fc..77dc5d5da 100644 --- a/evennia/web/admin/help.py +++ b/evennia/web/admin/help.py @@ -39,6 +39,7 @@ class HelpEntryForm(forms.ModelForm): @admin.register(HelpEntry) class HelpEntryAdmin(admin.ModelAdmin): "Sets up the admin manaager for help entries" + inlines = [HelpTagInline] list_display = ("id", "db_key", "db_help_category", "db_lock_storage", "db_date_created") list_display_links = ("id", "db_key")