From fa4122c3acc4d6c1a2eda772ed7f975e286ab073 Mon Sep 17 00:00:00 2001 From: Roman Vlasenko Date: Sat, 30 Nov 2024 22:55:14 +0300 Subject: [PATCH 1/5] Update textual to 0.85.2 --- poetry.lock | 69 ++- pyproject.toml | 2 +- requirements-server.txt | 3 +- tests/__snapshots__/test_tui.ambr | 922 +++++++++++++++--------------- 4 files changed, 524 insertions(+), 472 deletions(-) diff --git a/poetry.lock b/poetry.lock index e6b8a29..f3c5f7d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -96,6 +96,21 @@ yarl = ">=1.0,<2.0" [package.extras] speedups = ["Brotli", "aiodns", "brotlicffi"] +[[package]] +name = "aiohttp-jinja2" +version = "1.6" +description = "jinja2 template renderer for aiohttp.web (http server for asyncio)" +optional = true +python-versions = ">=3.8" +files = [ + {file = "aiohttp-jinja2-1.6.tar.gz", hash = "sha256:a3a7ff5264e5bca52e8ae547bbfd0761b72495230d438d05b6c0915be619b0e2"}, + {file = "aiohttp_jinja2-1.6-py3-none-any.whl", hash = "sha256:0df405ee6ad1b58e5a068a105407dc7dcc1704544c559f1938babde954f945c7"}, +] + +[package.dependencies] +aiohttp = ">=3.9.0" +jinja2 = ">=3.0.0" + [[package]] name = "aioprometheus" version = "23.12.0" @@ -1365,6 +1380,22 @@ files = [ {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] +[[package]] +name = "platformdirs" +version = "4.3.6" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] + [[package]] name = "pluggy" version = "1.5.0" @@ -1909,17 +1940,18 @@ test = ["pytest", "tornado (>=4.5)", "typeguard"] [[package]] name = "textual" -version = "0.71.0" +version = "0.85.2" description = "Modern Text User Interface framework" optional = false -python-versions = "<4.0,>=3.8" +python-versions = "<4.0.0,>=3.8.1" files = [ - {file = "textual-0.71.0-py3-none-any.whl", hash = "sha256:60500cc63ffd98a4aff8679976a1530d5e99a881e13bb040d26558a2c45f49d8"}, - {file = "textual-0.71.0.tar.gz", hash = "sha256:a38a3bd7e450ed173b59ab1c93a3aa8174d95bc5c79647f220a50243236ce70a"}, + {file = "textual-0.85.2-py3-none-any.whl", hash = "sha256:9ccdeb6b8a6a0ff72d497f714934f2e524f2eb67783b459fb08b1339ee537dc0"}, + {file = "textual-0.85.2.tar.gz", hash = "sha256:2a416995c49d5381a81d0a6fd23925cb0e3f14b4f239ed05f35fa3c981bb1df2"}, ] [package.dependencies] markdown-it-py = {version = ">=2.1.0", extras = ["linkify", "plugins"]} +platformdirs = ">=3.6.0,<5" rich = ">=13.3.3" typing-extensions = ">=4.4.0,<5.0.0" @@ -1928,13 +1960,13 @@ syntax = ["tree-sitter (>=0.20.1,<0.21.0)", "tree-sitter-languages (==1.10.2)"] [[package]] name = "textual-dev" -version = "1.5.1" +version = "1.6.1" description = "Development tools for working with Textual" optional = true -python-versions = ">=3.8,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "textual_dev-1.5.1-py3-none-any.whl", hash = "sha256:bb37dd769ae6b67e1422aa97f6d6ef952e0a6d2aafe08327449e8bdd70474776"}, - {file = "textual_dev-1.5.1.tar.gz", hash = "sha256:e0366ab6f42c128d7daa37a7c418e61fe7aa83731983da990808e4bf2de922a1"}, + {file = "textual_dev-1.6.1-py3-none-any.whl", hash = "sha256:de93279da6dd0772be88a83e494be1bc895df0a0c3e47bcd48fa1acb1a83a34b"}, + {file = "textual_dev-1.6.1.tar.gz", hash = "sha256:0d0d4523a09566bae56eb9ebc4fcbb09069d0f335448e6b9b10dd2d805606bd8"}, ] [package.dependencies] @@ -1942,8 +1974,27 @@ aiohttp = ">=3.8.1" click = ">=8.1.2" msgpack = ">=1.0.3" textual = ">=0.36.0" +textual_serve = ">=1.0.3" typing-extensions = ">=4.4.0,<5.0.0" +[[package]] +name = "textual-serve" +version = "1.1.1" +description = "Turn your Textual TUIs in to web applications" +optional = true +python-versions = ">=3.8" +files = [ + {file = "textual_serve-1.1.1-py3-none-any.whl", hash = "sha256:568782f1c0e60e3f7039d9121e1cb5c2f4ca1aaf6d6bd7aeb833d5763a534cb2"}, + {file = "textual_serve-1.1.1.tar.gz", hash = "sha256:71c662472c462e5e368defc660ee6e8eae3bfda88ca40c050c55474686eb0c54"}, +] + +[package.dependencies] +aiohttp = ">=3.9.5" +aiohttp-jinja2 = ">=1.6" +jinja2 = ">=3.1.4" +rich = "*" +textual = ">=0.66.0" + [[package]] name = "tomli" version = "2.0.1" @@ -2336,4 +2387,4 @@ server = ["aioprometheus", "auth0-python", "blacksheep", "pyjwt", "redis", "uvic [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "0449b38b18445b501536c1bb218c8fd2a54f4070d3124af798c2c2f610d344a0" +content-hash = "8aaed44978c23ac850039e453fedb4864fb61e5a1090242dd98a07acbde44030" diff --git a/pyproject.toml b/pyproject.toml index fb9f027..e288f44 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ auth0-python = { version = "^4.5.0", optional = true } typer = { version = "^0.12.0", optional = true } xdg-base-dirs = "^6.0.1" redis = { version = "^5.0.1", optional = true } -textual = "0.71.0" +textual = { version = "0.85.2", optional = true } textual-dev = { version = "^1.5.0", optional = true } async-timeout = { version = "^4.0.3", markers = "python_version < '3.11'" } backports-strenum = { version = "^1.2.8", markers = "python_version < '3.11'" } diff --git a/requirements-server.txt b/requirements-server.txt index 125cb16..983d425 100644 --- a/requirements-server.txt +++ b/requirements-server.txt @@ -36,6 +36,7 @@ mdit-py-plugins==0.4.1 ; python_version >= "3.10" and python_version < "3.13" mdurl==0.1.2 ; python_version >= "3.10" and python_version < "3.13" multidict==6.0.5 ; python_version >= "3.10" and python_version < "3.13" orjson==3.10.5 ; python_version >= "3.10" and python_version < "3.13" +platformdirs==4.3.6 ; python_version >= "3.10" and python_version < "3.13" pycparser==2.22 ; python_version >= "3.10" and python_version < "3.13" and platform_python_implementation != "PyPy" pydantic-core==2.18.4 ; python_version >= "3.10" and python_version < "3.13" pydantic-settings==2.3.3 ; python_version >= "3.10" and python_version < "3.13" @@ -55,7 +56,7 @@ rodi==2.0.6 ; python_version >= "3.10" and python_version < "3.13" sentry-sdk==2.12.0 ; python_version >= "3.10" and python_version < "3.13" six==1.16.0 ; python_version >= "3.10" and python_version < "3.13" sniffio==1.3.1 ; python_version >= "3.10" and python_version < "3.13" -textual==0.71.0 ; python_version >= "3.10" and python_version < "3.13" +textual==0.85.2 ; python_version >= "3.10" and python_version < "3.13" typing-extensions==4.12.2 ; python_version >= "3.10" and python_version < "3.13" uc-micro-py==1.0.3 ; python_version >= "3.10" and python_version < "3.13" urllib3==2.2.2 ; python_version >= "3.10" and python_version < "3.13" diff --git a/tests/__snapshots__/test_tui.ambr b/tests/__snapshots__/test_tui.ambr index c456013..7f4cf9f 100644 --- a/tests/__snapshots__/test_tui.ambr +++ b/tests/__snapshots__/test_tui.ambr @@ -22,182 +22,182 @@ font-weight: 700; } - .terminal-2733206560-matrix { + .terminal-767126462-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2733206560-title { + .terminal-767126462-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2733206560-r1 { fill: #e1e1e1 } - .terminal-2733206560-r2 { fill: #c5c8c6 } - .terminal-2733206560-r3 { fill: #dde8f3;font-weight: bold } - .terminal-2733206560-r4 { fill: #ddedf9 } - .terminal-2733206560-r5 { fill: #e4e5e6 } - .terminal-2733206560-r6 { fill: #fea62b;font-weight: bold } - .terminal-2733206560-r7 { fill: #a7a9ab;font-weight: bold } - .terminal-2733206560-r8 { fill: #e2e3e3;font-weight: bold } + .terminal-767126462-r1 { fill: #e1e1e1 } + .terminal-767126462-r2 { fill: #c5c8c6 } + .terminal-767126462-r3 { fill: #dde8f3;font-weight: bold } + .terminal-767126462-r4 { fill: #ddedf9 } + .terminal-767126462-r5 { fill: #e4e5e6 } + .terminal-767126462-r6 { fill: #fea62b;font-weight: bold } + .terminal-767126462-r7 { fill: #a7a9ab;font-weight: bold } + .terminal-767126462-r8 { fill: #e2e3e3;font-weight: bold } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Battleship + Battleship - - - - - - - - - - - - - - - - - Welcome to Battleship TUI!                  🤖 Singleplayer                    - - -     Battleship TUI is an implementation of the classic                    👨 Multiplayer                    -     Battleship game for your terminal. - -     You can play against the computer or against a real                     🔧 Settings                      -     player via network. - - - - - - - - - - - - - -  CTRL+Q Quit v0.0.0 + + + + + + + + + + + + + + + + + Welcome to Battleship TUI!                  🤖 Singleplayer                    + + +     Battleship TUI is an implementation of the classic                    👨 Multiplayer                    +     Battleship game for your terminal. + +     You can play against the computer or against a real                     🔧 Settings                      +     player via network. + + + + + + + + + + + + + +  ^q Quit v0.0.0 @@ -227,193 +227,193 @@ font-weight: 700; } - .terminal-3082880478-matrix { + .terminal-742794426-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-3082880478-title { + .terminal-742794426-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-3082880478-r1 { fill: #e1e1e1 } - .terminal-3082880478-r2 { fill: #c5c8c6 } - .terminal-3082880478-r3 { fill: #1e1e1e } - .terminal-3082880478-r4 { fill: #0178d4 } - .terminal-3082880478-r5 { fill: #dde8f3;font-weight: bold } - .terminal-3082880478-r6 { fill: #787878 } - .terminal-3082880478-r7 { fill: #e2e2e2 } - .terminal-3082880478-r8 { fill: #121212 } - .terminal-3082880478-r9 { fill: #364b66 } - .terminal-3082880478-r10 { fill: #a5a9ac;font-weight: bold } - .terminal-3082880478-r11 { fill: #0f192e } - .terminal-3082880478-r12 { fill: #004578 } - .terminal-3082880478-r13 { fill: #d2d2d2 } - .terminal-3082880478-r14 { fill: #eeffff } - .terminal-3082880478-r15 { fill: #454a50 } - .terminal-3082880478-r16 { fill: #e2e3e3;font-weight: bold } - .terminal-3082880478-r17 { fill: #000000 } - .terminal-3082880478-r18 { fill: #fea62b;font-weight: bold } - .terminal-3082880478-r19 { fill: #a7a9ab;font-weight: bold } + .terminal-742794426-r1 { fill: #e1e1e1 } + .terminal-742794426-r2 { fill: #c5c8c6 } + .terminal-742794426-r3 { fill: #1e1e1e } + .terminal-742794426-r4 { fill: #0178d4 } + .terminal-742794426-r5 { fill: #dde8f3;font-weight: bold } + .terminal-742794426-r6 { fill: #787878 } + .terminal-742794426-r7 { fill: #e2e2e2 } + .terminal-742794426-r8 { fill: #121212 } + .terminal-742794426-r9 { fill: #364b66 } + .terminal-742794426-r10 { fill: #a5a9ac;font-weight: bold } + .terminal-742794426-r11 { fill: #0f192e } + .terminal-742794426-r12 { fill: #004578 } + .terminal-742794426-r13 { fill: #d2d2d2 } + .terminal-742794426-r14 { fill: #eeffff } + .terminal-742794426-r15 { fill: #454a50 } + .terminal-742794426-r16 { fill: #e2e3e3;font-weight: bold } + .terminal-742794426-r17 { fill: #000000 } + .terminal-742794426-r18 { fill: #fea62b;font-weight: bold } + .terminal-742794426-r19 { fill: #a7a9ab;font-weight: bold } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Battleship + Battleship - - - - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - HelpNickname - ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -     In Multiplayer mode you play against a human player.▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - Password -     You can use your account to connect to the server or ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -     connect as a guest user. In the later case your  -     nickname will be autogenerated and your game ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -     statistics won't be saved. Connect  - ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -     If you don't have an account, run - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - - $ battleship account signup▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -  Connect as guest  - ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -     to create one. - - - - - - - - - - - - - - - -  ESC Back  CTRL+Q Quit v0.0.0 + + + + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + HelpNickname + ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +     In Multiplayer mode you play against a human player.▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + Password +     You can use your account to connect to the server or ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +     connect as a guest user. In the later case your  +     nickname will be autogenerated and your game ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +     statistics won't be saved. Connect  + ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +     If you don't have an account, run + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + $ battleship account signup▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +  Connect as guest  + ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +     to create one. + + + + + + + + + + + + + + + +  esc Back  ^q Quit v0.0.0 @@ -443,192 +443,192 @@ font-weight: 700; } - .terminal-2673275914-matrix { + .terminal-4076615064-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2673275914-title { + .terminal-4076615064-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2673275914-r1 { fill: #e1e1e1 } - .terminal-2673275914-r2 { fill: #c5c8c6 } - .terminal-2673275914-r3 { fill: #dde8f3;font-weight: bold } - .terminal-2673275914-r4 { fill: #1e1e1e } - .terminal-2673275914-r5 { fill: #121212 } - .terminal-2673275914-r6 { fill: #e2e2e2 } - .terminal-2673275914-r7 { fill: #e1e1e1;font-weight: bold } - .terminal-2673275914-r8 { fill: #e1e1e1;font-style: italic; } - .terminal-2673275914-r9 { fill: #a8a8a8 } - .terminal-2673275914-r10 { fill: #e76580 } - .terminal-2673275914-r11 { fill: #507bb3 } - .terminal-2673275914-r12 { fill: #f5e5e9;font-weight: bold } - .terminal-2673275914-r13 { fill: #dde6ed;font-weight: bold } - .terminal-2673275914-r14 { fill: #780028 } - .terminal-2673275914-r15 { fill: #001541 } - .terminal-2673275914-r16 { fill: #fea62b;font-weight: bold } - .terminal-2673275914-r17 { fill: #a7a9ab;font-weight: bold } - .terminal-2673275914-r18 { fill: #e2e3e3;font-weight: bold } + .terminal-4076615064-r1 { fill: #e1e1e1 } + .terminal-4076615064-r2 { fill: #c5c8c6 } + .terminal-4076615064-r3 { fill: #dde8f3;font-weight: bold } + .terminal-4076615064-r4 { fill: #1e1e1e } + .terminal-4076615064-r5 { fill: #121212 } + .terminal-4076615064-r6 { fill: #e2e2e2 } + .terminal-4076615064-r7 { fill: #e1e1e1;font-weight: bold } + .terminal-4076615064-r8 { fill: #e1e1e1;font-style: italic; } + .terminal-4076615064-r9 { fill: #a8a8a8 } + .terminal-4076615064-r10 { fill: #e76580 } + .terminal-4076615064-r11 { fill: #507bb3 } + .terminal-4076615064-r12 { fill: #f5e5e9;font-weight: bold } + .terminal-4076615064-r13 { fill: #dde6ed;font-weight: bold } + .terminal-4076615064-r14 { fill: #780028 } + .terminal-4076615064-r15 { fill: #001541 } + .terminal-4076615064-r16 { fill: #fea62b;font-weight: bold } + .terminal-4076615064-r17 { fill: #a7a9ab;font-weight: bold } + .terminal-4076615064-r18 { fill: #e2e3e3;font-weight: bold } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Battleship + Battleship - - - - -      Player name                                               - Help▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - Player                                           - ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -     Here you can configure the global game settings. -                                                                Your fleet color                                          - Player name▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -     Your display name in singleplayer mode Max. 19 #36aa5e                                          - characters.▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - Your fleet color     Enemy fleet color                                         -     The color of your ships. You can enter any hex color.▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - #0065be                                          - Enemy fleet color▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -     The color of your enemy's ships. You can enter any hex                                                               -     color.     Language                                                  - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - LanguageEnglish -     UI language. Requires restart.▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -  Reset to defaults  Save  - ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - - - - - - - - - -  ESC Back  CTRL+Q Quit v0.0.0 + + + + +      Player name                                               + Help▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + Player                                           + ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +     Here you can configure the global game settings. +                                                                Your fleet color                                          + Player name▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +     Your display name in singleplayer mode Max. 19 #36aa5e                                          + characters.▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + Your fleet color     Enemy fleet color                                         +     The color of your ships. You can enter any hex color.▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + #0065be                                          + Enemy fleet color▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +     The color of your enemy's ships. You can enter any hex                                                               +     color.     Language                                                  + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + LanguageEnglish +     UI language. Requires restart.▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +  Reset to defaults  Save  + ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + + + + + + + + + +  esc Back  ^q Quit v0.0.0 @@ -658,193 +658,193 @@ font-weight: 700; } - .terminal-2474002878-matrix { + .terminal-1201317462-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2474002878-title { + .terminal-1201317462-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2474002878-r1 { fill: #e1e1e1 } - .terminal-2474002878-r2 { fill: #c5c8c6 } - .terminal-2474002878-r3 { fill: #1e1e1e } - .terminal-2474002878-r4 { fill: #fea62b } - .terminal-2474002878-r5 { fill: #dde8f3;font-weight: bold } - .terminal-2474002878-r6 { fill: #434343 } - .terminal-2474002878-r7 { fill: #4ebf71;font-weight: bold } - .terminal-2474002878-r8 { fill: #e2e2e2 } - .terminal-2474002878-r9 { fill: #262626;font-weight: bold } - .terminal-2474002878-r10 { fill: #e1e1e1;font-weight: bold } - .terminal-2474002878-r11 { fill: #e1e1e1;font-style: italic; } - .terminal-2474002878-r12 { fill: #575757 } - .terminal-2474002878-r13 { fill: #e2e2e2;text-decoration: underline; } - .terminal-2474002878-r14 { fill: #7ae998 } - .terminal-2474002878-r15 { fill: #0a180e;font-weight: bold } - .terminal-2474002878-r16 { fill: #008139 } - .terminal-2474002878-r17 { fill: #fea62b;font-weight: bold } - .terminal-2474002878-r18 { fill: #a7a9ab;font-weight: bold } - .terminal-2474002878-r19 { fill: #e2e3e3;font-weight: bold } + .terminal-1201317462-r1 { fill: #e1e1e1 } + .terminal-1201317462-r2 { fill: #c5c8c6 } + .terminal-1201317462-r3 { fill: #1e1e1e } + .terminal-1201317462-r4 { fill: #fea62b } + .terminal-1201317462-r5 { fill: #dde8f3;font-weight: bold } + .terminal-1201317462-r6 { fill: #434343 } + .terminal-1201317462-r7 { fill: #4ebf71;font-weight: bold } + .terminal-1201317462-r8 { fill: #e2e2e2 } + .terminal-1201317462-r9 { fill: #262626;font-weight: bold } + .terminal-1201317462-r10 { fill: #e1e1e1;font-weight: bold } + .terminal-1201317462-r11 { fill: #e1e1e1;font-style: italic; } + .terminal-1201317462-r12 { fill: #575757 } + .terminal-1201317462-r13 { fill: #e2e2e2;text-decoration: underline; } + .terminal-1201317462-r14 { fill: #7ae998 } + .terminal-1201317462-r15 { fill: #0a180e;font-weight: bold } + .terminal-1201317462-r16 { fill: #008139 } + .terminal-1201317462-r17 { fill: #fea62b;font-weight: bold } + .terminal-1201317462-r18 { fill: #a7a9ab;font-weight: bold } + .terminal-1201317462-r19 { fill: #e2e3e3;font-weight: bold } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Battleship + Battleship - - - - - ▔ Roster ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - Help -  Classic -  Russian -     In Singleplayer mode you play against the computer.  -     You can configure options before the game starts.▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - Roster▔ Firing order ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -     Choose ship types that will be present on the  -     battlefield. Alternately -  Until miss -  1. Classic - Carrier (5 HP), Battleship (4 HP),  - Cruiser (3 HP), Submarine (3 HP), Destroyer (2 HP)    ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -  2. Russian - Battleship (4 HP), Cruiser (3 HP) x2,  - Destroyer (2 HP) x3, Frigate (1 HP) x4▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - X Salvo mode - Firing order▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -     Choose, whether players make turns one at a time, or  -     until the first miss.▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - XNo adjacent ships - Salvo mode▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -     Toggles salvo mode. In salvo mode, players make as  -     many shots during the turn as they have ships left.▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -  Play  - No adjacent ships▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -     When this toggle is on, there must be a distance of at                                                               -     least 1 cell between players' ships. - - - - - - -  ESC Back  CTRL+Q Quit v0.0.0 + + + + + ▔ Roster ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + Help +  Classic +  Russian +     In Singleplayer mode you play against the computer.  +     You can configure options before the game starts.▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + Roster▔ Firing order ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +     Choose ship types that will be present on the  +     battlefield. Alternately +  Until miss +  1. Classic - Carrier (5 HP), Battleship (4 HP),  + Cruiser (3 HP), Submarine (3 HP), Destroyer (2 HP)    ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +  2. Russian - Battleship (4 HP), Cruiser (3 HP) x2,  + Destroyer (2 HP) x3, Frigate (1 HP) x4▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + X Salvo mode + Firing order▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +     Choose, whether players make turns one at a time, or  +     until the first miss.▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + XNo adjacent ships + Salvo mode▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +     Toggles salvo mode. In salvo mode, players make as  +     many shots during the turn as they have ships left.▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +  Play  + No adjacent ships▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +     When this toggle is on, there must be a distance of at                                                               +     least 1 cell between players' ships. + + + + + + +  esc Back  ^q Quit v0.0.0 @@ -874,191 +874,191 @@ font-weight: 700; } - .terminal-4248764251-matrix { + .terminal-1616075778-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-4248764251-title { + .terminal-1616075778-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-4248764251-r1 { fill: #e1e1e1 } - .terminal-4248764251-r2 { fill: #c5c8c6 } - .terminal-4248764251-r3 { fill: #1e1e1e } - .terminal-4248764251-r4 { fill: #fea62b } - .terminal-4248764251-r5 { fill: #dde8f3;font-weight: bold } - .terminal-4248764251-r6 { fill: #434343 } - .terminal-4248764251-r7 { fill: #4ebf71;font-weight: bold } - .terminal-4248764251-r8 { fill: #e2e2e2 } - .terminal-4248764251-r9 { fill: #262626;font-weight: bold } - .terminal-4248764251-r10 { fill: #e1e1e1;font-weight: bold } - .terminal-4248764251-r11 { fill: #e1e1e1;font-style: italic; } - .terminal-4248764251-r12 { fill: #7ae998 } - .terminal-4248764251-r13 { fill: #0a180e;font-weight: bold } - .terminal-4248764251-r14 { fill: #008139 } - .terminal-4248764251-r15 { fill: #fea62b;font-weight: bold } - .terminal-4248764251-r16 { fill: #a7a9ab;font-weight: bold } - .terminal-4248764251-r17 { fill: #e2e3e3;font-weight: bold } + .terminal-1616075778-r1 { fill: #e1e1e1 } + .terminal-1616075778-r2 { fill: #c5c8c6 } + .terminal-1616075778-r3 { fill: #1e1e1e } + .terminal-1616075778-r4 { fill: #fea62b } + .terminal-1616075778-r5 { fill: #dde8f3;font-weight: bold } + .terminal-1616075778-r6 { fill: #434343 } + .terminal-1616075778-r7 { fill: #4ebf71;font-weight: bold } + .terminal-1616075778-r8 { fill: #e2e2e2 } + .terminal-1616075778-r9 { fill: #262626;font-weight: bold } + .terminal-1616075778-r10 { fill: #e1e1e1;font-weight: bold } + .terminal-1616075778-r11 { fill: #e1e1e1;font-style: italic; } + .terminal-1616075778-r12 { fill: #7ae998 } + .terminal-1616075778-r13 { fill: #0a180e;font-weight: bold } + .terminal-1616075778-r14 { fill: #008139 } + .terminal-1616075778-r15 { fill: #fea62b;font-weight: bold } + .terminal-1616075778-r16 { fill: #a7a9ab;font-weight: bold } + .terminal-1616075778-r17 { fill: #e2e3e3;font-weight: bold } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - Battleship + Battleship - - - - - ▔ Roster ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - Help -  Classic -  Russian -     In Singleplayer mode you play against the computer.  -     You can configure options before the game starts.▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - - Roster▔ Firing order ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -     Choose ship types that will be present on the  -     battlefield. Alternately -  Until miss -  1. Classic - Carrier (5 HP), Battleship (4 HP),  - Cruiser (3 HP), Submarine (3 HP), Destroyer (2 HP)    ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -  2. Russian - Battleship (4 HP), Cruiser (3 HP) x2,  - Destroyer (2 HP) x3, Frigate (1 HP) x4▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - X Salvo mode - Firing order▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -     Choose, whether players make turns one at a time, or  -     until the first miss.▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - X No adjacent ships - Salvo mode▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -     Toggles salvo mode. In salvo mode, players make as  -     many shots during the turn as they have ships left.▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ -  Play  - No adjacent ships▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -     When this toggle is on, there must be a distance of at                                                               -     least 1 cell between players' ships. - - - - - - -  ESC Back  CTRL+Q Quit v0.0.0 + + + + + ▔ Roster ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + Help +  Classic +  Russian +     In Singleplayer mode you play against the computer.  +     You can configure options before the game starts.▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + + Roster▔ Firing order ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +     Choose ship types that will be present on the  +     battlefield. Alternately +  Until miss +  1. Classic - Carrier (5 HP), Battleship (4 HP),  + Cruiser (3 HP), Submarine (3 HP), Destroyer (2 HP)    ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +  2. Russian - Battleship (4 HP), Cruiser (3 HP) x2,  + Destroyer (2 HP) x3, Frigate (1 HP) x4▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + X Salvo mode + Firing order▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +     Choose, whether players make turns one at a time, or  +     until the first miss.▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + X No adjacent ships + Salvo mode▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +     Toggles salvo mode. In salvo mode, players make as  +     many shots during the turn as they have ships left.▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +  Play  + No adjacent ships▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +     When this toggle is on, there must be a distance of at                                                               +     least 1 cell between players' ships. + + + + + + +  esc Back  ^q Quit v0.0.0 From 4031385819f79bae7d7214ce321dc57acea09634 Mon Sep 17 00:00:00 2001 From: Roman Vlasenko Date: Sun, 1 Dec 2024 00:22:36 +0300 Subject: [PATCH 2/5] Move pytest-textual-snapshot to dev extras, allowing Textual to be an optional dep --- poetry.lock | 38 +++++++++++++++++++------------------- pyproject.toml | 4 ++-- requirements-server.txt | 10 ---------- 3 files changed, 21 insertions(+), 31 deletions(-) diff --git a/poetry.lock b/poetry.lock index f3c5f7d..016da54 100644 --- a/poetry.lock +++ b/poetry.lock @@ -916,7 +916,7 @@ files = [ name = "jinja2" version = "3.1.4" description = "A very fast and expressive template engine." -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, @@ -933,7 +933,7 @@ i18n = ["Babel (>=2.7)"] name = "linkify-it-py" version = "2.0.3" description = "Links recognition library with FULL unicode support." -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "linkify-it-py-2.0.3.tar.gz", hash = "sha256:68cda27e162e9215c17d786649d1da0021a451bdc436ef9e0fa0ba5234b9b048"}, @@ -971,7 +971,7 @@ dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptio name = "markdown-it-py" version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, @@ -997,7 +997,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, @@ -1066,7 +1066,7 @@ files = [ name = "mdit-py-plugins" version = "0.4.1" description = "Collection of plugins for markdown-it-py" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "mdit_py_plugins-0.4.1-py3-none-any.whl", hash = "sha256:1020dfe4e6bfc2c79fb49ae4e3f5b297f5ccd20f010187acc52af2921e27dc6a"}, @@ -1085,7 +1085,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, @@ -1384,7 +1384,7 @@ files = [ name = "platformdirs" version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, @@ -1555,7 +1555,7 @@ yaml = ["pyyaml (>=6.0.1)"] name = "pygments" version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, @@ -1643,7 +1643,7 @@ testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] name = "pytest-textual-snapshot" version = "0.4.0" description = "Snapshot testing for Textual apps" -optional = false +optional = true python-versions = ">=3.6,<4.0" files = [ {file = "pytest_textual_snapshot-0.4.0-py3-none-any.whl", hash = "sha256:879cc5de29cdd31cfe1b6daeb1dc5e42682abebcf4f88e7e3375bd5200683fc0"}, @@ -1787,7 +1787,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "rich" version = "13.7.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false +optional = true python-versions = ">=3.7.0" files = [ {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, @@ -1911,13 +1911,13 @@ files = [ [[package]] name = "syrupy" -version = "4.6.1" +version = "4.8.0" description = "Pytest Snapshot Test Utility" -optional = false -python-versions = ">=3.8.1,<4" +optional = true +python-versions = ">=3.8.1" files = [ - {file = "syrupy-4.6.1-py3-none-any.whl", hash = "sha256:203e52f9cb9fa749cf683f29bd68f02c16c3bc7e7e5fe8f2fc59bdfe488ce133"}, - {file = "syrupy-4.6.1.tar.gz", hash = "sha256:37a835c9ce7857eeef86d62145885e10b3cb9615bc6abeb4ce404b3f18e1bb36"}, + {file = "syrupy-4.8.0-py3-none-any.whl", hash = "sha256:544f4ec6306f4b1c460fdab48fd60b2c7fe54a6c0a8243aeea15f9ad9c638c3f"}, + {file = "syrupy-4.8.0.tar.gz", hash = "sha256:648f0e9303aaa8387c8365d7314784c09a6bab0a407455c6a01d6a4f5c6a8ede"}, ] [package.dependencies] @@ -1942,7 +1942,7 @@ test = ["pytest", "tornado (>=4.5)", "typeguard"] name = "textual" version = "0.85.2" description = "Modern Text User Interface framework" -optional = false +optional = true python-versions = "<4.0.0,>=3.8.1" files = [ {file = "textual-0.85.2-py3-none-any.whl", hash = "sha256:9ccdeb6b8a6a0ff72d497f714934f2e524f2eb67783b459fb08b1339ee537dc0"}, @@ -2038,7 +2038,7 @@ files = [ name = "uc-micro-py" version = "1.0.3" description = "Micro subset of unicode data files for linkify-it-py projects." -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "uc-micro-py-1.0.3.tar.gz", hash = "sha256:d321b92cff673ec58027c04015fcaa8bb1e005478643ff4a500882eaab88c48a"}, @@ -2381,10 +2381,10 @@ multidict = ">=4.0" [extras] client = ["copykitten", "sentry-offline-transport", "tenacity", "textual", "typer"] -dev = ["textual-dev"] +dev = ["pytest-textual-snapshot", "textual-dev"] server = ["aioprometheus", "auth0-python", "blacksheep", "pyjwt", "redis", "uvicorn", "uvloop"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "8aaed44978c23ac850039e453fedb4864fb61e5a1090242dd98a07acbde44030" +content-hash = "2e36f2e5ef54e2041891fc38b5e2789aa24fa8343792390fd6eba20b1b90b428" diff --git a/pyproject.toml b/pyproject.toml index e288f44..f2f1a1e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,6 +42,7 @@ xdg-base-dirs = "^6.0.1" redis = { version = "^5.0.1", optional = true } textual = { version = "0.85.2", optional = true } textual-dev = { version = "^1.5.0", optional = true } +pytest-textual-snapshot = { version = "^0.4.0", optional = true } async-timeout = { version = "^4.0.3", markers = "python_version < '3.11'" } backports-strenum = { version = "^1.2.8", markers = "python_version < '3.11'" } sentry-sdk = "^2.8.0" @@ -55,7 +56,7 @@ rodi = "^2.0.6" [tool.poetry.extras] server = ["blacksheep", "uvicorn", "auth0-python", "pyjwt", "uvloop", "redis", "aioprometheus"] client = ["textual", "typer", "copykitten", "tenacity", "sentry-offline-transport"] -dev = ["textual-dev"] +dev = ["textual-dev", "pytest-textual-snapshot"] [tool.poetry.scripts] battleship = "battleship.cli:run" @@ -83,7 +84,6 @@ coverage = "^7.3.0" watchdog = {extras = ["watchmedo"], version = "^3.0.0"} pytest = "^7.4.2" pytest-asyncio = "^0.23.2" -pytest-textual-snapshot = "^0.4.0" [build-system] requires = ["poetry-core"] diff --git a/requirements-server.txt b/requirements-server.txt index 983d425..e53216f 100644 --- a/requirements-server.txt +++ b/requirements-server.txt @@ -27,21 +27,14 @@ httptools==0.6.1 ; python_version >= "3.10" and python_version < "3.13" httpx==0.27.0 ; python_version >= "3.10" and python_version < "3.13" idna==3.7 ; python_version >= "3.10" and python_version < "3.13" itsdangerous==2.1.2 ; python_version >= "3.10" and python_version < "3.13" -linkify-it-py==2.0.3 ; python_version >= "3.10" and python_version < "3.13" loguru==0.7.2 ; python_version >= "3.10" and python_version < "3.13" -markdown-it-py==3.0.0 ; python_version >= "3.10" and python_version < "3.13" -markdown-it-py[linkify,plugins]==3.0.0 ; python_version >= "3.10" and python_version < "3.13" markupsafe==2.1.5 ; python_version >= "3.10" and python_version < "3.13" -mdit-py-plugins==0.4.1 ; python_version >= "3.10" and python_version < "3.13" -mdurl==0.1.2 ; python_version >= "3.10" and python_version < "3.13" multidict==6.0.5 ; python_version >= "3.10" and python_version < "3.13" orjson==3.10.5 ; python_version >= "3.10" and python_version < "3.13" -platformdirs==4.3.6 ; python_version >= "3.10" and python_version < "3.13" pycparser==2.22 ; python_version >= "3.10" and python_version < "3.13" and platform_python_implementation != "PyPy" pydantic-core==2.18.4 ; python_version >= "3.10" and python_version < "3.13" pydantic-settings==2.3.3 ; python_version >= "3.10" and python_version < "3.13" pydantic==2.7.4 ; python_version >= "3.10" and python_version < "3.13" -pygments==2.18.0 ; python_version >= "3.10" and python_version < "3.13" pyjwt==2.8.0 ; python_version >= "3.10" and python_version < "3.13" pyjwt[crypto]==2.8.0 ; python_version >= "3.10" and python_version < "3.13" pymitter==0.5.1 ; python_version >= "3.10" and python_version < "3.13" @@ -51,14 +44,11 @@ pyyaml==6.0.1 ; python_version >= "3.10" and python_version < "3.13" quantile-python==1.1 ; python_version >= "3.10" and python_version < "3.13" redis==5.0.6 ; python_version >= "3.10" and python_version < "3.13" requests==2.32.3 ; python_version >= "3.10" and python_version < "3.13" -rich==13.7.1 ; python_version >= "3.10" and python_version < "3.13" rodi==2.0.6 ; python_version >= "3.10" and python_version < "3.13" sentry-sdk==2.12.0 ; python_version >= "3.10" and python_version < "3.13" six==1.16.0 ; python_version >= "3.10" and python_version < "3.13" sniffio==1.3.1 ; python_version >= "3.10" and python_version < "3.13" -textual==0.85.2 ; python_version >= "3.10" and python_version < "3.13" typing-extensions==4.12.2 ; python_version >= "3.10" and python_version < "3.13" -uc-micro-py==1.0.3 ; python_version >= "3.10" and python_version < "3.13" urllib3==2.2.2 ; python_version >= "3.10" and python_version < "3.13" uvicorn==0.30.1 ; python_version >= "3.10" and python_version < "3.13" uvloop==0.19.0 ; python_version >= "3.10" and python_version < "3.13" From aa23745dc3d5dc9c07fbcd77b69dda296693669f Mon Sep 17 00:00:00 2001 From: Roman Vlasenko Date: Sun, 1 Dec 2024 00:46:29 +0300 Subject: [PATCH 3/5] Update sentry to 2.19.0 --- poetry.lock | 16 ++++++++++------ pyproject.toml | 2 +- requirements-server.txt | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index 016da54..ab94d0d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1828,13 +1828,13 @@ sentry-sdk = ">=2.0.0" [[package]] name = "sentry-sdk" -version = "2.12.0" +version = "2.19.0" description = "Python client for Sentry (https://sentry.io)" optional = false python-versions = ">=3.6" files = [ - {file = "sentry_sdk-2.12.0-py2.py3-none-any.whl", hash = "sha256:7a8d5163d2ba5c5f4464628c6b68f85e86972f7c636acc78aed45c61b98b7a5e"}, - {file = "sentry_sdk-2.12.0.tar.gz", hash = "sha256:8763840497b817d44c49b3fe3f5f7388d083f2337ffedf008b2cdb63b5c86dc6"}, + {file = "sentry_sdk-2.19.0-py2.py3-none-any.whl", hash = "sha256:7b0b3b709dee051337244a09a30dbf6e95afe0d34a1f8b430d45e0982a7c125b"}, + {file = "sentry_sdk-2.19.0.tar.gz", hash = "sha256:ee4a4d2ae8bfe3cac012dcf3e4607975904c137e1738116549fc3dbbb6ff0e36"}, ] [package.dependencies] @@ -1857,15 +1857,19 @@ falcon = ["falcon (>=1.4)"] fastapi = ["fastapi (>=0.79.0)"] flask = ["blinker (>=1.1)", "flask (>=0.11)", "markupsafe"] grpcio = ["grpcio (>=1.21.1)", "protobuf (>=3.8.0)"] +http2 = ["httpcore[http2] (==1.*)"] httpx = ["httpx (>=0.16.0)"] huey = ["huey (>=2)"] -huggingface-hub = ["huggingface-hub (>=0.22)"] +huggingface-hub = ["huggingface_hub (>=0.22)"] langchain = ["langchain (>=0.0.210)"] +launchdarkly = ["launchdarkly-server-sdk (>=9.8.0)"] +litestar = ["litestar (>=2.0.0)"] loguru = ["loguru (>=0.5)"] openai = ["openai (>=1.0.0)", "tiktoken (>=0.3.0)"] +openfeature = ["openfeature-sdk (>=0.7.1)"] opentelemetry = ["opentelemetry-distro (>=0.35b0)"] opentelemetry-experimental = ["opentelemetry-distro"] -pure-eval = ["asttokens", "executing", "pure-eval"] +pure-eval = ["asttokens", "executing", "pure_eval"] pymongo = ["pymongo (>=3.1)"] pyspark = ["pyspark (>=2.4.4)"] quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] @@ -2387,4 +2391,4 @@ server = ["aioprometheus", "auth0-python", "blacksheep", "pyjwt", "redis", "uvic [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "2e36f2e5ef54e2041891fc38b5e2789aa24fa8343792390fd6eba20b1b90b428" +content-hash = "bde39733ca586409498b134510a530bb74b89e97217de872a7f8e9763251050a" diff --git a/pyproject.toml b/pyproject.toml index f2f1a1e..c7f0e77 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,7 +45,7 @@ textual-dev = { version = "^1.5.0", optional = true } pytest-textual-snapshot = { version = "^0.4.0", optional = true } async-timeout = { version = "^4.0.3", markers = "python_version < '3.11'" } backports-strenum = { version = "^1.2.8", markers = "python_version < '3.11'" } -sentry-sdk = "^2.8.0" +sentry-sdk = "^2.19.0" aioprometheus = {version = "^23.3.0", optional = true} copykitten = { version = "^1.2.1", optional = true } tenacity = { version = "^8.4.1", optional = true } diff --git a/requirements-server.txt b/requirements-server.txt index e53216f..c008667 100644 --- a/requirements-server.txt +++ b/requirements-server.txt @@ -45,7 +45,7 @@ quantile-python==1.1 ; python_version >= "3.10" and python_version < "3.13" redis==5.0.6 ; python_version >= "3.10" and python_version < "3.13" requests==2.32.3 ; python_version >= "3.10" and python_version < "3.13" rodi==2.0.6 ; python_version >= "3.10" and python_version < "3.13" -sentry-sdk==2.12.0 ; python_version >= "3.10" and python_version < "3.13" +sentry-sdk==2.19.0 ; python_version >= "3.10" and python_version < "3.13" six==1.16.0 ; python_version >= "3.10" and python_version < "3.13" sniffio==1.3.1 ; python_version >= "3.10" and python_version < "3.13" typing-extensions==4.12.2 ; python_version >= "3.10" and python_version < "3.13" From de79d16fd72b3e078d520f804d0b9f1d7d17f28f Mon Sep 17 00:00:00 2001 From: Roman Vlasenko Date: Sun, 1 Dec 2024 00:47:17 +0300 Subject: [PATCH 4/5] Update pyjwt to 2.10.1 --- poetry.lock | 14 +++++++------- pyproject.toml | 2 +- requirements-server.txt | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/poetry.lock b/poetry.lock index ab94d0d..00b8380 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1567,13 +1567,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyjwt" -version = "2.8.0" +version = "2.10.1" description = "JSON Web Token implementation in Python" optional = true -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, - {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, + {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, + {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, ] [package.dependencies] @@ -1581,8 +1581,8 @@ cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"cryp [package.extras] crypto = ["cryptography (>=3.4.0)"] -dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] -docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] @@ -2391,4 +2391,4 @@ server = ["aioprometheus", "auth0-python", "blacksheep", "pyjwt", "redis", "uvic [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "bde39733ca586409498b134510a530bb74b89e97217de872a7f8e9763251050a" +content-hash = "072a97a3e4577a06f45094a1a56cd82a950283bafccf830a3f9cd737130a9e99" diff --git a/pyproject.toml b/pyproject.toml index c7f0e77..7003439 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ uvicorn = { version = "^0.30.0", optional = true } httpx = "^0.27.0" pydantic = "^2.7.0" pydantic-settings = "^2.3.0" -pyjwt = {extras = ["crypto"], version = "^2.8.0", optional = true} +pyjwt = {extras = ["crypto"], version = "^2.10.1", optional = true} uvloop = { version = "^0.19.0", optional = true } email-validator = "^2.2.0" auth0-python = { version = "^4.5.0", optional = true } diff --git a/requirements-server.txt b/requirements-server.txt index c008667..1b8d4ea 100644 --- a/requirements-server.txt +++ b/requirements-server.txt @@ -35,8 +35,8 @@ pycparser==2.22 ; python_version >= "3.10" and python_version < "3.13" and platf pydantic-core==2.18.4 ; python_version >= "3.10" and python_version < "3.13" pydantic-settings==2.3.3 ; python_version >= "3.10" and python_version < "3.13" pydantic==2.7.4 ; python_version >= "3.10" and python_version < "3.13" -pyjwt==2.8.0 ; python_version >= "3.10" and python_version < "3.13" -pyjwt[crypto]==2.8.0 ; python_version >= "3.10" and python_version < "3.13" +pyjwt==2.10.1 ; python_version >= "3.10" and python_version < "3.13" +pyjwt[crypto]==2.10.1 ; python_version >= "3.10" and python_version < "3.13" pymitter==0.5.1 ; python_version >= "3.10" and python_version < "3.13" python-dateutil==2.8.2 ; python_version >= "3.10" and python_version < "3.13" python-dotenv==1.0.1 ; python_version >= "3.10" and python_version < "3.13" From a38d267f9ea7cfc793fb47bf6bc46e110012f9c2 Mon Sep 17 00:00:00 2001 From: Roman Vlasenko Date: Sun, 1 Dec 2024 00:52:08 +0300 Subject: [PATCH 5/5] Update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7e41e6..53d964c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - The Fleet widget displays the number of ships `[alive/total]` in its header. - Computer player doesn't shoot cells, adjacent to a destroyed ship when `No adjacent ships` rule is enabled. +### Changed +- Updated Textual, sentry-sdk, pyjwt. ## [0.24.1] - 2024-08-30 ### Fixed