Apply black on code

This commit is contained in:
Griatch 2025-04-26 14:07:38 +02:00
parent 04ce4f6c5e
commit 0779ec82b6
70 changed files with 184 additions and 85 deletions

View file

@ -16,13 +16,14 @@ import time
import typing import typing
from random import getrandbits from random import getrandbits
import evennia
from django.conf import settings from django.conf import settings
from django.contrib.auth import authenticate, password_validation from django.contrib.auth import authenticate, password_validation
from django.core.exceptions import ImproperlyConfigured, ValidationError from django.core.exceptions import ImproperlyConfigured, ValidationError
from django.utils import timezone from django.utils import timezone
from django.utils.module_loading import import_string from django.utils.module_loading import import_string
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
import evennia
from evennia.accounts.manager import AccountManager from evennia.accounts.manager import AccountManager
from evennia.accounts.models import AccountDB from evennia.accounts.models import AccountDB
from evennia.commands.cmdsethandler import CmdSetHandler 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.typeclasses.models import TypeclassBase
from evennia.utils import class_from_module, create, logger from evennia.utils import class_from_module, create, logger
from evennia.utils.optionhandler import OptionHandler 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") __all__ = ("DefaultAccount", "DefaultGuest")

View file

@ -594,7 +594,9 @@ class DiscordBot(Bot):
if not channel.connect(self): if not channel.connect(self):
logger.log_warn(f"{self} could not connect to Evennia channel {channel}.") logger.log_warn(f"{self} could not connect to Evennia channel {channel}.")
if not channel.access(self, "send"): 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 # these will be made available as properties on the protocol factory
configdict = {"uid": self.dbid} configdict = {"uid": self.dbid}

View file

@ -261,6 +261,7 @@ def _progressive_cmd_run(cmd, generator, response=None):
class NoCmdSets(Exception): class NoCmdSets(Exception):
"No cmdsets found. Critical error." "No cmdsets found. Critical error."
pass pass

View file

@ -12,6 +12,7 @@ import re
from django.conf import settings from django.conf import settings
from django.urls import reverse from django.urls import reverse
from django.utils.text import slugify from django.utils.text import slugify
from evennia.locks.lockhandler import LockHandler from evennia.locks.lockhandler import LockHandler
from evennia.utils.ansi import ANSIString from evennia.utils.ansi import ANSIString
from evennia.utils.evtable import EvTable from evennia.utils.evtable import EvTable

View file

@ -22,8 +22,9 @@ method. Otherwise all text will be returned to all connected sessions.
import time import time
from codecs import lookup as codecs_lookup from codecs import lookup as codecs_lookup
import evennia
from django.conf import settings from django.conf import settings
import evennia
from evennia.utils import create, logger, search, utils from evennia.utils import create, logger, search, utils
COMMAND_DEFAULT_CLASS = utils.class_from_module(settings.COMMAND_DEFAULT_CLASS) COMMAND_DEFAULT_CLASS = utils.class_from_module(settings.COMMAND_DEFAULT_CLASS)

View file

@ -5,10 +5,11 @@ Building and world design commands
import re import re
import typing import typing
import evennia
from django.conf import settings from django.conf import settings
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.db.models import Max, Min, Q from django.db.models import Max, Min, Q
import evennia
from evennia import InterruptCommand from evennia import InterruptCommand
from evennia.commands.cmdhandler import generate_cmdset_providers, get_and_merge_cmdsets from evennia.commands.cmdhandler import generate_cmdset_providers, get_and_merge_cmdsets
from evennia.locks.lockhandler import LockException from evennia.locks.lockhandler import LockException

View file

@ -5,6 +5,7 @@ General Character commands usually available to all characters
import re import re
from django.conf import settings from django.conf import settings
from evennia.objects.objects import DefaultObject from evennia.objects.objects import DefaultObject
from evennia.typeclasses.attributes import NickTemplateInvalid from evennia.typeclasses.attributes import NickTemplateInvalid
from evennia.utils import utils from evennia.utils import utils

View file

@ -13,6 +13,7 @@ from dataclasses import dataclass
from itertools import chain from itertools import chain
from django.conf import settings from django.conf import settings
from evennia.help.filehelp import FILE_HELP_ENTRIES from evennia.help.filehelp import FILE_HELP_ENTRIES
from evennia.help.models import HelpEntry from evennia.help.models import HelpEntry
from evennia.help.utils import help_search_with_index, parse_entry_for_subcategories 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 import create, evmore
from evennia.utils.ansi import ANSIString from evennia.utils.ansi import ANSIString
from evennia.utils.eveditor import EvEditor 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 CMD_IGNORE_PREFIXES = settings.CMD_IGNORE_PREFIXES
COMMAND_DEFAULT_CLASS = class_from_module(settings.COMMAND_DEFAULT_CLASS) COMMAND_DEFAULT_CLASS = class_from_module(settings.COMMAND_DEFAULT_CLASS)

View file

@ -7,15 +7,16 @@ System commands
import code import code
import datetime import datetime
import os import os
import subprocess
import sys import sys
import time import time
import traceback import traceback
import django import django
import evennia
import subprocess
import twisted import twisted
from django.conf import settings from django.conf import settings
import evennia
from evennia.accounts.models import AccountDB from evennia.accounts.models import AccountDB
from evennia.scripts.taskhandler import TaskHandlerTask from evennia.scripts.taskhandler import TaskHandlerTask
from evennia.utils import gametime, logger, search, utils from evennia.utils import gametime, logger, search, utils

View file

@ -14,27 +14,39 @@ main test suite started with
import datetime import datetime
from unittest.mock import MagicMock, Mock, patch from unittest.mock import MagicMock, Mock, patch
import evennia
from anything import Anything from anything import Anything
from django.conf import settings from django.conf import settings
from django.test import override_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 import evennia
from evennia.objects.models import ObjectDB
from evennia.utils.search import search_object
from evennia.commands import cmdparser from evennia.commands import cmdparser
from evennia.commands.cmdset import CmdSet from evennia.commands.cmdset import CmdSet
from evennia.commands.command import Command, InterruptCommand 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 help as help_module
from evennia.commands.default import syscommands, system, unloggedin from evennia.commands.default import syscommands, system, unloggedin
from evennia.commands.default.cmdset_character import CharacterCmdSet from evennia.commands.default.cmdset_character import CharacterCmdSet
from evennia.commands.default.muxcommand import MuxCommand 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.prototypes import prototypes as protlib
from evennia.utils import create, gametime, utils from evennia.utils import create, gametime, utils
from evennia.utils.search import search_object
from evennia.utils.test_resources import BaseEvenniaCommandTest # noqa from evennia.utils.test_resources import BaseEvenniaCommandTest # noqa
from parameterized import parameterized
from twisted.internet import task
# ------------------------------------------------------------ # ------------------------------------------------------------
# Command testing # Command testing

View file

@ -4,6 +4,7 @@ Unit testing for the Command system itself.
""" """
from django.test import override_settings from django.test import override_settings
from evennia.commands import cmdparser from evennia.commands import cmdparser
from evennia.commands.cmdset import CmdSet from evennia.commands.cmdset import CmdSet
from evennia.commands.command import Command from evennia.commands.command import Command
@ -990,9 +991,10 @@ class TestOptionTransferReplace(TestCase):
import sys import sys
from evennia.commands import cmdhandler
from twisted.trial.unittest import TestCase as TwistedTestCase from twisted.trial.unittest import TestCase as TwistedTestCase
from evennia.commands import cmdhandler
def _mockdelay(time, func, *args, **kwargs): def _mockdelay(time, func, *args, **kwargs):
return func(*args, **kwargs) return func(*args, **kwargs)

View file

@ -9,9 +9,9 @@ from django.contrib.contenttypes.models import ContentType
from django.urls import reverse from django.urls import reverse
from django.utils.text import slugify from django.utils.text import slugify
from evennia.objects.objects import DefaultObject
from evennia.comms.managers import ChannelManager from evennia.comms.managers import ChannelManager
from evennia.comms.models import ChannelDB from evennia.comms.models import ChannelDB
from evennia.objects.objects import DefaultObject
from evennia.typeclasses.models import TypeclassBase from evennia.typeclasses.models import TypeclassBase
from evennia.utils import create, logger from evennia.utils import create, logger
from evennia.utils.utils import inherits_from, make_iter from evennia.utils.utils import inherits_from, make_iter

View file

@ -184,6 +184,7 @@ class Msg(SharedMemoryModel):
class Meta(object): class Meta(object):
"Define Django meta options" "Define Django meta options"
verbose_name = "Msg" verbose_name = "Msg"
@lazy_property @lazy_property
@ -712,6 +713,7 @@ class ChannelDB(TypedObject):
class Meta: class Meta:
"Define Django meta options" "Define Django meta options"
verbose_name = "Channel" verbose_name = "Channel"
verbose_name_plural = "Channels" verbose_name_plural = "Channels"

View file

@ -1,7 +1,7 @@
from django.test import SimpleTestCase from django.test import SimpleTestCase
from evennia.comms.comms import DefaultChannel
from evennia.commands.default.comms import CmdChannel from evennia.commands.default.comms import CmdChannel
from evennia.comms.comms import DefaultChannel
from evennia.utils.create import create_message from evennia.utils.create import create_message
from evennia.utils.test_resources import BaseEvenniaTest from evennia.utils.test_resources import BaseEvenniaTest

View file

@ -1,4 +1,4 @@
"""Tests for text2bbcode """ """Tests for text2bbcode"""
import mock import mock
from django.test import TestCase from django.test import TestCase

View file

@ -65,6 +65,7 @@ class GodotWebSocketClient(webclient.WebSocketClient):
def start_plugin_services(portal): def start_plugin_services(portal):
class GodotWebsocket(WebSocketServerFactory): class GodotWebsocket(WebSocketServerFactory):
"Only here for better naming in logs" "Only here for better naming in logs"
pass pass
factory = GodotWebsocket() factory = GodotWebsocket()

View file

@ -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.callbackhandler import CallbackHandler
from evennia.contrib.base_systems.ingame_python.utils import ( from evennia.contrib.base_systems.ingame_python.utils import (
phrase_event, phrase_event,
register_events, register_events,
time_event, time_event,
) )
from evennia.objects.objects import (
DefaultCharacter,
DefaultExit,
DefaultObject,
DefaultRoom,
)
from evennia.utils.utils import inherits_from, lazy_property from evennia.utils.utils import inherits_from, lazy_property
# Character help # Character help

View file

@ -7,12 +7,15 @@ These functions are to be used by developers to customize events and callbacks.
from django.conf import settings from django.conf import settings
from evennia.scripts.models import ScriptDB from evennia.contrib.base_systems.custom_gametime import (
from evennia.utils import logger UNITS,
from evennia.contrib.base_systems.custom_gametime import UNITS, gametime_to_realtime gametime_to_realtime,
)
from evennia.contrib.base_systems.custom_gametime import ( from evennia.contrib.base_systems.custom_gametime import (
real_seconds_until as custom_rsu, 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.create import create_script
from evennia.utils.gametime import real_seconds_until as standard_rsu from evennia.utils.gametime import real_seconds_until as standard_rsu
from evennia.utils.utils import class_from_module from evennia.utils.utils import class_from_module

View file

@ -32,6 +32,7 @@ The contrib can be further configured through two settings, `INGAME_REPORT_TYPES
""" """
from django.conf import settings from django.conf import settings
from evennia import CmdSet from evennia import CmdSet
from evennia.commands.default.muxcommand import MuxCommand from evennia.commands.default.muxcommand import MuxCommand
from evennia.comms.models import Msg from evennia.comms.models import Msg

View file

@ -1,6 +1,7 @@
from unittest.mock import Mock, patch, MagicMock from unittest.mock import MagicMock, Mock, patch
from evennia.utils import create
from evennia.comms.models import TempMsg from evennia.comms.models import TempMsg
from evennia.utils import create
from evennia.utils.test_resources import EvenniaCommandTest from evennia.utils.test_resources import EvenniaCommandTest
from . import menu, reports from . import menu, reports

View file

@ -232,6 +232,7 @@ class MenuLoginEvMenu(EvMenu):
class UnloggedinCmdSet(CmdSet): class UnloggedinCmdSet(CmdSet):
"Cmdset for the unloggedin state" "Cmdset for the unloggedin state"
key = "DefaultUnloggedin" key = "DefaultUnloggedin"
priority = 0 priority = 0

View file

@ -29,8 +29,9 @@ Admin/development commands
import re import re
import evennia
from django.conf import settings from django.conf import settings
import evennia
from evennia import default_cmds, syscmdkeys from evennia import default_cmds, syscmdkeys
from evennia.commands.cmdset import CmdSet from evennia.commands.cmdset import CmdSet
from evennia.commands.command import Command, InterruptCommand from evennia.commands.command import Command, InterruptCommand

View file

@ -85,7 +85,9 @@ class TestClothingCmd(BaseEvenniaCommandTest):
) )
# Test remove command. # Test remove command.
self.call(clothing.CmdRemove(), "", "Usage: remove <worn clothing object>", caller=self.wearer) self.call(
clothing.CmdRemove(), "", "Usage: remove <worn clothing object>", caller=self.wearer
)
self.call( self.call(
clothing.CmdRemove(), clothing.CmdRemove(),
"hat", "hat",

View file

@ -41,6 +41,7 @@ _RE_KEYS = re.compile(r"([\w\s]+)(?:\+*?)", re.U + re.I)
class DescValidateError(ValueError): class DescValidateError(ValueError):
"Used for tracebacks from desc systems" "Used for tracebacks from desc systems"
pass pass

View file

@ -1,7 +1,7 @@
from evennia import CmdSet from evennia import CmdSet
from evennia.commands.default.muxcommand import MuxCommand
from evennia.utils import list_to_string from evennia.utils import list_to_string
from evennia.utils.search import search_object_by_tag from evennia.utils.search import search_object_by_tag
from evennia.commands.default.muxcommand import MuxCommand
SHARED_TAG_PREFIX = "shared" SHARED_TAG_PREFIX = "shared"

View file

@ -33,7 +33,7 @@ class TestIngameMap(BaseEvenniaCommandTest):
create_object( create_object(
exits.Exit, exits.Exit,
key="shopfront", key="shopfront",
aliases=["w","west"], aliases=["w", "west"],
location=self.east_room, location=self.east_room,
destination=self.west_room, destination=self.west_room,
) )

View file

@ -9,9 +9,10 @@ Unit test module for Trait classes.
from copy import copy from copy import copy
from anything import Something from anything import Something
from mock import MagicMock, patch
from evennia.objects.objects import DefaultCharacter from evennia.objects.objects import DefaultCharacter
from evennia.utils.test_resources import BaseEvenniaTestCase, EvenniaTest from evennia.utils.test_resources import BaseEvenniaTestCase, EvenniaTest
from mock import MagicMock, patch
from . import traits from . import traits

View file

@ -456,9 +456,15 @@ from functools import total_ordering
from time import time from time import time
from django.conf import settings from django.conf import settings
from evennia.utils import logger from evennia.utils import logger
from evennia.utils.dbserialize import _SaverDict 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. # Available Trait classes.
# This way the user can easily supply their own. Each # This way the user can easily supply their own. Each

View file

@ -123,6 +123,7 @@ class CmdTalk(default_cmds.MuxCommand):
class TalkingCmdSet(CmdSet): class TalkingCmdSet(CmdSet):
"Stores the talk command." "Stores the talk command."
key = "talkingcmdset" key = "talkingcmdset"
def at_cmdset_creation(self): def at_cmdset_creation(self):

View file

@ -109,6 +109,7 @@ class HelpEntry(SharedMemoryModel):
class Meta: class Meta:
"Define Django meta options" "Define Django meta options"
verbose_name = "Help Entry" verbose_name = "Help Entry"
verbose_name_plural = "Help Entries" verbose_name_plural = "Help Entries"

View file

@ -5,6 +5,7 @@ command test-suite).
""" """
from unittest import mock from unittest import mock
from parameterized import parameterized from parameterized import parameterized
from evennia.help import filehelp from evennia.help import filehelp

View file

@ -11,7 +11,6 @@ import re
from django.conf import settings from django.conf import settings
from lunr.stemmer import stemmer from lunr.stemmer import stemmer
_RE_HELP_SUBTOPICS_START = re.compile(r"^\s*?#\s*?subtopics\s*?$", re.I + re.M) _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_SPLIT = re.compile(r"^\s*?(\#{2,6}\s*?\w+?[a-z0-9 \-\?!,\.]*?)$", re.M + re.I)
_RE_HELP_SUBTOPIC_PARSE = re.compile(r"^(?P<nesting>\#{2,6})\s*?(?P<name>.*?)$", re.I + re.M) _RE_HELP_SUBTOPIC_PARSE = re.compile(r"^(?P<nesting>\#{2,6})\s*?(?P<name>.*?)$", re.I + re.M)
@ -80,12 +79,10 @@ class LunrSearch:
before twisted's logging has been set up before twisted's logging has been set up
""" """
# Lunr-related imports # Lunr-related imports
from lunr import get_default_builder from lunr import get_default_builder, lunr, stop_word_filter
from lunr import lunr
from lunr import stop_word_filter
from lunr.exceptions import QueryParseError from lunr.exceptions import QueryParseError
from lunr.stemmer import stemmer
from lunr.pipeline import Pipeline from lunr.pipeline import Pipeline
from lunr.stemmer import stemmer
# Store imported modules as instance attributes # Store imported modules as instance attributes
self.get_default_builder = get_default_builder self.get_default_builder = get_default_builder

View file

@ -322,7 +322,7 @@ class ObjectDBManager(TypedObjectManager):
) )
# convert search term to partial-match regex # 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 # do the fuzzy search and return whatever it matches
return ( return (

View file

@ -20,6 +20,7 @@ from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.core.validators import validate_comma_separated_integer_list from django.core.validators import validate_comma_separated_integer_list
from django.db import models from django.db import models
from evennia.objects.manager import ObjectDBManager from evennia.objects.manager import ObjectDBManager
from evennia.typeclasses.models import TypedObject from evennia.typeclasses.models import TypedObject
from evennia.utils import logger from evennia.utils import logger

View file

@ -10,10 +10,11 @@ import time
import typing import typing
from collections import defaultdict from collections import defaultdict
import evennia
import inflect import inflect
from django.conf import settings from django.conf import settings
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
import evennia
from evennia.commands import cmdset from evennia.commands import cmdset
from evennia.commands.cmdsethandler import CmdSetHandler from evennia.commands.cmdsethandler import CmdSetHandler
from evennia.objects.manager import ObjectManager from evennia.objects.manager import ObjectManager

View file

@ -1,7 +1,12 @@
from unittest import skip from unittest import skip
from evennia.objects.objects import DefaultCharacter, DefaultExit, DefaultObject, DefaultRoom
from evennia.objects.models import ObjectDB from evennia.objects.models import ObjectDB
from evennia.objects.objects import (
DefaultCharacter,
DefaultExit,
DefaultObject,
DefaultRoom,
)
from evennia.typeclasses.attributes import AttributeProperty from evennia.typeclasses.attributes import AttributeProperty
from evennia.typeclasses.tags import ( from evennia.typeclasses.tags import (
AliasProperty, AliasProperty,

View file

@ -12,6 +12,7 @@ from django.conf import settings
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.db.models import Q from django.db.models import Q
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from evennia.locks.lockhandler import check_lockstring, validate_lockstring from evennia.locks.lockhandler import check_lockstring, validate_lockstring
from evennia.objects.models import ObjectDB from evennia.objects.models import ObjectDB
from evennia.scripts.scripts import DefaultScript from evennia.scripts.scripts import DefaultScript

View file

@ -126,6 +126,7 @@ class ScriptDB(TypedObject):
class Meta(object): class Meta(object):
"Define Django meta options" "Define Django meta options"
verbose_name = "Script" verbose_name = "Script"
# #

View file

@ -7,6 +7,7 @@ added to all game objects. You access it through the property
""" """
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from evennia.scripts.models import ScriptDB from evennia.scripts.models import ScriptDB
from evennia.utils import create, logger from evennia.utils import create, logger

View file

@ -6,12 +6,13 @@ ability to run timers.
""" """
from django.utils.translation import gettext as _ 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.manager import ScriptManager
from evennia.scripts.models import ScriptDB from evennia.scripts.models import ScriptDB
from evennia.typeclasses.models import TypeclassBase from evennia.typeclasses.models import TypeclassBase
from evennia.utils import create, logger from evennia.utils import create, logger
from twisted.internet.defer import Deferred, maybeDeferred
from twisted.internet.task import LoopingCall
__all__ = ["DefaultScript", "DoNothing", "Store"] __all__ = ["DefaultScript", "DoNothing", "Store"]

View file

@ -5,13 +5,14 @@ Module containing the task handler for Evennia deferred tasks, persistent or not
from datetime import datetime, timedelta from datetime import datetime, timedelta
from pickle import PickleError 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 import reactor
from twisted.internet.defer import CancelledError as DefCancelledError from twisted.internet.defer import CancelledError as DefCancelledError
from twisted.internet.task import deferLater 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 TASK_HANDLER = None

View file

@ -6,6 +6,8 @@ Unit tests for the scripts package
from collections import defaultdict from collections import defaultdict
from unittest import TestCase, mock from unittest import TestCase, mock
from parameterized import parameterized
from evennia import DefaultScript from evennia import DefaultScript
from evennia.objects.objects import DefaultObject from evennia.objects.objects import DefaultObject
from evennia.scripts.manager import ScriptDBManager 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.create import create_script
from evennia.utils.dbserialize import dbserialize from evennia.utils.dbserialize import dbserialize
from evennia.utils.test_resources import BaseEvenniaTest, EvenniaTest from evennia.utils.test_resources import BaseEvenniaTest, EvenniaTest
from parameterized import parameterized
class TestScript(BaseEvenniaTest): class TestScript(BaseEvenniaTest):

View file

@ -69,12 +69,13 @@ call the handler's `save()` and `restore()` methods when the server reboots.
import inspect import inspect
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from twisted.internet.defer import inlineCallbacks
from evennia.scripts.scripts import ExtendedLoopingCall from evennia.scripts.scripts import ExtendedLoopingCall
from evennia.server.models import ServerConfig from evennia.server.models import ServerConfig
from evennia.utils import inherits_from, variable_from_module from evennia.utils import inherits_from, variable_from_module
from evennia.utils.dbserialize import dbserialize, dbunserialize, pack_dbobj from evennia.utils.dbserialize import dbserialize, dbunserialize, pack_dbobj
from evennia.utils.logger import log_err, log_trace from evennia.utils.logger import log_err, log_trace
from twisted.internet.defer import inlineCallbacks
_GA = object.__getattribute__ _GA = object.__getattribute__
_SA = object.__setattr__ _SA = object.__setattr__

View file

@ -24,6 +24,7 @@ import importlib
from codecs import lookup as codecs_lookup from codecs import lookup as codecs_lookup
from django.conf import settings from django.conf import settings
from evennia.accounts.models import AccountDB from evennia.accounts.models import AccountDB
from evennia.commands.cmdhandler import cmdhandler from evennia.commands.cmdhandler import cmdhandler
from evennia.utils.logger import log_err from evennia.utils.logger import log_err

View file

@ -110,6 +110,7 @@ class ServerConfig(WeakSharedMemoryModel):
class Meta: class Meta:
"Define Django meta options" "Define Django meta options"
verbose_name = "Server Config value" verbose_name = "Server Config value"
verbose_name_plural = "Server Config values" verbose_name_plural = "Server Config values"

View file

@ -12,6 +12,7 @@ active players and so on.
""" """
import weakref import weakref
from django.conf import settings from django.conf import settings
from evennia.utils import utils from evennia.utils import utils

View file

@ -25,7 +25,7 @@ URL_SUB = re.compile(r"\|lu(.*?)\|lt(.*?)\|le", re.DOTALL)
# MXP Telnet option # MXP Telnet option
MXP = bytes([91]) # b"\x5b" MXP = bytes([91]) # b"\x5b"
MXP_TEMPSECURE = "\x1B[4z" MXP_TEMPSECURE = "\x1b[4z"
MXP_SEND = MXP_TEMPSECURE + '<SEND HREF="\\1">' + "\\2" + MXP_TEMPSECURE + "</SEND>" MXP_SEND = MXP_TEMPSECURE + '<SEND HREF="\\1">' + "\\2" + MXP_TEMPSECURE + "</SEND>"
MXP_URL = MXP_TEMPSECURE + '<A HREF="\\1">' + "\\2" + MXP_TEMPSECURE + "</A>" MXP_URL = MXP_TEMPSECURE + '<A HREF="\\1">' + "\\2" + MXP_TEMPSECURE + "</A>"

View file

@ -10,8 +10,8 @@ client and update it when the size changes
""" """
from codecs import encode as codecs_encode
import weakref import weakref
from codecs import encode as codecs_encode
from django.conf import settings from django.conf import settings
@ -86,4 +86,6 @@ class Naws:
width = options[0] + options[1] width = options[0] + options[1]
self.protocol().protocol_flags["SCREENWIDTH"][0] = int(codecs_encode(width, "hex"), 16) self.protocol().protocol_flags["SCREENWIDTH"][0] = int(codecs_encode(width, "hex"), 16)
height = options[2] + options[3] 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
)

View file

@ -223,6 +223,7 @@ class EvenniaPortalService(MultiService):
class Websocket(WebSocketServerFactory): class Websocket(WebSocketServerFactory):
"Only here for better naming in logs" "Only here for better naming in logs"
pass pass
factory = Websocket() factory = Websocket()

View file

@ -41,9 +41,9 @@ class SuppressGA:
self.protocol = weakref.ref(protocol) self.protocol = weakref.ref(protocol)
self.protocol().protocol_flags["NOGOAHEAD"] = True self.protocol().protocol_flags["NOGOAHEAD"] = True
self.protocol().protocol_flags["NOPROMPTGOAHEAD"] = ( self.protocol().protocol_flags[
True # Used to send a GA after a prompt line only, set in TTYPE (per client) "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 ... # tell the client that we prefer to suppress GA ...
self.protocol().will(SUPPRESS_GA).addCallbacks(self.will_suppress_ga, self.wont_suppress_ga) self.protocol().will(SUPPRESS_GA).addCallbacks(self.will_suppress_ga, self.wont_suppress_ga)

View file

@ -8,19 +8,20 @@ import time
import traceback import traceback
import django import django
import evennia
from django.conf import settings from django.conf import settings
from django.db import connection from django.db import connection
from django.db.utils import OperationalError from django.db.utils import OperationalError
from django.utils.translation import gettext as _ 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 import internet
from twisted.application.service import MultiService from twisted.application.service import MultiService
from twisted.internet import defer, reactor from twisted.internet import defer, reactor
from twisted.internet.defer import Deferred from twisted.internet.defer import Deferred
from twisted.internet.task import LoopingCall 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__ _SA = object.__setattr__

View file

@ -17,6 +17,7 @@ from copy import copy
from django.conf import settings from django.conf import settings
from django.db import models from django.db import models
from django.utils.encoding import smart_str from django.utils.encoding import smart_str
from evennia.locks.lockhandler import LockHandler from evennia.locks.lockhandler import LockHandler
from evennia.utils.dbserialize import from_pickle, to_pickle from evennia.utils.dbserialize import from_pickle, to_pickle
from evennia.utils.idmapper.models import SharedMemoryModel from evennia.utils.idmapper.models import SharedMemoryModel
@ -62,7 +63,7 @@ class IAttribute:
return LockHandler(self) return LockHandler(self)
key = property(lambda self: self.db_key) 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) category = property(lambda self: self.db_category)
model = property(lambda self: self.db_model) model = property(lambda self: self.db_model)
attrtype = property(lambda self: self.db_attrtype) attrtype = property(lambda self: self.db_attrtype)
@ -411,6 +412,7 @@ class Attribute(IAttribute, SharedMemoryModel):
class Meta: class Meta:
"Define Django meta options" "Define Django meta options"
verbose_name = "Attribute" verbose_name = "Attribute"
# Wrapper properties to easily set database fields. These are # Wrapper properties to easily set database fields. These are

View file

@ -14,6 +14,7 @@ from collections import defaultdict
from django.conf import settings from django.conf import settings
from django.db import models from django.db import models
from evennia.locks.lockfuncs import perm as perm_lockfunc from evennia.locks.lockfuncs import perm as perm_lockfunc
from evennia.utils.utils import make_iter, to_str from evennia.utils.utils import make_iter, to_str

View file

@ -67,6 +67,7 @@ import re
from collections import OrderedDict from collections import OrderedDict
from django.conf import settings from django.conf import settings
from evennia.utils import logger, utils from evennia.utils import logger, utils
from evennia.utils.hex_colors import HexColors from evennia.utils.hex_colors import HexColors
from evennia.utils.utils import to_str from evennia.utils.utils import to_str

View file

@ -14,6 +14,7 @@ from pickle import dumps
from django.conf import settings from django.conf import settings
from django.db.utils import OperationalError, ProgrammingError from django.db.utils import OperationalError, ProgrammingError
from evennia.scripts.models import ScriptDB from evennia.scripts.models import ScriptDB
from evennia.utils import logger from evennia.utils import logger
from evennia.utils.utils import callables_from_module, class_from_module from evennia.utils.utils import callables_from_module, class_from_module

View file

@ -28,6 +28,8 @@ try:
except ImportError: except ImportError:
from pickle import dumps, loads from pickle import dumps, loads
from enum import IntFlag
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.utils.safestring import SafeString from django.utils.safestring import SafeString
@ -35,7 +37,6 @@ from django.utils.safestring import SafeString
import evennia import evennia
from evennia.utils import logger from evennia.utils import logger
from evennia.utils.utils import is_iter, to_bytes, uses_database 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") __all__ = ("to_pickle", "from_pickle", "do_pickle", "do_unpickle", "dbserialize", "dbunserialize")

View file

@ -1421,14 +1421,20 @@ def list_node(option_generator, select=None, pagesize=10):
options.append( options.append(
{ {
"key": (_("|wp|Wrevious page|n"), "p"), "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: if page_index < npages - 1:
options.append( options.append(
{ {
"key": (_("|wn|Wext page|n"), "n"), "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},
),
} }
) )

View file

@ -79,7 +79,7 @@ class CmdMore(Command):
Implement the command Implement the command
""" """
more = self.caller.ndb._more 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 more = self.caller.account.ndb._more
if not more: if not more:
self.caller.msg("Error in loading the pager. Contact an admin.") 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. Exit pager and re-fire the failed command.
""" """
more = self.caller.ndb._more 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 more = self.caller.account.ndb._more
if not more: if not more:
self.caller.msg("Error in exiting the pager. Contact an admin.") self.caller.msg("Error in exiting the pager. Contact an admin.")

View file

@ -8,12 +8,12 @@ total runtime of the server and the current uptime.
""" """
import time import time
import evennia
from datetime import datetime, timedelta from datetime import datetime, timedelta
from django.conf import settings from django.conf import settings
from django.db.utils import OperationalError from django.db.utils import OperationalError
import evennia
from evennia.scripts.scripts import DefaultScript from evennia.scripts.scripts import DefaultScript
from evennia.server.models import ServerConfig from evennia.server.models import ServerConfig
from evennia.utils.create import create_script from evennia.utils.create import create_script

View file

@ -1,4 +1,4 @@
"""Tests for batchprocessors """ """Tests for batchprocessors"""
import codecs import codecs
import textwrap import textwrap

View file

@ -3,13 +3,13 @@ Tests for dbserialize module
""" """
from collections import defaultdict, deque from collections import defaultdict, deque
from enum import IntFlag, auto
from django.test import TestCase from django.test import TestCase
from parameterized import parameterized from parameterized import parameterized
from evennia.objects.objects import DefaultObject from evennia.objects.objects import DefaultObject
from evennia.utils import dbserialize from evennia.utils import dbserialize
from enum import IntFlag, auto
class TestDbSerialize(TestCase): class TestDbSerialize(TestCase):
@ -24,6 +24,7 @@ class TestDbSerialize(TestCase):
def test_intflag(self): def test_intflag(self):
class TestFlag(IntFlag): class TestFlag(IntFlag):
foo = auto() foo = auto()
self.obj.db.test = TestFlag.foo self.obj.db.test = TestFlag.foo
self.assertEqual(self.obj.db.test, TestFlag.foo) self.assertEqual(self.obj.db.test, TestFlag.foo)
self.obj.save() self.obj.save()

View file

@ -29,6 +29,7 @@ from evennia.utils.test_resources import BaseEvenniaTest
class TestEvMenu(TestCase): class TestEvMenu(TestCase):
"Run the EvMenu testing." "Run the EvMenu testing."
menutree = {} # can also be the path to the menu tree menutree = {} # can also be the path to the menu tree
startnode = "start" startnode = "start"
cmdset_mergetype = "Replace" cmdset_mergetype = "Replace"

View file

@ -1,4 +1,4 @@
"""Tests for text2html """ """Tests for text2html"""
import unittest import unittest

View file

@ -821,13 +821,13 @@ class TestAtSearchResult(TestCase):
class MockObject: class MockObject:
def __init__(self, key): def __init__(self, key):
self.key = key self.key = key
self.aliases = '' self.aliases = ""
def get_display_name(self, looker, **kwargs): def get_display_name(self, looker, **kwargs):
return self.key return self.key
def get_extra_info(self, looker, **kwargs): def get_extra_info(self, looker, **kwargs):
return '' return ""
def __repr__(self): def __repr__(self):
return f"MockObject({self.key})" return f"MockObject({self.key})"
@ -846,7 +846,7 @@ class TestAtSearchResult(TestCase):
def test_basic_multimatch(self): def test_basic_multimatch(self):
"""multiple matches with the same name should return a message with incrementing indices""" """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() caller = mock.MagicMock()
self.assertIsNone(utils.at_search_result(matches, caller, "obj1")) self.assertIsNone(utils.at_search_result(matches, caller, "obj1"))
multimatch_msg = """\ multimatch_msg = """\
@ -858,7 +858,9 @@ More than one match for 'obj1' (please narrow target):
def test_partial_multimatch(self): def test_partial_multimatch(self):
"""multiple partial matches with different names should increment index by unique name""" """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() caller = mock.MagicMock()
self.assertIsNone(utils.at_search_result(matches, caller, "obj")) self.assertIsNone(utils.at_search_result(matches, caller, "obj"))
multimatch_msg = """\ multimatch_msg = """\

View file

@ -1,4 +1,4 @@
"""Tests for validatorfuncs """ """Tests for validatorfuncs"""
import datetime import datetime

View file

@ -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 # this allows the blank-line compression to eliminate them if needed
text = re_empty.sub("\n\n", text) text = re_empty.sub("\n\n", text)
# replace groups of extra spaces with the maximum number of spaces # 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 # replace groups of extra newlines with the maximum number of newlines
text = re.sub(f"\n{{{max_linebreaks},}}", "\n" * max_linebreaks, text) text = re.sub(f"\n{{{max_linebreaks},}}", "\n" * max_linebreaks, text)
return text return text
@ -2401,10 +2401,8 @@ def at_search_result(matches, caller, query="", quiet=False, **kwargs):
grouped_matches = defaultdict(list) grouped_matches = defaultdict(list)
for item in matches: for item in matches:
group_key = ( group_key = (
item.get_display_name(caller) item.get_display_name(caller) if hasattr(item, "get_display_name") else query
if hasattr(item, "get_display_name") )
else query
)
grouped_matches[group_key].append(item) grouped_matches[group_key].append(item)
for key, match_list in grouped_matches.items(): 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. # result is a typeclassed entity where `.aliases` is an AliasHandler.
aliases = result.aliases.all(return_objs=True) aliases = result.aliases.all(return_objs=True)
# remove pluralization aliases # 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: else:
# result is likely a Command, where `.aliases` is a list of strings. # result is likely a Command, where `.aliases` is a list of strings.
aliases = result.aliases aliases = result.aliases

View file

@ -39,6 +39,7 @@ class HelpEntryForm(forms.ModelForm):
@admin.register(HelpEntry) @admin.register(HelpEntry)
class HelpEntryAdmin(admin.ModelAdmin): class HelpEntryAdmin(admin.ModelAdmin):
"Sets up the admin manaager for help entries" "Sets up the admin manaager for help entries"
inlines = [HelpTagInline] inlines = [HelpTagInline]
list_display = ("id", "db_key", "db_help_category", "db_lock_storage", "db_date_created") list_display = ("id", "db_key", "db_help_category", "db_lock_storage", "db_date_created")
list_display_links = ("id", "db_key") list_display_links = ("id", "db_key")