From e5d07603ca59d9d0b273a4b48b3baa90d46743f5 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 25 Feb 2024 19:03:11 +0100 Subject: [PATCH] Run black. Resolve circular import issues in components contrib. --- evennia/__init__.py | 7 +++- evennia/accounts/accounts.py | 11 ++++- evennia/commands/cmdhandler.py | 2 +- evennia/commands/default/building.py | 2 +- evennia/commands/default/system.py | 3 +- evennia/commands/default/tests.py | 27 ++++++++----- evennia/commands/default/unloggedin.py | 3 +- evennia/comms/comms.py | 2 +- .../building_menu/building_menu.py | 1 + .../base_systems/components/__init__.py | 18 +++------ .../base_systems/components/component.py | 7 +++- .../base_systems/components/dbfield.py | 8 ++-- .../contrib/base_systems/components/holder.py | 22 +++++----- .../base_systems/components/listing.py | 4 +- .../contrib/base_systems/components/tests.py | 40 ++++++++++--------- .../base_systems/email_login/email_login.py | 1 + .../godotwebsocket/test_webclient.py | 18 ++++++--- .../base_systems/menu_login/menu_login.py | 7 +++- evennia/contrib/grid/wilderness/wilderness.py | 4 +- evennia/contrib/grid/xyzgrid/launchcmd.py | 3 +- evennia/contrib/grid/xyzgrid/tests.py | 3 +- evennia/contrib/grid/xyzgrid/xyzroom.py | 1 + evennia/contrib/rpg/llm/tests.py | 3 +- evennia/contrib/rpg/rpsystem/rpsystem.py | 8 +++- evennia/contrib/rpg/rpsystem/tests.py | 1 + .../contrib/tutorials/evadventure/chargen.py | 1 + .../contrib/tutorials/tutorial_world/tests.py | 7 ++-- evennia/objects/manager.py | 1 + evennia/objects/objects.py | 3 +- evennia/scripts/taskhandler.py | 7 ++-- evennia/scripts/tests.py | 3 +- evennia/server/initial_setup.py | 3 +- evennia/server/inputfuncs.py | 6 +-- evennia/server/portal/portalsessionhandler.py | 5 ++- evennia/server/portal/ssh.py | 7 ++-- evennia/server/portal/webclient_ajax.py | 7 ++-- evennia/server/serversession.py | 7 +++- evennia/server/service.py | 7 ++-- evennia/server/sessionhandler.py | 11 ++++- evennia/server/tests/test_misc.py | 1 + evennia/server/tests/test_server.py | 3 +- evennia/server/validators.py | 1 - evennia/typeclasses/tags.py | 1 + evennia/utils/evmenu.py | 10 +++-- evennia/utils/evmore.py | 3 +- evennia/utils/test_resources.py | 14 +++++-- evennia/utils/tests/test_funcparser.py | 3 +- evennia/utils/utils.py | 5 ++- evennia/web/utils/middleware.py | 2 +- 49 files changed, 202 insertions(+), 122 deletions(-) diff --git a/evennia/__init__.py b/evennia/__init__.py index 3f4989cd5a..bf5eafa8c6 100644 --- a/evennia/__init__.py +++ b/evennia/__init__.py @@ -198,7 +198,12 @@ def _init(portal_mode=False): from .comms.models import ChannelDB, Msg from .locks import lockfuncs from .objects.models import ObjectDB - from .objects.objects import DefaultCharacter, DefaultExit, DefaultObject, DefaultRoom + from .objects.objects import ( + DefaultCharacter, + DefaultExit, + DefaultObject, + DefaultRoom, + ) from .prototypes.spawner import spawn from .scripts.models import ScriptDB from .scripts.monitorhandler import MONITOR_HANDLER diff --git a/evennia/accounts/accounts.py b/evennia/accounts/accounts.py index 0edc9d5ce8..3ac6ca513a 100644 --- a/evennia/accounts/accounts.py +++ b/evennia/accounts/accounts.py @@ -15,13 +15,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 @@ -40,7 +41,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/commands/cmdhandler.py b/evennia/commands/cmdhandler.py index 8946bc19d0..45605f758b 100644 --- a/evennia/commands/cmdhandler.py +++ b/evennia/commands/cmdhandler.py @@ -40,8 +40,8 @@ from twisted.internet import reactor from twisted.internet.defer import inlineCallbacks, returnValue from twisted.internet.task import deferLater -from evennia.commands.command import InterruptCommand from evennia.commands.cmdset import CmdSet +from evennia.commands.command import InterruptCommand from evennia.utils import logger, utils from evennia.utils.utils import string_suggestions diff --git a/evennia/commands/default/building.py b/evennia/commands/default/building.py index d1c7ba11b7..adadbd9219 100644 --- a/evennia/commands/default/building.py +++ b/evennia/commands/default/building.py @@ -10,7 +10,7 @@ from django.db.models import Max, Min, Q import evennia from evennia import InterruptCommand -from evennia.commands.cmdhandler import get_and_merge_cmdsets, generate_cmdset_providers +from evennia.commands.cmdhandler import generate_cmdset_providers, get_and_merge_cmdsets from evennia.locks.lockhandler import LockException from evennia.objects.models import ObjectDB from evennia.prototypes import menus as olc_menus diff --git a/evennia/commands/default/system.py b/evennia/commands/default/system.py index 90c8ebb1cb..8a1f39b027 100644 --- a/evennia/commands/default/system.py +++ b/evennia/commands/default/system.py @@ -13,9 +13,10 @@ import time import traceback import django -import evennia 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 7e8a6aa969..160d314458 100644 --- a/evennia/commands/default/tests.py +++ b/evennia/commands/default/tests.py @@ -14,10 +14,13 @@ 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 + +import evennia from evennia import ( DefaultCharacter, DefaultExit, @@ -29,7 +32,14 @@ from evennia import ( 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 @@ -38,8 +48,6 @@ from evennia.prototypes import prototypes as protlib from evennia.utils import create, gametime, utils from evennia.utils.test_resources import BaseEvenniaCommandTest # noqa from evennia.utils.test_resources import BaseEvenniaTest, EvenniaCommandTest -from parameterized import parameterized -from twisted.internet import task # ------------------------------------------------------------ # Command testing @@ -1645,8 +1653,9 @@ class TestBuilding(BaseEvenniaCommandTest): self.call( building.CmdTeleport(), "Obj = Room2", - "Obj(#{}) is leaving Room(#{}), heading for Room2(#{}).|Teleported Obj -> Room2." - .format(oid, rid, rid2), + "Obj(#{}) is leaving Room(#{}), heading for Room2(#{}).|Teleported Obj -> Room2.".format( + oid, rid, rid2 + ), ) self.call(building.CmdTeleport(), "NotFound = Room", "Could not find 'NotFound'.") self.call( @@ -1768,8 +1777,7 @@ class TestBuilding(BaseEvenniaCommandTest): self.call( building.CmdSpawn(), "{'prototype_key':'GOBLIN', 'typeclass':'evennia.objects.objects.DefaultCharacter', " - "'key':'goblin', 'location':'%s'}" - % spawnLoc.dbref, + "'key':'goblin', 'location':'%s'}" % spawnLoc.dbref, "Spawned goblin", ) goblin = get_object(self, "goblin") @@ -1817,8 +1825,7 @@ class TestBuilding(BaseEvenniaCommandTest): self.call( building.CmdSpawn(), "/noloc {'prototype_parent':'TESTBALL', 'key': 'Ball', 'prototype_key': 'foo'," - " 'location':'%s'}" - % spawnLoc.dbref, + " 'location':'%s'}" % spawnLoc.dbref, "Spawned Ball", ) ball = get_object(self, "Ball") diff --git a/evennia/commands/default/unloggedin.py b/evennia/commands/default/unloggedin.py index 4071cc027f..75fff10ccd 100644 --- a/evennia/commands/default/unloggedin.py +++ b/evennia/commands/default/unloggedin.py @@ -6,8 +6,9 @@ import datetime import re from codecs import lookup as codecs_lookup -import evennia from django.conf import settings + +import evennia from evennia.commands.cmdhandler import CMD_LOGINSTART from evennia.comms.models import ChannelDB from evennia.utils import class_from_module, create, gametime, logger, utils diff --git a/evennia/comms/comms.py b/evennia/comms/comms.py index 9bbe014cc7..ea2a512b5c 100644 --- a/evennia/comms/comms.py +++ b/evennia/comms/comms.py @@ -13,7 +13,7 @@ from evennia.comms.managers import ChannelManager from evennia.comms.models import ChannelDB from evennia.typeclasses.models import TypeclassBase from evennia.utils import create, logger -from evennia.utils.utils import make_iter, inherits_from +from evennia.utils.utils import inherits_from, make_iter class DefaultChannel(ChannelDB, metaclass=TypeclassBase): diff --git a/evennia/contrib/base_systems/building_menu/building_menu.py b/evennia/contrib/base_systems/building_menu/building_menu.py index a71382e0be..e8bfd291e6 100644 --- a/evennia/contrib/base_systems/building_menu/building_menu.py +++ b/evennia/contrib/base_systems/building_menu/building_menu.py @@ -126,6 +126,7 @@ from inspect import getfullargspec from textwrap import dedent from django.conf import settings + from evennia import CmdSet, Command from evennia.commands import cmdhandler from evennia.utils.ansi import strip_ansi diff --git a/evennia/contrib/base_systems/components/__init__.py b/evennia/contrib/base_systems/components/__init__.py index eb927ad6d5..21867e7528 100644 --- a/evennia/contrib/base_systems/components/__init__.py +++ b/evennia/contrib/base_systems/components/__init__.py @@ -7,16 +7,8 @@ This helps writing isolated code and reusing it over multiple objects. See the docs for more information. """ -from evennia.contrib.base_systems.components import exceptions -from evennia.contrib.base_systems.components.listing import COMPONENT_LISTING, get_component_class -from evennia.contrib.base_systems.components.component import Component -from evennia.contrib.base_systems.components.dbfield import ( - DBField, - NDBField, - TagField -) - -from evennia.contrib.base_systems.components.holder import ( - ComponentHolderMixin, - ComponentProperty, -) +from . import exceptions # noqa +from .component import Component # noqa +from .dbfield import DBField, NDBField, TagField # noqa +from .holder import ComponentHolderMixin, ComponentProperty # noqa +from .listing import COMPONENT_LISTING, get_component_class # noqa diff --git a/evennia/contrib/base_systems/components/component.py b/evennia/contrib/base_systems/components/component.py index ec07e54e94..48c7dfa738 100644 --- a/evennia/contrib/base_systems/components/component.py +++ b/evennia/contrib/base_systems/components/component.py @@ -5,7 +5,9 @@ This file contains the base class to inherit for creating new components. """ from evennia.commands.cmdset import CmdSet -from evennia.contrib.base_systems.components import COMPONENT_LISTING, exceptions + +from . import exceptions +from .listing import COMPONENT_LISTING class BaseComponent(type): @@ -13,6 +15,7 @@ class BaseComponent(type): This is the metaclass for components, responsible for registering components to the listing. """ + @classmethod def __new__(cls, *args): """ @@ -45,7 +48,7 @@ class Component(metaclass=BaseComponent): Each Component must supply the name, it is used as a slot name but also part of the attribute key. """ - __slots__ = ('host',) + __slots__ = ("host",) name = "" slot = None diff --git a/evennia/contrib/base_systems/components/dbfield.py b/evennia/contrib/base_systems/components/dbfield.py index eae4285c17..c5e0eb2eae 100644 --- a/evennia/contrib/base_systems/components/dbfield.py +++ b/evennia/contrib/base_systems/components/dbfield.py @@ -8,7 +8,7 @@ import typing from evennia.typeclasses.attributes import AttributeProperty, NAttributeProperty if typing.TYPE_CHECKING: - from evennia.contrib.base_systems.components import Component + from .components import Component class DBField(AttributeProperty): @@ -21,7 +21,7 @@ class DBField(AttributeProperty): def __init__(self, default=None, autocreate=False, **kwargs): super().__init__(default=default, autocreate=autocreate, **kwargs) - def __set_name__(self, owner: 'Component', name): + def __set_name__(self, owner: "Component", name): """ Called when descriptor is first assigned to the class. @@ -61,7 +61,7 @@ class NDBField(NAttributeProperty): It uses NAttributeProperty under the hood but prefixes the key with the component name. """ - def __set_name__(self, owner: 'Component', name): + def __set_name__(self, owner: "Component", name): """ Called when descriptor is first assigned to the class. @@ -108,7 +108,7 @@ class TagField: self._default = default self._enforce_single = enforce_single - def __set_name__(self, owner: 'Component', name): + def __set_name__(self, owner: "Component", name): """ Called when TagField is first assigned to the class. It is called with the component class and the name of the field. diff --git a/evennia/contrib/base_systems/components/holder.py b/evennia/contrib/base_systems/components/holder.py index bdaf22b21b..38797650f0 100644 --- a/evennia/contrib/base_systems/components/holder.py +++ b/evennia/contrib/base_systems/components/holder.py @@ -4,8 +4,9 @@ Components - ChrisLR 2022 This file contains the classes that allow a typeclass to use components. """ -from evennia.contrib.base_systems import components -from evennia.contrib.base_systems.components import signals, exceptions, get_component_class +from . import exceptions, signals +from .component import Component +from .listing import get_component_class class ComponentProperty: @@ -62,7 +63,7 @@ class ComponentHandler: self.host = host self._loaded_components = {} - def add(self, component: components.Component): + def add(self, component: Component): """ Method to add a Component to a host. It caches the loaded component and appends its name to the host's component name list. @@ -92,11 +93,11 @@ class ComponentHandler: name (str): The name of the component class to add. """ - component_class = components.get_component_class(name) + component_class = get_component_class(name) component_instance = component_class.default_create(self.host) self.add(component_instance) - def remove(self, component: components.Component): + def remove(self, component: Component): """ Method to remove a component instance from a host. It removes the component from the cache and listing. @@ -109,9 +110,7 @@ class ComponentHandler: name = component.name slot_name = component.get_component_slot() if not self.has(slot_name): - message = ( - f"Cannot remove {name} from {self.host.name} as it is not registered." - ) + message = f"Cannot remove {name} from {self.host.name} as it is not registered." raise exceptions.ComponentIsNotRegistered(message) for field in component.get_fields(): @@ -142,7 +141,7 @@ class ComponentHandler: self.remove(instance) - def get(self, name: str) -> components.Component | None: + def get(self, name: str) -> Component | None: return self._loaded_components.get(name) def has(self, name: str) -> bool: @@ -167,7 +166,7 @@ class ComponentHandler: return for component_name in component_names: - component = components.get_component_class(component_name) + component = get_component_class(component_name) if component: component_instance = component.load(self.host) self._set_component(component_instance) @@ -213,6 +212,7 @@ class ComponentHolderMixin: All registered components are initialized on the typeclass. They will be of None value if not present in the class components or runtime components. """ + def at_init(self): """ Method that initializes the ComponentHandler. @@ -241,7 +241,7 @@ class ComponentHolderMixin: setattr(self, "_signal_handler", signals.SignalsHandler(self)) class_components = self._get_class_components() for component_name, values in class_components: - component_class = components.get_component_class(component_name) + component_class = get_component_class(component_name) component = component_class.create(self, **values) self.components.add(component) diff --git a/evennia/contrib/base_systems/components/listing.py b/evennia/contrib/base_systems/components/listing.py index 11647e9425..af4ef86aea 100644 --- a/evennia/contrib/base_systems/components/listing.py +++ b/evennia/contrib/base_systems/components/listing.py @@ -1,4 +1,4 @@ -from evennia.contrib.base_systems.components import exceptions +from . import exceptions COMPONENT_LISTING = {} @@ -13,7 +13,7 @@ def get_component_class(name): if component_class is None: message = ( f"Component with name {name} has not been found. " - f"Make sure it has been imported before being used." + "Make sure it has been imported before being used." ) raise exceptions.ComponentDoesNotExist(message) diff --git a/evennia/contrib/base_systems/components/tests.py b/evennia/contrib/base_systems/components/tests.py index 6fd2664d2b..43a1c5c666 100644 --- a/evennia/contrib/base_systems/components/tests.py +++ b/evennia/contrib/base_systems/components/tests.py @@ -1,18 +1,13 @@ -from evennia.contrib.base_systems.components import ( - Component, - DBField, - TagField, - signals, -) -from evennia.contrib.base_systems.components.holder import ( - ComponentHolderMixin, - ComponentProperty, -) -from evennia.contrib.base_systems.components.signals import as_listener from evennia.objects.objects import DefaultCharacter from evennia.utils import create from evennia.utils.test_resources import BaseEvenniaTest, EvenniaTest +from . import signals +from .component import Component +from .dbfield import DBField, TagField +from .holder import ComponentHolderMixin, ComponentProperty +from .signals import as_listener + class ComponentTestA(Component): name = "test_a" @@ -22,12 +17,12 @@ class ComponentTestA(Component): class ShadowedComponentTestA(ComponentTestA): name = "shadowed_test_a" - slot = 'ic_a' + slot = "ic_a" class InheritedComponentTestA(ComponentTestA): name = "inherited_test_a" - slot = 'ic_a' + slot = "ic_a" my_other_int = DBField(default=2) @@ -68,7 +63,7 @@ class ShadowedCharacterMixin: class CharacterMixinWithComponents: ic_a = ComponentProperty("inherited_test_a", my_other_int=33) - test_d = ComponentProperty('test_d') + test_d = ComponentProperty("test_d") class CharacterWithComponents( @@ -247,9 +242,13 @@ class TestComponents(EvenniaTest): test_b = self.char1.components.get("test_b") test_b.default_single_tag = "second value" - self.assertTrue(self.char1.tags.has(key="second value", category="test_b::default_single_tag")) + self.assertTrue( + self.char1.tags.has(key="second value", category="test_b::default_single_tag") + ) self.assertTrue(test_b.default_single_tag == "second value") - self.assertFalse(self.char1.tags.has(key="first_value", category="test_b::default_single_tag")) + self.assertFalse( + self.char1.tags.has(key="first_value", category="test_b::default_single_tag") + ) def test_component_tags_support_multiple_values_by_default(self): test_b = self.char1.components.get("test_b") @@ -257,9 +256,12 @@ class TestComponents(EvenniaTest): test_b.multiple_tags = "second value" test_b.multiple_tags = "third value" - self.assertTrue(all( - val in test_b.multiple_tags for val in ("first value", "second value", "third value") - )) + self.assertTrue( + all( + val in test_b.multiple_tags + for val in ("first value", "second value", "third value") + ) + ) self.assertTrue(self.char1.tags.has(key="first value", category="test_b::multiple_tags")) self.assertTrue(self.char1.tags.has(key="second value", category="test_b::multiple_tags")) self.assertTrue(self.char1.tags.has(key="third value", category="test_b::multiple_tags")) diff --git a/evennia/contrib/base_systems/email_login/email_login.py b/evennia/contrib/base_systems/email_login/email_login.py index ed2d94e8d4..9fd7e78c0c 100644 --- a/evennia/contrib/base_systems/email_login/email_login.py +++ b/evennia/contrib/base_systems/email_login/email_login.py @@ -33,6 +33,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE. """ from django.conf import settings + from evennia.accounts.models import AccountDB from evennia.commands.cmdhandler import CMD_LOGINSTART from evennia.commands.cmdset import CmdSet diff --git a/evennia/contrib/base_systems/godotwebsocket/test_webclient.py b/evennia/contrib/base_systems/godotwebsocket/test_webclient.py index 94ebf4b125..fc92f9c55b 100644 --- a/evennia/contrib/base_systems/godotwebsocket/test_webclient.py +++ b/evennia/contrib/base_systems/godotwebsocket/test_webclient.py @@ -14,6 +14,7 @@ except ImportError: import json import mock +from django.test import override_settings from mock import MagicMock, Mock from twisted.internet.base import DelayedCall from twisted.test import proto_helpers @@ -22,11 +23,12 @@ import evennia from evennia.server.portal.portalsessionhandler import PortalSessionHandler from evennia.server.portal.service import EvenniaPortalService from evennia.utils.test_resources import BaseEvenniaTest -from django.test import override_settings class TestGodotWebSocketClient(BaseEvenniaTest): - @override_settings(GODOT_CLIENT_WEBSOCKET_CLIENT_INTERFACE="127.0.0.1", GODOT_CLIENT_WEBSOCKET_PORT='8988') + @override_settings( + GODOT_CLIENT_WEBSOCKET_CLIENT_INTERFACE="127.0.0.1", GODOT_CLIENT_WEBSOCKET_PORT="8988" + ) def setUp(self): super().setUp() self.portal = EvenniaPortalService() @@ -34,7 +36,9 @@ class TestGodotWebSocketClient(BaseEvenniaTest): self.amp_server_factory = AMPServerFactory(self.portal) self.amp_server = self.amp_server_factory.buildProtocol("127.0.0.1") start_plugin_services(self.portal) - godot_ws_service = next(srv for srv in self.portal.services if srv.name.startswith('GodotWebSocket')) + godot_ws_service = next( + srv for srv in self.portal.services if srv.name.startswith("GodotWebSocket") + ) factory = godot_ws_service.args[1] self.proto = factory.protocol() @@ -61,11 +65,15 @@ class TestGodotWebSocketClient(BaseEvenniaTest): self.proto.sessionhandler.data_in.assert_called_with(self.proto, logged_in=[[], {}]) msg = json.dumps(["text", ("|rRed Text|n",), {}]).encode() self.proto.onMessage(msg, isBinary=False) - self.proto.sessionhandler.data_in.assert_called_with(self.proto, text=[["|rRed Text|n"], {}]) + self.proto.sessionhandler.data_in.assert_called_with( + self.proto, text=[["|rRed Text|n"], {}] + ) @mock.patch("evennia.server.portal.portalsessionhandler.reactor", new=MagicMock()) def test_data_out(self): self.proto.onOpen() self.proto.sendLine = MagicMock() self.proto.sessionhandler.data_out(self.proto, text=[["|rRed Text|n"], {}]) - self.proto.sendLine.assert_called_with(json.dumps(["text", ["[color=#ff0000]Red Text[/color]"], {}])) + self.proto.sendLine.assert_called_with( + json.dumps(["text", ["[color=#ff0000]Red Text[/color]"], {}]) + ) diff --git a/evennia/contrib/base_systems/menu_login/menu_login.py b/evennia/contrib/base_systems/menu_login/menu_login.py index b34db8683a..e2e57a5359 100644 --- a/evennia/contrib/base_systems/menu_login/menu_login.py +++ b/evennia/contrib/base_systems/menu_login/menu_login.py @@ -21,9 +21,14 @@ called automatically when a new user connects. """ from django.conf import settings + from evennia import CmdSet, Command, syscmdkeys from evennia.utils.evmenu import EvMenu -from evennia.utils.utils import callables_from_module, class_from_module, random_string_from_module +from evennia.utils.utils import ( + callables_from_module, + class_from_module, + random_string_from_module, +) _CONNECTION_SCREEN_MODULE = settings.CONNECTION_SCREEN_MODULE _GUEST_ENABLED = settings.GUEST_ENABLED diff --git a/evennia/contrib/grid/wilderness/wilderness.py b/evennia/contrib/grid/wilderness/wilderness.py index 57a06f2ddd..bbda032f96 100644 --- a/evennia/contrib/grid/wilderness/wilderness.py +++ b/evennia/contrib/grid/wilderness/wilderness.py @@ -333,13 +333,13 @@ class WildernessScript(DefaultScript): # we will need to do special handling if the old room is a different location # check that here, so we only need to do it once - if self == getattr(old_room, 'wilderness', None): + if self == getattr(old_room, "wilderness", None): # it is our own room from_outside = False else: # it's from another wilderness, or no wilderness from_outside = True - + # check if we have a room at the new coordinates already room = self.db.rooms.get(new_coordinates) diff --git a/evennia/contrib/grid/xyzgrid/launchcmd.py b/evennia/contrib/grid/xyzgrid/launchcmd.py index 24c72e953f..ddcd751729 100644 --- a/evennia/contrib/grid/xyzgrid/launchcmd.py +++ b/evennia/contrib/grid/xyzgrid/launchcmd.py @@ -18,8 +18,9 @@ Use `evennia xyzgrid help` for usage help. from os.path import join as pathjoin -import evennia from django.conf import settings + +import evennia from evennia.contrib.grid.xyzgrid.xyzgrid import get_xyzgrid from evennia.utils import ansi diff --git a/evennia/contrib/grid/xyzgrid/tests.py b/evennia/contrib/grid/xyzgrid/tests.py index 4e8b229bdb..28e06cfe73 100644 --- a/evennia/contrib/grid/xyzgrid/tests.py +++ b/evennia/contrib/grid/xyzgrid/tests.py @@ -7,9 +7,10 @@ from random import randint from unittest import mock from django.test import TestCase -from evennia.utils.test_resources import BaseEvenniaCommandTest, BaseEvenniaTest from parameterized import parameterized +from evennia.utils.test_resources import BaseEvenniaCommandTest, BaseEvenniaTest + from . import commands, xymap, xymap_legend, xyzgrid, xyzroom MAP1 = """ diff --git a/evennia/contrib/grid/xyzgrid/xyzroom.py b/evennia/contrib/grid/xyzgrid/xyzroom.py index 324de048e5..1d63a85a6f 100644 --- a/evennia/contrib/grid/xyzgrid/xyzroom.py +++ b/evennia/contrib/grid/xyzgrid/xyzroom.py @@ -9,6 +9,7 @@ used as stand-alone XYZ-coordinate-aware rooms. from django.conf import settings from django.db.models import Q + from evennia.objects.manager import ObjectManager from evennia.objects.objects import DefaultExit, DefaultRoom diff --git a/evennia/contrib/rpg/llm/tests.py b/evennia/contrib/rpg/llm/tests.py index 404c144086..f383e64e58 100644 --- a/evennia/contrib/rpg/llm/tests.py +++ b/evennia/contrib/rpg/llm/tests.py @@ -5,9 +5,10 @@ Unit tests for the LLM Client and npc. from anything import Something from django.test import override_settings +from mock import Mock, patch + from evennia.utils.create import create_object from evennia.utils.test_resources import BaseEvenniaTestCase -from mock import Mock, patch from .llm_npc import LLMNPC diff --git a/evennia/contrib/rpg/rpsystem/rpsystem.py b/evennia/contrib/rpg/rpsystem/rpsystem.py index b422fb06ab..6159c471d3 100644 --- a/evennia/contrib/rpg/rpsystem/rpsystem.py +++ b/evennia/contrib/rpg/rpsystem/rpsystem.py @@ -154,12 +154,18 @@ from string import punctuation import inflect from django.conf import settings + from evennia.commands.cmdset import CmdSet from evennia.commands.command import Command from evennia.objects.models import ObjectDB from evennia.objects.objects import DefaultCharacter, DefaultObject from evennia.utils import ansi, logger -from evennia.utils.utils import iter_to_str, lazy_property, make_iter, variable_from_module +from evennia.utils.utils import ( + iter_to_str, + lazy_property, + make_iter, + variable_from_module, +) _INFLECT = inflect.engine() diff --git a/evennia/contrib/rpg/rpsystem/tests.py b/evennia/contrib/rpg/rpsystem/tests.py index 773fd76d6e..202e244d13 100644 --- a/evennia/contrib/rpg/rpsystem/tests.py +++ b/evennia/contrib/rpg/rpsystem/tests.py @@ -5,6 +5,7 @@ Tests for RP system import time from anything import Anything + from evennia import DefaultObject, create_object, default_cmds from evennia.commands.default.tests import BaseEvenniaCommandTest from evennia.utils.test_resources import BaseEvenniaTest diff --git a/evennia/contrib/tutorials/evadventure/chargen.py b/evennia/contrib/tutorials/evadventure/chargen.py index 2b9e7a6a5a..f27012e4df 100644 --- a/evennia/contrib/tutorials/evadventure/chargen.py +++ b/evennia/contrib/tutorials/evadventure/chargen.py @@ -3,6 +3,7 @@ EvAdventure character generation. """ from django.conf import settings + from evennia.objects.models import ObjectDB from evennia.prototypes.spawner import spawn from evennia.utils.create import create_object diff --git a/evennia/contrib/tutorials/tutorial_world/tests.py b/evennia/contrib/tutorials/tutorial_world/tests.py index ffeee31a26..7f063f5a08 100644 --- a/evennia/contrib/tutorials/tutorial_world/tests.py +++ b/evennia/contrib/tutorials/tutorial_world/tests.py @@ -3,13 +3,14 @@ Test tutorial_world/mob """ -from evennia.commands.default.tests import BaseEvenniaCommandTest -from evennia.utils.create import create_object -from evennia.utils.test_resources import BaseEvenniaTest, mockdeferLater, mockdelay from mock import patch from twisted.internet.base import DelayedCall from twisted.trial.unittest import TestCase as TwistedTestCase +from evennia.commands.default.tests import BaseEvenniaCommandTest +from evennia.utils.create import create_object +from evennia.utils.test_resources import BaseEvenniaTest, mockdeferLater, mockdelay + from . import mob from . import objects as tutobjects from . import rooms as tutrooms diff --git a/evennia/objects/manager.py b/evennia/objects/manager.py index c3261427fa..43f8684d35 100644 --- a/evennia/objects/manager.py +++ b/evennia/objects/manager.py @@ -6,6 +6,7 @@ import re from django.conf import settings from django.db.models import Q from django.db.models.fields import exceptions + from evennia.server import signals from evennia.typeclasses.managers import TypeclassManager, TypedObjectManager from evennia.utils.utils import ( diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index b974f01ef4..72d09e597c 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -11,10 +11,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/scripts/taskhandler.py b/evennia/scripts/taskhandler.py index 92c097771c..b47a7f8166 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 5125b8ea5f..631a4c66e9 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/server/initial_setup.py b/evennia/server/initial_setup.py index 91bad349bd..e886718a5e 100644 --- a/evennia/server/initial_setup.py +++ b/evennia/server/initial_setup.py @@ -9,9 +9,10 @@ Everything starts at handle_setup() import time -import evennia from django.conf import settings from django.utils.translation import gettext as _ + +import evennia from evennia.accounts.models import AccountDB from evennia.server.models import ServerConfig from evennia.utils import create, logger diff --git a/evennia/server/inputfuncs.py b/evennia/server/inputfuncs.py index 8f8693a362..ee60643059 100644 --- a/evennia/server/inputfuncs.py +++ b/evennia/server/inputfuncs.py @@ -425,7 +425,7 @@ def _on_monitor_change(**kwargs): # the object as "db_value" with a separate "category" field. if hasattr(obj, "db_category") and obj.db_category != None: category = obj.db_category - fieldname = fieldname.replace("[{}]".format(obj.db_category), '') + fieldname = fieldname.replace("[{}]".format(obj.db_category), "") # the session may be None if the char quits and someone # else then edits the object @@ -435,9 +435,9 @@ def _on_monitor_change(**kwargs): outputfunc_name: { "name": name, **({"category": category} if category is not None else {}), - "value": _GA(obj, fieldname) - } + "value": _GA(obj, fieldname), } + } session.msg(**callsign) diff --git a/evennia/server/portal/portalsessionhandler.py b/evennia/server/portal/portalsessionhandler.py index 6bd6d7c783..8a5ed53ce2 100644 --- a/evennia/server/portal/portalsessionhandler.py +++ b/evennia/server/portal/portalsessionhandler.py @@ -7,14 +7,15 @@ Sessionhandler for portal sessions. import time from collections import deque, namedtuple -import evennia from django.conf import settings from django.utils.translation import gettext as _ +from twisted.internet import reactor + +import evennia from evennia.server.portal.amp import PCONN, PCONNSYNC, PDISCONN, PDISCONNALL from evennia.server.sessionhandler import SessionHandler from evennia.utils.logger import log_trace from evennia.utils.utils import class_from_module -from twisted.internet import reactor # module import _MOD_IMPORT = None diff --git a/evennia/server/portal/ssh.py b/evennia/server/portal/ssh.py index 41b2b320cc..046d5b0761 100644 --- a/evennia/server/portal/ssh.py +++ b/evennia/server/portal/ssh.py @@ -34,9 +34,6 @@ except ImportError: raise ImportError(_SSH_IMPORT_ERROR) from django.conf import settings -from evennia.accounts.models import AccountDB -from evennia.utils import ansi -from evennia.utils.utils import class_from_module, to_str from twisted.conch import interfaces as iconch from twisted.conch.insults import insults from twisted.conch.manhole import Manhole, recvline @@ -46,6 +43,10 @@ from twisted.conch.ssh.userauth import SSHUserAuthServer from twisted.internet import defer, protocol from twisted.python import components +from evennia.accounts.models import AccountDB +from evennia.utils import ansi +from evennia.utils.utils import class_from_module, to_str + _RE_N = re.compile(r"\|n$") _RE_SCREENREADER_REGEX = re.compile( r"%s" % settings.SCREENREADER_REGEX_STRIP, re.DOTALL + re.MULTILINE diff --git a/evennia/server/portal/webclient_ajax.py b/evennia/server/portal/webclient_ajax.py index 5a6e442295..b3fd54357f 100644 --- a/evennia/server/portal/webclient_ajax.py +++ b/evennia/server/portal/webclient_ajax.py @@ -24,13 +24,14 @@ import time from django.conf import settings from django.utils.functional import Promise +from twisted.internet.task import LoopingCall +from twisted.web import resource, server + from evennia.server import session from evennia.utils import utils from evennia.utils.ansi import parse_ansi from evennia.utils.text2html import parse_html from evennia.utils.utils import class_from_module, ip_from_request, to_bytes -from twisted.internet.task import LoopingCall -from twisted.web import resource, server _CLIENT_SESSIONS = utils.mod_import(settings.SESSION_ENGINE).SessionStore _RE_SCREENREADER_REGEX = re.compile( @@ -362,7 +363,7 @@ class AjaxWebClient(resource.Resource): sess.client = self sess.init_session("ajax/comet", remote_addr, self.sessionhandler) - sess.csessid = session_id+page_id + sess.csessid = session_id + page_id sess.browserstr = browserstr csession = _CLIENT_SESSIONS(session_key=session_id) uid = csession and csession.get("webclient_authenticated_uid", False) diff --git a/evennia/server/serversession.py b/evennia/server/serversession.py index 1bff150ea7..5177f30f5d 100644 --- a/evennia/server/serversession.py +++ b/evennia/server/serversession.py @@ -10,10 +10,15 @@ import time from django.conf import settings from django.utils import timezone + from evennia.commands.cmdsethandler import CmdSetHandler from evennia.comms.models import ChannelDB from evennia.scripts.monitorhandler import MONITOR_HANDLER -from evennia.typeclasses.attributes import AttributeHandler, DbHolder, InMemoryAttributeBackend +from evennia.typeclasses.attributes import ( + AttributeHandler, + DbHolder, + InMemoryAttributeBackend, +) from evennia.utils import logger from evennia.utils.utils import class_from_module, lazy_property, make_iter diff --git a/evennia/server/service.py b/evennia/server/service.py index d6143b46e6..bf4a14d598 100644 --- a/evennia/server/service.py +++ b/evennia/server/service.py @@ -7,19 +7,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/server/sessionhandler.py b/evennia/server/sessionhandler.py index 227ad90406..697e1aeb56 100644 --- a/evennia/server/sessionhandler.py +++ b/evennia/server/sessionhandler.py @@ -15,9 +15,10 @@ There are two similar but separate stores of sessions: import time from codecs import decode as codecs_decode -import evennia from django.conf import settings from django.utils.translation import gettext as _ + +import evennia from evennia.commands.cmdhandler import CMD_LOGINSTART from evennia.server.portal import amp from evennia.server.signals import ( @@ -27,7 +28,13 @@ from evennia.server.signals import ( SIGNAL_ACCOUNT_POST_LOGOUT, ) from evennia.utils.logger import log_trace -from evennia.utils.utils import callables_from_module, class_from_module, delay, is_iter, make_iter +from evennia.utils.utils import ( + callables_from_module, + class_from_module, + delay, + is_iter, + make_iter, +) _FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED = settings.FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED _BROADCAST_SERVER_RESTART_MESSAGES = settings.BROADCAST_SERVER_RESTART_MESSAGES diff --git a/evennia/server/tests/test_misc.py b/evennia/server/tests/test_misc.py index 7686187b53..29ffc9f43f 100644 --- a/evennia/server/tests/test_misc.py +++ b/evennia/server/tests/test_misc.py @@ -8,6 +8,7 @@ import unittest from django.test import TestCase from django.test.runner import DiscoverRunner + from evennia.server.throttle import Throttle from evennia.utils.test_resources import BaseEvenniaTest diff --git a/evennia/server/tests/test_server.py b/evennia/server/tests/test_server.py index 632e8e3854..f1625f7d9e 100644 --- a/evennia/server/tests/test_server.py +++ b/evennia/server/tests/test_server.py @@ -4,10 +4,11 @@ Test the main server component """ from unittest import TestCase -import evennia from django.test import override_settings from mock import DEFAULT, MagicMock, call, patch +import evennia + @patch("evennia.server.service.LoopingCall", new=MagicMock()) class TestServer(TestCase): diff --git a/evennia/server/validators.py b/evennia/server/validators.py index 842632406f..7c483575a9 100644 --- a/evennia/server/validators.py +++ b/evennia/server/validators.py @@ -38,4 +38,3 @@ class EvenniaUsernameAvailabilityValidator: raise ValidationError( _("Sorry, that username is already taken."), code="evennia_username_taken" ) - diff --git a/evennia/typeclasses/tags.py b/evennia/typeclasses/tags.py index 3e778656f4..a44ed99332 100644 --- a/evennia/typeclasses/tags.py +++ b/evennia/typeclasses/tags.py @@ -13,6 +13,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/evmenu.py b/evennia/utils/evmenu.py index 21a1059e3d..fc6e6e5ce4 100644 --- a/evennia/utils/evmenu.py +++ b/evennia/utils/evmenu.py @@ -286,13 +286,13 @@ from evennia.utils.evtable import EvColumn, EvTable from evennia.utils.utils import ( crop, dedent, + inherits_from, is_iter, m_len, make_iter, mod_import, pad, to_str, - inherits_from, ) # read from protocol NAWS later? @@ -1209,10 +1209,12 @@ class EvMenu: # check if the caller is using a screenreader screenreader_mode = False - if sessions := getattr(self.caller, 'sessions', None): - screenreader_mode = any(sess.protocol_flags.get("SCREENREADER") for sess in sessions.all()) + if sessions := getattr(self.caller, "sessions", None): + screenreader_mode = any( + sess.protocol_flags.get("SCREENREADER") for sess in sessions.all() + ) # the caller doesn't have a session; check it directly - elif hasattr(self.caller, 'protocol_flags'): + elif hasattr(self.caller, "protocol_flags"): screenreader_mode = self.caller.protocol_flags.get("SCREENREADER") ncols = 1 if screenreader_mode else _MAX_TEXT_WIDTH // table_width_max diff --git a/evennia/utils/evmore.py b/evennia/utils/evmore.py index 80c0ebe487..57192e2e90 100644 --- a/evennia/utils/evmore.py +++ b/evennia/utils/evmore.py @@ -36,11 +36,12 @@ the `caller.msg()` construct every time the page is updated. ---- """ -import evennia from django.conf import settings from django.core.paginator import Paginator from django.db.models.query import QuerySet from django.utils.translation import gettext as _ + +import evennia from evennia.commands import cmdhandler from evennia.commands.cmdset import CmdSet from evennia.commands.command import Command diff --git a/evennia/utils/test_resources.py b/evennia/utils/test_resources.py index dd53056e99..9dc8c6b7f5 100644 --- a/evennia/utils/test_resources.py +++ b/evennia/utils/test_resources.py @@ -26,21 +26,27 @@ import re import sys import types -import evennia from django.conf import settings from django.test import TestCase, override_settings +from mock import MagicMock, Mock, patch +from twisted.internet.defer import Deferred + +import evennia from evennia import settings_default from evennia.accounts.accounts import DefaultAccount from evennia.commands.command import InterruptCommand from evennia.commands.default.muxcommand import MuxCommand -from evennia.objects.objects import DefaultCharacter, DefaultExit, DefaultObject, DefaultRoom +from evennia.objects.objects import ( + DefaultCharacter, + DefaultExit, + DefaultObject, + DefaultRoom, +) from evennia.scripts.scripts import DefaultScript from evennia.server.serversession import ServerSession from evennia.utils import ansi, create from evennia.utils.idmapper.models import flush_cache from evennia.utils.utils import all_from_module, to_str -from mock import MagicMock, Mock, patch -from twisted.internet.defer import Deferred _RE_STRIP_EVMENU = re.compile(r"^\+|-+\+|\+-+|--+|\|(?:\s|$)", re.MULTILINE) diff --git a/evennia/utils/tests/test_funcparser.py b/evennia/utils/tests/test_funcparser.py index 33f005645e..7b13926ede 100644 --- a/evennia/utils/tests/test_funcparser.py +++ b/evennia/utils/tests/test_funcparser.py @@ -10,10 +10,11 @@ from ast import literal_eval from unittest.mock import MagicMock, patch from django.test import TestCase, override_settings -from evennia.utils import funcparser, test_resources from parameterized import parameterized from simpleeval import simple_eval +from evennia.utils import funcparser, test_resources + def _test_callable(*args, **kwargs): kwargs.pop("funcparser", None) diff --git a/evennia/utils/utils.py b/evennia/utils/utils.py index 03d1e98a55..afbc6f382f 100644 --- a/evennia/utils/utils.py +++ b/evennia/utils/utils.py @@ -28,7 +28,6 @@ from os.path import join as osjoin from string import punctuation from unicodedata import east_asian_width -import evennia from django.apps import apps from django.conf import settings from django.core.exceptions import ValidationError as DjangoValidationError @@ -36,12 +35,14 @@ from django.core.validators import validate_email as django_validate_email from django.utils import timezone from django.utils.html import strip_tags from django.utils.translation import gettext as _ -from evennia.utils import logger from simpleeval import simple_eval from twisted.internet import reactor, threads from twisted.internet.defer import returnValue # noqa - used as import target from twisted.internet.task import deferLater +import evennia +from evennia.utils import logger + _MULTIMATCH_TEMPLATE = settings.SEARCH_MULTIMATCH_TEMPLATE _EVENNIA_DIR = settings.EVENNIA_DIR _GAME_DIR = settings.GAME_DIR diff --git a/evennia/web/utils/middleware.py b/evennia/web/utils/middleware.py index b617a5eb31..154c27eb58 100644 --- a/evennia/web/utils/middleware.py +++ b/evennia/web/utils/middleware.py @@ -1,7 +1,7 @@ from django.contrib.auth import authenticate, login from evennia.accounts.models import AccountDB -from evennia.utils import logger, ip_from_request +from evennia.utils import ip_from_request, logger class OriginIpMiddleware: