diff --git a/__init__.py b/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/source/Coding/Changelog.md b/docs/source/Coding/Changelog.md index d3b02f135e..50319103bc 100644 --- a/docs/source/Coding/Changelog.md +++ b/docs/source/Coding/Changelog.md @@ -47,6 +47,8 @@ Up requirements to Django 4.0+, Twisted 22+, Python 3.9 or 3.10 user davewiththenicehat. Also add new doc string. - Add central `FuncParser` as a much more powerful replacement for the old `parse_inlinefunc` function. +- Attribute/NAttribute got a homogenous representation, using intefaces, both + `AttributeHandler` and `NAttributeHandler` has same api now. - Add `evennia/utils/verb_conjugation` for automatic verb conjugation (English only). This is useful for implementing actor-stance emoting for sending a string to different targets. - New version of Italian translation (rpolve) @@ -145,6 +147,12 @@ Up requirements to Django 4.0+, Twisted 22+, Python 3.9 or 3.10 - Homogenize manager search methods to return querysets and not lists. - Restructure unit tests to always honor default settings; make new parents in on location for easy use in game dir. +- The `Lunr` search engine used by help excludes common words; the settings-list + `LUNR_STOP_WORD_FILTER_EXCEPTIONS` can be extended to make sure common names are included. +- Add `.deserialize()` method to `_Saver*` structures to help completely + decouple structures from database without needing separate import. +- Add `run_in_main_thread` as a helper for those wanting to code server code + from a web view. ## Evennia 0.9.5 diff --git a/docs/source/Setup/Settings-Default.md b/docs/source/Setup/Settings-Default.md index 9fed95fd15..5567ce2052 100644 --- a/docs/source/Setup/Settings-Default.md +++ b/docs/source/Setup/Settings-Default.md @@ -320,7 +320,7 @@ ATTRIBUTE_STORED_MODEL_RENAME = [ (("typeclasses", "defaultplayer"), ("typeclasses", "defaultaccount")), ] # Default type of autofield (required by Django) -DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' +DEFAULT_AUTO_FIELD = "django.db.models.AutoField" ###################################################################### # Evennia webclient options @@ -335,7 +335,7 @@ WEBCLIENT_OPTIONS = { # Shows notifications of new messages as popup windows "notification_popup": False, # Plays a sound for notifications of new messages - "notification_sound": False + "notification_sound": False, } ###################################################################### @@ -506,7 +506,7 @@ COMMAND_DEFAULT_CLASS = "evennia.commands.default.muxcommand.MuxCommand" # input. By default the command-name should end with a space or / (since the # default commands uses MuxCommand and /switches). Note that the extra \n # is necessary for use with batchprocessor. -COMMAND_DEFAULT_ARG_REGEX = r'^[ /]|\n|$' +COMMAND_DEFAULT_ARG_REGEX = r"^[ /]|\n|$" # By default, Command.msg will only send data to the Session calling # the Command in the first place. If set, Command.msg will instead return # data to all Sessions connected to the Account/Character associated with @@ -669,6 +669,11 @@ FILE_HELP_ENTRY_MODULES = ["world.help_entries"] # if topics listed in help should be clickable # clickable links only work on clients that support MXP. HELP_CLICKABLE_TOPICS = True +# The Lunr search engine (used by help) excludes 'common' words from its search. +# This is not so good when those words are names of commands, like who or say; +# so we need to make sure to tell Lunr to not filter them out by adding them here +# (many are auto-added out of the box, this extends the list). +LUNR_STOP_WORD_FILTER_EXCEPTIONS = [] ###################################################################### # FuncParser @@ -680,9 +685,9 @@ HELP_CLICKABLE_TOPICS = True # This changes the start-symbol for the funcparser callable. Note that # this will make a lot of documentation invalid and there may also be # other unexpected side effects, so change with caution. -FUNCPARSER_START_CHAR = '$' +FUNCPARSER_START_CHAR = "$" # The symbol to use to escape Func -FUNCPARSER_ESCAPE_CHAR = '\\' +FUNCPARSER_ESCAPE_CHAR = "\\" # This is the global max nesting-level for nesting functions in # the funcparser. This protects against infinite loops. FUNCPARSER_MAX_NESTING = 20 @@ -695,8 +700,10 @@ FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED = False FUNCPARSER_OUTGOING_MESSAGES_MODULES = ["evennia.utils.funcparser", "server.conf.inlinefuncs"] # Prototype values are also parsed with FuncParser. These modules # define which $func callables are available to use in prototypes. -FUNCPARSER_PROTOTYPE_PARSING_MODULES = ["evennia.prototypes.protfuncs", - "server.conf.prototypefuncs"] +FUNCPARSER_PROTOTYPE_PARSING_MODULES = [ + "evennia.prototypes.protfuncs", + "server.conf.prototypefuncs", +] ###################################################################### # Global Scripts @@ -764,7 +771,7 @@ LOGIN_THROTTLE_TIMEOUT = 5 * 60 # since they can be exploitative. This list defines Account-level permissions # (and higher) that bypass this stripping. It is used as a fallback if a # specific list of perms are not given to the helper function. -INPUT_CLEANUP_BYPASS_PERMISSIONS = ['Builder'] +INPUT_CLEANUP_BYPASS_PERMISSIONS = ["Builder"] ###################################################################### @@ -917,8 +924,8 @@ USE_I18N = False # Where to find locales (no need to change this, most likely) LOCALE_PATHS = [os.path.join(EVENNIA_DIR, "locale/")] # How to display time stamps in e.g. the admin -SHORT_DATETIME_FORMAT = 'Y-m-d H:i:s.u' -DATETIME_FORMAT = 'Y-m-d H:i:s' # ISO 8601 but without T and timezone +SHORT_DATETIME_FORMAT = "Y-m-d H:i:s.u" +DATETIME_FORMAT = "Y-m-d H:i:s" # ISO 8601 but without T and timezone # This should be turned off unless you want to do tests with Django's # development webserver (normally Evennia runs its own server) SERVE_MEDIA = False @@ -984,16 +991,14 @@ TEMPLATES = [ # Django cache settings # https://docs.djangoproject.com/en/dev/topics/cache/#setting-up-the-cache CACHES = { - 'default': { - 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', + "default": { + "BACKEND": "django.core.cache.backends.locmem.LocMemCache", + }, + "throttle": { + "BACKEND": "django.core.cache.backends.locmem.LocMemCache", + "TIMEOUT": 60 * 5, + "OPTIONS": {"MAX_ENTRIES": 2000}, }, - 'throttle': { - 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', - 'TIMEOUT': 60 * 5, - 'OPTIONS': { - 'MAX_ENTRIES': 2000 - } - } } # MiddleWare are semi-transparent extensions to Django's functionality. # see http://www.djangoproject.com/documentation/middleware/ for a more detailed @@ -1058,8 +1063,14 @@ AUTH_PASSWORD_VALIDATORS = [ # Username validation plugins AUTH_USERNAME_VALIDATORS = [ {"NAME": "django.contrib.auth.validators.ASCIIUsernameValidator"}, - {"NAME": "django.core.validators.MinLengthValidator", "OPTIONS": {"limit_value": 3},}, - {"NAME": "django.core.validators.MaxLengthValidator", "OPTIONS": {"limit_value": 30},}, + { + "NAME": "django.core.validators.MinLengthValidator", + "OPTIONS": {"limit_value": 3}, + }, + { + "NAME": "django.core.validators.MaxLengthValidator", + "OPTIONS": {"limit_value": 30}, + }, {"NAME": "evennia.server.validators.EvenniaUsernameAvailabilityValidator"}, ] @@ -1078,7 +1089,9 @@ REST_FRAMEWORK = { "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination", "PAGE_SIZE": 25, # require logged in users to call API so that access checks can work on them - "DEFAULT_PERMISSION_CLASSES": ["rest_framework.permissions.IsAuthenticated",], + "DEFAULT_PERMISSION_CLASSES": [ + "rest_framework.permissions.IsAuthenticated", + ], # These are the different ways people can authenticate for API requests - via # session or with user/password. Other ways are possible, such as via tokens # or oauth, but require additional dependencies.