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.
Files changed (113) hide show
  1. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/PKG-INFO +13 -1
  2. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/README.md +12 -0
  3. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/pyproject.toml +1 -1
  4. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/pyproject.toml.orig +1 -1
  5. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/LICENSE +0 -0
  6. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/__init__.py +0 -0
  7. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/__init__.py +0 -0
  8. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/__init__.py +0 -0
  9. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/__init__.py +0 -0
  10. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/api/__init__.py +0 -0
  11. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/api/current_tag_router.py +0 -0
  12. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/api/discs_router.py +0 -0
  13. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/api/models.py +0 -0
  14. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/api/settings_router.py +0 -0
  15. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/api_controller.py +0 -0
  16. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/cli_controller.py +0 -0
  17. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/cli_display.py +0 -0
  18. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/interactive_cli_controller.py +0 -0
  19. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/static/assets/index-BO2APuhR.css +0 -0
  20. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/static/assets/index-CMsFPWoj.js +0 -0
  21. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/static/favicon.svg +0 -0
  22. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/static/index.html +0 -0
  23. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/ui_controller.py +0 -0
  24. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/ui_pages/__init__.py +0 -0
  25. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/ui_pages/library.py +0 -0
  26. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/ui_pages/settings.py +0 -0
  27. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/admin/ui_pages/sonos.py +0 -0
  28. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/inbound/cli_controller.py +0 -0
  29. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/__init__.py +0 -0
  30. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/json_library_adapter.py +0 -0
  31. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/players/__init__.py +0 -0
  32. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/players/dryrun_player_adapter.py +0 -0
  33. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/players/sonos_player_adapter.py +0 -0
  34. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/readers/__init__.py +0 -0
  35. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/readers/dryrun_reader_adapter.py +0 -0
  36. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/readers/pn532_reader_adapter.py +0 -0
  37. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/sonos_discovery_adapter.py +0 -0
  38. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/adapters/outbound/text_current_tag_adapter.py +0 -0
  39. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/__init__.py +0 -0
  40. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/app.py +0 -0
  41. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/cli_presentation.py +0 -0
  42. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/command_handlers.py +0 -0
  43. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/commands.py +0 -0
  44. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/di_container.py +0 -0
  45. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/library_command_handlers.py +0 -0
  46. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/library_commands.py +0 -0
  47. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/pn532_command_handlers.py +0 -0
  48. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/pn532_commands.py +0 -0
  49. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/services.py +0 -0
  50. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/admin/sonos_households.py +0 -0
  51. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/app.py +0 -0
  52. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/di_container.py +0 -0
  53. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/__init__.py +0 -0
  54. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/__init__.py +0 -0
  55. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/current_tag_state.py +0 -0
  56. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/current_tag_status.py +0 -0
  57. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/disc.py +0 -0
  58. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/library.py +0 -0
  59. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/playback_state.py +0 -0
  60. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/entities/tag_event.py +0 -0
  61. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/errors.py +0 -0
  62. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/ports/__init__.py +0 -0
  63. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/ports/player_port.py +0 -0
  64. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/ports/reader_port.py +0 -0
  65. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/repositories/__init__.py +0 -0
  66. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/repositories/current_tag_repository.py +0 -0
  67. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/repositories/library_repository.py +0 -0
  68. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/__init__.py +0 -0
  69. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/handle_tag_event.py +0 -0
  70. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/__init__.py +0 -0
  71. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/add_disc.py +0 -0
  72. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/edit_disc.py +0 -0
  73. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/get_current_tag_status.py +0 -0
  74. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/get_disc.py +0 -0
  75. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/list_discs.py +0 -0
  76. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/remove_disc.py +0 -0
  77. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/resolve_tag_id.py +0 -0
  78. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/library/search_discs.py +0 -0
  79. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/sync_current_tag.py +0 -0
  80. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/transition_current_tag.py +0 -0
  81. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/domain/use_cases/transition_playback.py +0 -0
  82. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/pn532/__init__.py +0 -0
  83. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/pn532/profiles.py +0 -0
  84. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/__init__.py +0 -0
  85. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/definitions.py +0 -0
  86. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/dict_utils.py +0 -0
  87. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/entities.py +0 -0
  88. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/errors.py +0 -0
  89. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/file_settings_repository.py +0 -0
  90. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/migration.py +0 -0
  91. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/repositories.py +0 -0
  92. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/resolve.py +0 -0
  93. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/runtime_resolver.py +0 -0
  94. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/runtime_validation.py +0 -0
  95. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/selected_sonos_group_repository.py +0 -0
  96. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/service_protocols.py +0 -0
  97. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/timing_validation.py +0 -0
  98. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/types.py +0 -0
  99. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/validation_rules.py +0 -0
  100. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/settings/view_utils.py +0 -0
  101. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/shared/__init__.py +0 -0
  102. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/shared/config_utils.py +0 -0
  103. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/shared/errors.py +0 -0
  104. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/shared/logger.py +0 -0
  105. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/shared/terminal_ui.py +0 -0
  106. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/shared/timing.py +0 -0
  107. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/sonos/__init__.py +0 -0
  108. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/sonos/discovery.py +0 -0
  109. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/sonos/selection.py +0 -0
  110. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/jukebox/sonos/service.py +0 -0
  111. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/pn532/__init__.py +0 -0
  112. {gukebox-1.5.0.dev5 → gukebox-1.6.0}/pn532/pn532.py +0 -0
  113. {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.5.0.dev5
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.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "gukebox"
3
- version = "1.5.0.dev5"
3
+ version = "1.6.0"
4
4
  description = "A Jukebox to play music on speakers using 'CD' with NFC tag"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11,<3.14"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "gukebox"
3
- version = "1.5.0.dev5"
3
+ version = "1.6.0"
4
4
  description = "A Jukebox to play music on speakers using 'CD' with NFC tag"
5
5
  authors = [{ name = "Gudsfile" }]
6
6
  readme = "README.md"
File without changes
File without changes
File without changes
File without changes
File without changes