typefaster-cli 0.1.2__tar.gz → 0.1.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/PKG-INFO +1 -1
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/__init__.py +1 -1
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/online_race.py +4 -7
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/pyproject.toml +1 -1
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/.dockerignore +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/.env.example +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/.github/dependabot.yml +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/.github/workflows/ci.yml +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/.github/workflows/codeql.yml +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/.github/workflows/release.yml +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/.gitignore +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/CONTRIBUTING.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/LICENSE +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/Makefile +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/README.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/SECURITY.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/Dockerfile +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/__main__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/assets/__init__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/assets/quotes.json +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/cli.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/domain/__init__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/domain/anti_cheat.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/domain/calculators.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/domain/errors.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/domain/ghost.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/domain/models.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/domain/typing_engine.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/infra/__init__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/infra/clock.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/infra/config.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/infra/db.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/infra/migrations.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/infra/paths.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/infra/quote_loader.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/infra/replay_store.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/infra/repository.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/infra/sqlite_repository.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/net/__init__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/net/api.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/net/commands.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/net/token_store.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/services/__init__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/services/container.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/services/daily_service.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/services/ghost_service.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/services/profile_service.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/services/race_service.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/services/stats_service.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/__init__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/app.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/online_app.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/__init__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/_base.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/daily.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/help.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/history.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/leaderboard.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/main_menu.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/practice.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/profile.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/race.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/results.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/settings.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/screens/stats.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/theme.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/widgets/__init__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/widgets/bigtext.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/widgets/live_stats.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/widgets/progress_bars.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/client/typefaster/ui/widgets/typing_field.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/docker-compose.yml +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/docs/RELEASING.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/docs/api-spec.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/docs/architecture.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/docs/deploy-fly.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/docs/deployment.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/docs/online-setup.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/docs/redis-schema.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/docs/roadmap.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/docs/sqlite-schema.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/docs/ui-design.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/docs/websocket-protocol.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/fly.toml +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/infra/README.md +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/infra/nginx/nginx.conf +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/infra/redis/redis.conf +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/packaging/homebrew/typefaster.rb +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/scripts/seed_quotes.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/Dockerfile +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/__init__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/config.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/deps.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/logging_config.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/main.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/quotes.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/redis_keys.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/repositories.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/routers/__init__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/routers/auth.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/routers/health.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/routers/leaderboards.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/routers/lobbies.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/routers/oauth.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/security.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/ws/__init__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/app/ws/manager.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/pyproject.toml +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/tests/__init__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/tests/conftest.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/tests/test_auth.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/tests/test_health_leaderboards.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/tests/test_lobbies.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/tests/test_oauth.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/tests/test_scoring_anticheat.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/server/tests/test_ws_race.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/shared/pyproject.toml +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/shared/typefaster_shared/__init__.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/shared/typefaster_shared/anti_cheat.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/shared/typefaster_shared/dto.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/shared/typefaster_shared/events.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/shared/typefaster_shared/scoring.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/conftest.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/fixtures/.gitkeep +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/integration/test_container_and_cli.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/integration/test_migrations.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/integration/test_profile_stats.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/integration/test_race_service.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/integration/test_race_timing.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/integration/test_sqlite_repository.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/integration/test_ui_smoke.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/unit/test_anti_cheat.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/unit/test_calculators.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/unit/test_config.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/unit/test_ghost.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/unit/test_net.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/unit/test_quote_loader.py +0 -0
- {typefaster_cli-0.1.2 → typefaster_cli-0.1.3}/tests/unit/test_typing_engine.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: typefaster-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: A terminal-first typing game inspired by MonkeyType and TypeRacer.
|
|
5
5
|
Project-URL: Homepage, https://github.com/Anoshor/typefaster-cli
|
|
6
6
|
Project-URL: Repository, https://github.com/Anoshor/typefaster-cli
|
|
@@ -307,11 +307,8 @@ class OnlineRaceScreen(Screen[None]):
|
|
|
307
307
|
|
|
308
308
|
# ── exit ───────────────────────────────────────────────────────────
|
|
309
309
|
def action_leave(self) -> None:
|
|
310
|
+
# This screen IS the whole online app, so leaving exits cleanly back to
|
|
311
|
+
# the shell (popping the only screen would leave a blank screen). The
|
|
312
|
+
# server removes us from the lobby when the WebSocket closes on exit.
|
|
310
313
|
self.run_worker(self._send("LEAVE"), name="leave")
|
|
311
|
-
|
|
312
|
-
self.run_worker(self._close_ws(), name="close")
|
|
313
|
-
self.app.pop_screen()
|
|
314
|
-
|
|
315
|
-
async def _close_ws(self) -> None:
|
|
316
|
-
with contextlib.suppress(Exception):
|
|
317
|
-
await self._ws.close()
|
|
314
|
+
self.app.exit()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|