Compare commits

...

10 commits

13 changed files with 115 additions and 64 deletions

View file

@ -44,8 +44,20 @@ def deploy():
os.system("git fetch") os.system("git fetch")
os.system("git checkout gh-pages") os.system("git checkout gh-pages")
proc = subprocess.Popen(
["git", "checkout gh-pages"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE,
shell=True,
)
if proc.returncode:
print("Could not checkout gh-pages branch.")
sys.exit(1)
else:
print("Checked out gh-pages branch.")
os.system("pwd") os.system("pwd")
os.system("ls")
names_to_skip = legacy_versions + ["build"] names_to_skip = legacy_versions + ["build"]

View file

@ -2,11 +2,55 @@
## Main branch ## Main branch
- Security dependency updates: Django >5.2.8 (<5.3), Django RestFramework 3.16
- [Feat][pull3599]: Make at_pre_cmd
- [Fix]: API /openapi/setattribute endpoints were both POST and PUT, causing schema
errors; now changed to PUT only. (Griatch)
- [Fix][pull3799]: Fix typo in `basic_tc.py` contrib for beginner tutorial (Tharic99) - [Fix][pull3799]: Fix typo in `basic_tc.py` contrib for beginner tutorial (Tharic99)
- [Fix][pull3806]: EvMore wouldn't pass Session to next cmd when exiting (gas-public-wooden-clean)
- [Fix][pull3809]: Admin page - Repair link to Account button (UserlandAlchemist)
- [Fix][pull3811]: Website login banner shows before login attempt (UserlandAlchemist)
- [Fix][pull3817]: `ingame_reports` i18n fix (peddn)
- [Fix][pull3818]: Update spawn hook to use `new_prototype` (InspectorCaracal)
- [Fix][pull3815]: Performance improvement in large cmdset mergers (blongden)
- [Fix][pull3831]: Performance optimization in ANSIString, performance boost for large colored
strings (count-infinity)
- [Fix][pull3832]: Fix typo in prototype causing homogenized locks to use
fallbacks incorrectly (count-infinity)
- [Fix][pull3834]: Fix so `$obj(#123)` inline function works in prototype spawning (count-infinity)
- [Fix][pull3836]: Correctly handling calling `create_object` with `key=None` (count-infinity)
- [Fix][pull3852]: Django 5.2+ was not properly detected. Fixing distutils being
removed in py3.12 for new installs (count-infinity)
- [Fix][pull3845]: Fix exponential ANSI markup explosions when slicing
ANSIString after reset (speeds up EvForm other string ops, fixes compatibility) (count-infinity)
- [Fix][pull3853]: Properly handle multimatch separations with native dashes, like
't-shirt-1' (count-infinity)
- [Doc][pull3801]: Move Evennia doc build system to latest Sphinx/myST
(PowershellNinja, also honorary mention to electroglyph)
- [Doc][pull3800]: Describe support for Telnet SSH in HAProxy documentation (holl0wstar) - [Doc][pull3800]: Describe support for Telnet SSH in HAProxy documentation (holl0wstar)
- [Doc][pull3825]: Update Portuguese translation (marado)
- [Doc][pull3826]: Fix broken links in README (marado)
- Docs: marado, Griatch, Hasna878, count-infinity
[pull3799]: https://github.com/evennia/evennia/issues/3799 [pull3799]: https://github.com/evennia/evennia/pull/3799
[pull3800]: https://github.com/evennia/evennia/issues/3800 [pull3800]: https://github.com/evennia/evennia/pull/3800
[pull3801]: https://github.com/evennia/evennia/pull/3801
[pull3806]: https://github.com/evennia/evennia/pull/3806
[pull3809]: https://github.com/evennia/evennia/pull/3809
[pull3811]: https://github.com/evennia/evennia/pull/3811
[pull3815]: https://github.com/evennia/evennia/pull/3815
[pull3817]: https://github.com/evennia/evennia/pull/3817
[pull3818]: https://github.com/evennia/evennia/pull/3818
[pull3825]: https://github.com/evennia/evennia/pull/3825
[pull3826]: https://github.com/evennia/evennia/pull/3826
[pull3831]: https://github.com/evennia/evennia/pull/3831
[pull3832]: https://github.com/evennia/evennia/pull/3832
[pull3834]: https://github.com/evennia/evennia/pull/3834
[pull3836]: https://github.com/evennia/evennia/pull/3836
[pull3599]: https://github.com/evennia/evennia/pull/3599
[pull3852]: https://github.com/evennia/evennia/pull/3852
[pull3853]: https://github.com/evennia/evennia/pull/3853
[pull3854]: https://github.com/evennia/evennia/pull/3853
## Evennia 5.0.1 ## Evennia 5.0.1
@ -31,10 +75,10 @@ This upgrade requires running `evennia migrate` on your existing database
- Feat (backwards incompatible): RUN MIGRATIONS (`evennia migrate`): Now requiring Django 5.1 (Griatch) - Feat (backwards incompatible): RUN MIGRATIONS (`evennia migrate`): Now requiring Django 5.1 (Griatch)
- Feat (backwards incompatible): Drop support and testing for Python 3.10 (Griatch) - Feat (backwards incompatible): Drop support and testing for Python 3.10 (Griatch)
- [Feat][pull3719]: Support Python 3.13. (0xDEADFED5) - [Feat][pull3719]: Support Python 3.13. (electroglyph)
- [Feat][pull3633]: Default object's default descs are now taken from a `default_description` - [Feat][pull3633]: Default object's default descs are now taken from a `default_description`
class variable instead of the `desc` Attribute always being set (count-infinity) class variable instead of the `desc` Attribute always being set (count-infinity)
- [Feat][pull3718]: Remove twistd.bat creation for Windows, should not be needed anymore (0xDEADFED5) - [Feat][pull3718]: Remove twistd.bat creation for Windows, should not be needed anymore (electroglyph)
- [Feat][pull3756]: Updated German translation (JohnFi) - [Feat][pull3756]: Updated German translation (JohnFi)
- [Feat][pull3757]: Add more i18n strings to `DefaultObject` for easier translation (JohnFi) - [Feat][pull3757]: Add more i18n strings to `DefaultObject` for easier translation (JohnFi)
- [Feat][pull3783]: Support users of `ruff` linter by adding compatible config in `pyproject.toml` (jaborsh) - [Feat][pull3783]: Support users of `ruff` linter by adding compatible config in `pyproject.toml` (jaborsh)
@ -50,8 +94,8 @@ This upgrade requires running `evennia migrate` on your existing database
- [Fix][pull3690]: In searches, allow special 'here' and 'me' keywords only be valid queries - [Fix][pull3690]: In searches, allow special 'here' and 'me' keywords only be valid queries
unless current location and/or caller is in valid search candidates respectively (InspectorCaracal) unless current location and/or caller is in valid search candidates respectively (InspectorCaracal)
- [Fix][pull3694]: Funcparser swallowing rest of line after a `\`-escape (count-infinity) - [Fix][pull3694]: Funcparser swallowing rest of line after a `\`-escape (count-infinity)
- [Fix][pull3705]: Properly serialize `IntFlag` enum types (0xDEADFED5) - [Fix][pull3705]: Properly serialize `IntFlag` enum types (electroglyph)
- [Fix][pull3707]: Correct links in `about` command (0xDEADFED5) - [Fix][pull3707]: Correct links in `about` command (electroglyph)
- [Fix][pull3710]: Clean reduntant session clearin in `at_server_cold_start` (InspectorCaracal) - [Fix][pull3710]: Clean reduntant session clearin in `at_server_cold_start` (InspectorCaracal)
- [Fix][pull3711]: Usability improvements in the Discord integration (InspectorCaracal) - [Fix][pull3711]: Usability improvements in the Discord integration (InspectorCaracal)
- [Fix][pull3721]: Avoid loading cmdsets that don't need to be checked, avoiding - [Fix][pull3721]: Avoid loading cmdsets that don't need to be checked, avoiding
@ -67,7 +111,7 @@ This upgrade requires running `evennia migrate` on your existing database
- [Fix][pull3743]: Log full stack trace on failed object creation (aMiss-aWry) - [Fix][pull3743]: Log full stack trace on failed object creation (aMiss-aWry)
- [Fix][pull3747]: TutorialWorld bridge-room didn't correctly randomize weather effects (SpyrosRoum) - [Fix][pull3747]: TutorialWorld bridge-room didn't correctly randomize weather effects (SpyrosRoum)
- [Fix][pull3765]: Storing TickerHandler `store_key` in a db attribute would not - [Fix][pull3765]: Storing TickerHandler `store_key` in a db attribute would not
work correctly (0xDEADFED5) work correctly (electroglyph)
- [Fix][pull3753]: Make sure `AttributeProperty`s are initialized with default values also in parent class (JohnFi) - [Fix][pull3753]: Make sure `AttributeProperty`s are initialized with default values also in parent class (JohnFi)
- [Fix][pull3751]: The `access` and `inventory` commands would traceback if run on a character without an Account (EliasWatson) - [Fix][pull3751]: The `access` and `inventory` commands would traceback if run on a character without an Account (EliasWatson)
- [Fix][pull3768]: Make sure the `CmdCopy` command copies object categories, - [Fix][pull3768]: Make sure the `CmdCopy` command copies object categories,
@ -82,7 +126,7 @@ This upgrade requires running `evennia migrate` on your existing database
it caused an OnDemandHandler save error on reload. Will now clean up on save. (Griatch) it caused an OnDemandHandler save error on reload. Will now clean up on save. (Griatch)
used as the task's category (Griatch) used as the task's category (Griatch)
- Fix: Correct aws contrib's use of legacy django string utils (Griatch) - Fix: Correct aws contrib's use of legacy django string utils (Griatch)
- [Docs]: Fixes from InspectorCaracal, Griatch, ChrisLR, JohnFi, 0xDEADFED5, jaborsh, Problematic, BlaneWins - [Docs]: Fixes from InspectorCaracal, Griatch, ChrisLR, JohnFi, electroglyph, jaborsh, Problematic, BlaneWins
[pull3633]: https://github.com/evennia/evennia/pull/3633 [pull3633]: https://github.com/evennia/evennia/pull/3633
[pull3677]: https://github.com/evennia/evennia/pull/3677 [pull3677]: https://github.com/evennia/evennia/pull/3677
@ -204,7 +248,7 @@ Sep 29, 2024
- Feat: Support `scripts key:typeclass` to create global scripts - Feat: Support `scripts key:typeclass` to create global scripts
with dynamic keys (rather than just relying on typeclass' key) (Griatch) with dynamic keys (rather than just relying on typeclass' key) (Griatch)
- [Feat][pull3595]: Tweak Sqlite3 PRAGMAs for better performance (0xDEADFED5) - [Feat][pull3595]: Tweak Sqlite3 PRAGMAs for better performance (electroglyph)
- Feat: Make Sqlite3 PRAGMAs configurable via settings (Griatch) - Feat: Make Sqlite3 PRAGMAs configurable via settings (Griatch)
- [Feat][pull3592]: Revised German locationlization ('Du' instead of 'Sie', - [Feat][pull3592]: Revised German locationlization ('Du' instead of 'Sie',
cleanup) (Drakon72) cleanup) (Drakon72)
@ -213,7 +257,7 @@ with dynamic keys (rather than just relying on typeclass' key) (Griatch)
- [Feat][pull3588]: New `DefaultObject` hooks: `at_object_post_creation`, called once after - [Feat][pull3588]: New `DefaultObject` hooks: `at_object_post_creation`, called once after
first creation but after any prototypes have been applied, and first creation but after any prototypes have been applied, and
`at_object_post_spawn(prototype)`, called only after creation/update with a prototype (InspectorCaracal) `at_object_post_spawn(prototype)`, called only after creation/update with a prototype (InspectorCaracal)
- [Fix][pull3594]: Update/clean some Evennia dependencies (0xDEADFED5) - [Fix][pull3594]: Update/clean some Evennia dependencies (electroglyph)
- [Fix][issue3556]: Better error if trying to treat ObjectDB as a typeclass (Griatch) - [Fix][issue3556]: Better error if trying to treat ObjectDB as a typeclass (Griatch)
- [Fix][issue3590]: Make `examine` command properly show `strattr` type - [Fix][issue3590]: Make `examine` command properly show `strattr` type
Attribute values (Griatch) Attribute values (Griatch)
@ -227,7 +271,7 @@ did not add it to the handler's object (Griatch)
- [Fix][pull3605]: Correctly pass node kwargs through `@list_node` decorated evmenu nodes - [Fix][pull3605]: Correctly pass node kwargs through `@list_node` decorated evmenu nodes
(InspectorCaracal) (InspectorCaracal)
- [Fix][pull3597]: Address timing issue for testing `new_task_waiting_input `on - [Fix][pull3597]: Address timing issue for testing `new_task_waiting_input `on
Windows (0xDEADFED5) Windows (electroglyph)
- [Fix][pull3611]: Fix and update for Reports contrib (InspectorCaracal) - [Fix][pull3611]: Fix and update for Reports contrib (InspectorCaracal)
- [Fix][pull3625]: Lycanthropy tutorial page had some issues (feyrkh) - [Fix][pull3625]: Lycanthropy tutorial page had some issues (feyrkh)
- [Fix][pull3622]: Fix for examine command tracebacking with strvalue error - [Fix][pull3622]: Fix for examine command tracebacking with strvalue error
@ -273,10 +317,10 @@ Aug 11, 2024
- [Feat][pull3531]: New contrib; `in-game reports` for handling user reports, - [Feat][pull3531]: New contrib; `in-game reports` for handling user reports,
bugs etc in-game (InspectorCaracal) bugs etc in-game (InspectorCaracal)
- [Feat][pull3586]: Add ANSI color support `|U`, `|I`, `|i`, `|s`, `|S` for - [Feat][pull3586]: Add ANSI color support `|U`, `|I`, `|i`, `|s`, `|S` for
underline reset, italic/reset and strikethrough/reset (0xDEADFED5) underline reset, italic/reset and strikethrough/reset (electroglyph)
- Feat: Add `Trait.traithandler` back-reference so custom Traits from the Traits - Feat: Add `Trait.traithandler` back-reference so custom Traits from the Traits
contrib can find and reference other Traits. (Griatch) contrib can find and reference other Traits. (Griatch)
- [Feat][pull3582]: Add true-color parsing/fallback for ANSIString (0xDEADFED5) - [Feat][pull3582]: Add true-color parsing/fallback for ANSIString (electroglyph)
- [Fix][pull3571]: Better visual display of partial multimatch search results - [Fix][pull3571]: Better visual display of partial multimatch search results
(InspectorCaracal) (InspectorCaracal)
- [Fix][issue3378]: Prototype 'alias' key was not properly homogenized to a list - [Fix][issue3378]: Prototype 'alias' key was not properly homogenized to a list
@ -286,8 +330,8 @@ underline reset, italic/reset and strikethrough/reset (0xDEADFED5)
- [Fix][pull3585]: `TagCmd.switch_options` was misnamed (erratic-pattern) - [Fix][pull3585]: `TagCmd.switch_options` was misnamed (erratic-pattern)
- [Fix][pull3580]: Fix typo that made `find/loc` show the wrong dbref in result (erratic-pattern) - [Fix][pull3580]: Fix typo that made `find/loc` show the wrong dbref in result (erratic-pattern)
- [Fix][pull3589]: Fix regex escaping in `utils.py` for future Python versions (hhsiao) - [Fix][pull3589]: Fix regex escaping in `utils.py` for future Python versions (hhsiao)
- [Docs]: Add True-color description for Colors documentation (0xDEADFED5) - [Docs]: Add True-color description for Colors documentation (electroglyph)
- [Docs]: Doc fixes (Griatch, InspectorCaracal, 0xDEADFED5) - [Docs]: Doc fixes (Griatch, InspectorCaracal, electroglyph)
[pull3585]: https://github.com/evennia/evennia/pull/3585 [pull3585]: https://github.com/evennia/evennia/pull/3585
[pull3580]: https://github.com/evennia/evennia/pull/3580 [pull3580]: https://github.com/evennia/evennia/pull/3580

View file

@ -1,9 +1,5 @@
# Installation # Installation
```{important}
If you are converting an existing game from a previous Evennia version, you will need to upgrade.
```
The fastest way to install Evennia is to use the `pip` installer that comes with Python (read on). You can also [clone Evennia from github](./Installation-Git.md) or use [docker](./Installation-Docker.md). Some users have also experimented with [installing Evennia on Android](./Installation-Android.md). The fastest way to install Evennia is to use the `pip` installer that comes with Python (read on). You can also [clone Evennia from github](./Installation-Git.md) or use [docker](./Installation-Docker.md). Some users have also experimented with [installing Evennia on Android](./Installation-Android.md).
If you are converting an existing game, please follow the [upgrade instructions](./Installation-Upgrade.md). If you are converting an existing game, please follow the [upgrade instructions](./Installation-Upgrade.md).

View file

@ -376,16 +376,16 @@ WEBCLIENT_OPTIONS = {
# The command parser module to use. See the default module for which # The command parser module to use. See the default module for which
# functions it must implement # functions it must implement
COMMAND_PARSER = "evennia.commands.cmdparser.cmdparser" COMMAND_PARSER = "evennia.commands.cmdparser.cmdparser"
# On a multi-match when search objects or commands, the user has the # On a multi-match when searching objects or commands, the user has the
# ability to search again with an index marker that differentiates # ability to search again with an index marker that differentiates
# the results. If multiple "box" objects # the results. If multiple "box" objects are found, they can by default
# are found, they can by default be separated as 1-box, 2-box. Below you # be separated as box-1, box-2. Below you can change the regular expression
# can change the regular expression used. The regex must have one # used. The regex must have two capturing groups (?P<number>...) and
# have two capturing groups (?P<number>...) and (?P<name>...) - the default # (?P<name>...) - the default parser expects this. It may also have an
# parser expects this. It should also involve a number starting from 1. # optional (?P<args>...) group. It should also involve a number starting
# When changing this you must also update SEARCH_MULTIMATCH_TEMPLATE # from 1. When changing this you must also update SEARCH_MULTIMATCH_TEMPLATE
# to properly describe the syntax. # to properly describe the syntax.
SEARCH_MULTIMATCH_REGEX = r"(?P<name>[^-]*)-(?P<number>[0-9]+)(?P<args>.*)" SEARCH_MULTIMATCH_REGEX = r"^(?P<name>.*?)-(?P<number>[0-9]+)(?P<args>(?:\s.*)?)$"
# To display multimatch errors in various listings we must display # To display multimatch errors in various listings we must display
# the syntax in a way that matches what SEARCH_MULTIMATCH_REGEX understand. # the syntax in a way that matches what SEARCH_MULTIMATCH_REGEX understand.
# The template will be populated with data and expects the following markup: # The template will be populated with data and expects the following markup:

View file

@ -1,6 +1,6 @@
# Evennia Documentation # Evennia Documentation
This is the manual of [Evennia](https://www.evennia.com), the open source Python `MU*` creation system. Use the Search bar on the left to find or discover interesting articles. This manual was last updated October 26, 2024, see the [Evennia Changelog](Coding/Changelog.md). Latest released Evennia version is 5.0.1. This is the manual of [Evennia](https://www.evennia.com), the open source Python `MU*` creation system. Use the Search bar on the left to find or discover interesting articles. This manual was last updated January 12, 2026, see the [Evennia Changelog](Coding/Changelog.md). Latest released Evennia version is 5.0.1.
- [Introduction](./Evennia-Introduction.md) - what is this Evennia thing? - [Introduction](./Evennia-Introduction.md) - what is this Evennia thing?
- [Evennia in Pictures](./Evennia-In-Pictures.md) - a visual overview of Evennia - [Evennia in Pictures](./Evennia-In-Pictures.md) - a visual overview of Evennia

View file

@ -4,7 +4,7 @@
# `value = number` and only specific names supported by the handler. # `value = number` and only specific names supported by the handler.
PYTHON_MIN = 3.11 PYTHON_MIN = 3.11
PYTHON_MAX_TESTED = 3.13.100 PYTHON_MAX_TESTED = 3.14.100
TWISTED_MIN = 24.11 TWISTED_MIN = 24.11
DJANGO_MIN = 5.2.8 DJANGO_MIN = 5.2.8
DJANGO_MAX_TESTED = 5.2.100 DJANGO_MAX_TESTED = 5.2.100

View file

@ -4241,7 +4241,7 @@ class CmdSpawn(COMMAND_DEFAULT_CLASS):
# treat as string # treat as string
eval_err = err eval_err = err
prototype = utils.to_str(inp) prototype = utils.to_str(inp)
finally:
# it's possible that the input was a prototype-key, in which case # it's possible that the input was a prototype-key, in which case
# it's okay for the LITERAL_EVAL to fail. Only if the result does not # it's okay for the LITERAL_EVAL to fail. Only if the result does not
# match the expected type do we have a problem. # match the expected type do we have a problem.

View file

@ -2264,6 +2264,7 @@ class TestSystemCommands(BaseEvenniaCommandTest):
self.call(multimatch, "look", "") self.call(multimatch, "look", "")
class TestPreCmdOutputTestable(BaseEvenniaCommandTest): class TestPreCmdOutputTestable(BaseEvenniaCommandTest):
def test_pre_cmd(self): def test_pre_cmd(self):
class CmdTest(Command): class CmdTest(Command):

View file

@ -45,10 +45,7 @@ def menunode_list_reports(caller, raw_string, **kwargs):
new_report_list = report_list.filter(db_tags__db_key=kwargs["status"]) new_report_list = report_list.filter(db_tags__db_key=kwargs["status"])
# we don't filter reports if there are no reports under that filter # we don't filter reports if there are no reports under that filter
if not new_report_list: if not new_report_list:
text = _( text = _("(No {status} reports)\n" "{text}").format(status=status, text=text)
"(No {status} reports)\n"
"{text}"
).format(status=status, text=text)
else: else:
report_list = new_report_list report_list = new_report_list
text = _("Managing {status} {hub_name}").format(status=status, hub_name=hub_name) text = _("Managing {status} {hub_name}").format(status=status, hub_name=hub_name)
@ -85,10 +82,12 @@ def menunode_list_reports(caller, raw_string, **kwargs):
options.append( options.append(
{ {
"key": ( "key": (
_("|uP|nrevious {_REPORTS_PER_PAGE}").format(_REPORTS_PER_PAGE, _REPORTS_PER_PAGE), _("|uP|nrevious {_REPORTS_PER_PAGE}").format(
_REPORTS_PER_PAGE, _REPORTS_PER_PAGE
),
_("previous"), _("previous"),
_("prev"), _("prev"),
_("p") _("p"),
), ),
"goto": ( "goto": (
"menunode_list_reports", "menunode_list_reports",
@ -102,7 +101,7 @@ def menunode_list_reports(caller, raw_string, **kwargs):
"key": ( "key": (
_("|uN|next {_REPORTS_PER_PAGE}").format(_REPORTS_PER_PAGE=_REPORTS_PER_PAGE), _("|uN|next {_REPORTS_PER_PAGE}").format(_REPORTS_PER_PAGE=_REPORTS_PER_PAGE),
_("next"), _("next"),
_("n") _("n"),
), ),
"goto": ( "goto": (
"menunode_list_reports", "menunode_list_reports",
@ -151,16 +150,12 @@ def menunode_manage_report(caller, raw_string, report, **kwargs):
else: else:
about_clause = "" about_clause = ""
text = _( text = _("{message}\n" "{timestamp} by {senders}{about_clause}\n" "{tags}").format(
"{message}\n"
"{timestamp} by {senders}{about_clause}\n"
"{tags}"
).format(
message=message, message=message,
timestamp=timestamp, timestamp=timestamp,
senders=senders_str, senders=senders_str,
about_clause=about_clause, about_clause=about_clause,
tags=tags_str tags=tags_str,
) )
options = [] options = []

View file

@ -1119,6 +1119,7 @@ class TestIssue3824(BaseEvenniaTest):
self.assertIn(self.room1, objlist) self.assertIn(self.room1, objlist)
self.assertIn(self.room2, objlist) self.assertIn(self.room2, objlist)
class TestIssue3101(EvenniaCommandTest): class TestIssue3101(EvenniaCommandTest):
""" """
Spawning and using create_object should store the same `typeclass_path` if using Spawning and using create_object should store the same `typeclass_path` if using

View file

@ -45,7 +45,7 @@ _IDLE_COMMAND = str.encode(settings.IDLE_COMMAND + "\n")
# identify HTTP indata # identify HTTP indata
_HTTP_REGEX = re.compile( _HTTP_REGEX = re.compile(
b"(GET|HEAD|POST|PUT|DELETE|TRACE|OPTIONS|CONNECT|PATCH) (.*? HTTP/[0-9]\.[0-9])", re.I b"(GET|HEAD|POST|PUT|DELETE|TRACE|OPTIONS|CONNECT|PATCH) (.*? HTTP/[0-9]\\.[0-9])", re.I
) )
_HTTP_WARNING = bytes( _HTTP_WARNING = bytes(

View file

@ -93,6 +93,7 @@ class TestBatchCommandProcessor(TestCase):
[mock.call("foopath", file_ending=".ev"), mock.call("x", file_ending=".ev")], [mock.call("foopath", file_ending=".ev"), mock.call("x", file_ending=".ev")],
) )
class TestReadBatchFile(TestCase): class TestReadBatchFile(TestCase):
"""Test read_batchfile line ending normalization.""" """Test read_batchfile line ending normalization."""

View file

@ -41,6 +41,7 @@ classifiers = [
"Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: JavaScript", "Programming Language :: JavaScript",
"Development Status :: 5 - Production/Stable", "Development Status :: 5 - Production/Stable",
"License :: OSI Approved :: BSD License", "License :: OSI Approved :: BSD License",
@ -70,12 +71,12 @@ dependencies = [
"pytz >= 2022.6", "pytz >= 2022.6",
"djangorestframework >= 3.16, < 3.17", "djangorestframework >= 3.16, < 3.17",
"pyyaml >= 6.0", "pyyaml >= 6.0",
"django-filter == 2.4", "django-filter == 25.2",
"django-sekizai == 2.0.0", "django-sekizai == 2.0.0",
"inflect >= 5.2.0", "inflect >= 5.2.0",
"autobahn >= 20.7.1, < 21.0.0", "autobahn >= 20.7.1, < 21.0.0",
"lunr == 0.7.0.post1", "lunr == 0.7.0.post1",
"simpleeval <= 1.0", "simpleeval ~= 1.0.3",
"uritemplate == 4.1.1", "uritemplate == 4.1.1",
"tzdata >= 2022.6", "tzdata >= 2022.6",
"inflection == 0.5.1", "inflection == 0.5.1",