gukebox 1.5.0.dev5__tar.gz → 1.6.0__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.
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/PKG-INFO +13 -1
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/README.md +12 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/pyproject.toml +1 -1
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/pyproject.toml.orig +1 -1
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/LICENSE +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/api/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/api/current_tag_router.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/api/discs_router.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/api/models.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/api/settings_router.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/api_controller.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/cli_controller.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/cli_display.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/interactive_cli_controller.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/static/assets/index-BO2APuhR.css +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/static/assets/index-CMsFPWoj.js +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/static/favicon.svg +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/static/index.html +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/ui_controller.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/ui_pages/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/ui_pages/library.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/ui_pages/settings.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/ui_pages/sonos.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/cli_controller.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/json_library_adapter.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/players/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/players/dryrun_player_adapter.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/players/sonos_player_adapter.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/readers/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/readers/dryrun_reader_adapter.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/readers/pn532_reader_adapter.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/sonos_discovery_adapter.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/text_current_tag_adapter.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/app.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/cli_presentation.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/command_handlers.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/commands.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/di_container.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/library_command_handlers.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/library_commands.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/pn532_command_handlers.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/pn532_commands.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/services.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/sonos_households.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/app.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/di_container.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/current_tag_state.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/current_tag_status.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/disc.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/library.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/playback_state.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/tag_event.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/errors.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/ports/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/ports/player_port.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/ports/reader_port.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/repositories/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/repositories/current_tag_repository.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/repositories/library_repository.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/handle_tag_event.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/add_disc.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/edit_disc.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/get_current_tag_status.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/get_disc.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/list_discs.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/remove_disc.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/resolve_tag_id.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/search_discs.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/sync_current_tag.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/transition_current_tag.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/transition_playback.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/pn532/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/pn532/profiles.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/definitions.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/dict_utils.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/entities.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/errors.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/file_settings_repository.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/migration.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/repositories.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/resolve.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/runtime_resolver.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/runtime_validation.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/selected_sonos_group_repository.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/service_protocols.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/timing_validation.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/types.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/validation_rules.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/view_utils.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/shared/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/shared/config_utils.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/shared/errors.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/shared/logger.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/shared/terminal_ui.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/shared/timing.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/sonos/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/sonos/discovery.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/sonos/selection.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/sonos/service.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/pn532/__init__.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/pn532/pn532.py +0 -0
- {gukebox-1.5.0.dev5 → gukebox-1.6.0}/pn532/spi.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: gukebox
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.6.0
|
|
4
4
|
Summary: A Jukebox to play music on speakers using 'CD' with NFC tag
|
|
5
5
|
Keywords: jukebox,music,nfc
|
|
6
6
|
Author: Gudsfile
|
|
@@ -240,6 +240,9 @@ uv run --extra api jukebox-admin api
|
|
|
240
240
|
uv run --extra ui jukebox-admin ui
|
|
241
241
|
```
|
|
242
242
|
|
|
243
|
+
> [!NOTE]
|
|
244
|
+
> The admin UI is being migrated from FastUI to a Svelte SPA (see `admin-ui/`). Both currently coexist within the `jukebox-admin ui` process: FastUI serves `/`, while the new SPA is mounted at `/ui`.
|
|
245
|
+
|
|
243
246
|
#### `library`
|
|
244
247
|
|
|
245
248
|
The `library` command lets you manage the library through a CLI or an interactive CLI:
|
|
@@ -367,6 +370,15 @@ uv run --extra ui jukebox-admin ui
|
|
|
367
370
|
| `uv run ruff check --fix` | Fix the code. |
|
|
368
371
|
| `uv run pytest` | Run the tests. |
|
|
369
372
|
|
|
373
|
+
The new admin UI, a Svelte + Vite SPA, lives in `admin-ui/` (see `admin-ui/README.md`):
|
|
374
|
+
```shell
|
|
375
|
+
cd admin-ui
|
|
376
|
+
npm install
|
|
377
|
+
npm run dev # dev server
|
|
378
|
+
npm run build # static bundle for packaging into the Python app
|
|
379
|
+
npm test # vitest
|
|
380
|
+
```
|
|
381
|
+
|
|
370
382
|
### Pre-commit
|
|
371
383
|
|
|
372
384
|
[prek](https://github.com/j178/prek) is configured; you can [install it](https://github.com/j178/prek?tab=readme-ov-file#installation) to automatically run validations on each commit.
|
|
@@ -187,6 +187,9 @@ uv run --extra api jukebox-admin api
|
|
|
187
187
|
uv run --extra ui jukebox-admin ui
|
|
188
188
|
```
|
|
189
189
|
|
|
190
|
+
> [!NOTE]
|
|
191
|
+
> The admin UI is being migrated from FastUI to a Svelte SPA (see `admin-ui/`). Both currently coexist within the `jukebox-admin ui` process: FastUI serves `/`, while the new SPA is mounted at `/ui`.
|
|
192
|
+
|
|
190
193
|
#### `library`
|
|
191
194
|
|
|
192
195
|
The `library` command lets you manage the library through a CLI or an interactive CLI:
|
|
@@ -314,6 +317,15 @@ uv run --extra ui jukebox-admin ui
|
|
|
314
317
|
| `uv run ruff check --fix` | Fix the code. |
|
|
315
318
|
| `uv run pytest` | Run the tests. |
|
|
316
319
|
|
|
320
|
+
The new admin UI, a Svelte + Vite SPA, lives in `admin-ui/` (see `admin-ui/README.md`):
|
|
321
|
+
```shell
|
|
322
|
+
cd admin-ui
|
|
323
|
+
npm install
|
|
324
|
+
npm run dev # dev server
|
|
325
|
+
npm run build # static bundle for packaging into the Python app
|
|
326
|
+
npm test # vitest
|
|
327
|
+
```
|
|
328
|
+
|
|
317
329
|
### Pre-commit
|
|
318
330
|
|
|
319
331
|
[prek](https://github.com/j178/prek) is configured; you can [install it](https://github.com/j178/prek?tab=readme-ov-file#installation) to automatically run validations on each commit.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/api/current_tag_router.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/interactive_cli_controller.py
RENAMED
|
File without changes
|
{gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/static/assets/index-BO2APuhR.css
RENAMED
|
File without changes
|
{gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/static/assets/index-CMsFPWoj.js
RENAMED
|
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
|
{gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/players/dryrun_player_adapter.py
RENAMED
|
File without changes
|
{gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/players/sonos_player_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
{gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/readers/dryrun_reader_adapter.py
RENAMED
|
File without changes
|
{gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/readers/pn532_reader_adapter.py
RENAMED
|
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
|
{gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/get_current_tag_status.py
RENAMED
|
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
|