MacroSignage 0.2.2__tar.gz → 0.2.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.
- {macrosignage-0.2.2/src/MacroSignage.egg-info → macrosignage-0.2.3}/PKG-INFO +22 -22
- {macrosignage-0.2.2 → macrosignage-0.2.3}/README.md +21 -21
- {macrosignage-0.2.2 → macrosignage-0.2.3}/pyproject.toml +1 -1
- {macrosignage-0.2.2 → macrosignage-0.2.3/src/MacroSignage.egg-info}/PKG-INFO +22 -22
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/__init__.py +1 -1
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/app.py +1 -1
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/web/templates/web/index.html +1 -1
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_docs.py +37 -11
- {macrosignage-0.2.2 → macrosignage-0.2.3}/LICENSE +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/setup.cfg +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/MacroSignage.egg-info/SOURCES.txt +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/MacroSignage.egg-info/dependency_links.txt +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/MacroSignage.egg-info/entry_points.txt +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/MacroSignage.egg-info/requires.txt +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/MacroSignage.egg-info/top_level.txt +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/cli.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/config.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/diagnostics.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/extensions.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/__init__.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/__init__.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/forms.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/models.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/routes.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/services.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/api_tokens/list.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/dashboard.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/database.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/displays/detail.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/displays/form.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/displays/list.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/fonts/form.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/fonts/list.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/logo.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/media/detail.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/media/form.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/media/list.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/schedules/detail.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/schedules/form.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/schedules/list.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/settings.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/users/detail.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/users/form.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/users/list.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/api/__init__.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/api/routes.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/api/serializers.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/associations.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/__init__.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/api_token_forms.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/forms.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/models.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/permissions.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/routes.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/services.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/templates/auth/login.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/templates/auth/password_reset_form.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/templates/auth/password_reset_request.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/templates/auth/setup.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/token_routes.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/displays/__init__.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/displays/forms.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/displays/models.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/displays/routes.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/displays/services.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/displays/templates/displays/maintenance.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/displays/templates/displays/offline.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/displays/templates/displays/pair_failed.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/displays/templates/displays/player.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/displays/templates/displays/unauthorized.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/media/__init__.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/media/forms.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/media/models.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/media/routes.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/media/services.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/schedules/__init__.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/schedules/forms.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/schedules/models.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/schedules/routes.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/schedules/services.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/css/main.css +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/css/theme.css +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-dust-corner-bl.png +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-dust-corner-br.png +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-dust-corner-tl.png +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-dust-corner-tr.png +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-dust-overlay.png +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-dust-overlay.webp +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-mask.png +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-pattern-embedded.svg +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-pattern.svg +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-tile-1024.png +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-tile-1024.webp +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/js/display-player.js +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/js/main.js +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/vendor/animate/LICENSE +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/vendor/animate/animate.css +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/vendor/animate/animate.min.css +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/vendor/bootstrap/LICENSE +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/vendor/bootstrap/css/bootstrap.min.css +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/vendor/bootstrap/css/bootstrap.min.css.map +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/vendor/bootstrap/js/bootstrap.bundle.min.js +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/vendor/bootstrap/js/bootstrap.bundle.min.js.map +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/templates/errors/500.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/templates/layouts/_base.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/templates/layouts/admin.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/templates/layouts/auth.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/templates/pages/index.html +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/time_utils.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/web/__init__.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/web/routes.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_admin_crud.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_admin_dashboard.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_api.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_auth.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_cli.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_client_app.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_config.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_display_player.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_operational_readiness.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_production_hardening.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_release_workflows.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_slider_media.py +0 -0
- {macrosignage-0.2.2 → macrosignage-0.2.3}/tests/test_v05_polish_scale.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: MacroSignage
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: Web-based Digital Signage System
|
|
5
5
|
Author-email: Javier Baez <baezdevs@gmail.com>
|
|
6
6
|
Maintainer-email: Javier Baez <baezdevs@gmail.com>
|
|
@@ -42,12 +42,12 @@ Dynamic: license-file
|
|
|
42
42
|
|
|
43
43
|
[](https://pypi.org/project/MacroSignage/)
|
|
44
44
|
[](https://pypi.org/project/MacroSignage/)
|
|
45
|
-
[](LICENSE)
|
|
45
|
+
[](https://github.com/BaezFJ/MacroSignage/blob/master/LICENSE)
|
|
46
46
|
[](https://github.com/BaezFJ/MacroSignage/actions/workflows/ci.yml)
|
|
47
47
|
|
|
48
48
|
MacroSignage is a Flask-based digital signage manager with an admin console, token-secured display players, scheduling, media playback, REST API access, and a standalone pywebview display client.
|
|
49
49
|
|
|
50
|
-
> **Status:** Pre-alpha v0.2.
|
|
50
|
+
> **Status:** Pre-alpha v0.2.3. Data models and API contracts can change before v1.0.
|
|
51
51
|
|
|
52
52
|
## Features
|
|
53
53
|
|
|
@@ -98,7 +98,7 @@ MACROSIGNAGE_SESSION_COOKIE_SECURE=true \
|
|
|
98
98
|
macrosignage-prod --host 127.0.0.1 --port 8080 --threads 4
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
See [Deployment](docs/deployment.md) for systemd, Docker, HTTPS, health checks, backups, restore, and rollback.
|
|
101
|
+
See [Deployment](https://github.com/BaezFJ/MacroSignage/blob/master/docs/deployment.md) for systemd, Docker, HTTPS, health checks, backups, restore, and rollback.
|
|
102
102
|
|
|
103
103
|
## Client Executables
|
|
104
104
|
|
|
@@ -108,26 +108,26 @@ Prebuilt standalone display client executables are available on the GitHub Relea
|
|
|
108
108
|
https://github.com/BaezFJ/MacroSignage/releases
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
-
The client source package lives in `client/`. See [Standalone Client](docs/client.md).
|
|
111
|
+
The client source package lives in `client/`. See [Standalone Client](https://github.com/BaezFJ/MacroSignage/blob/master/docs/client.md).
|
|
112
112
|
|
|
113
113
|
## Documentation
|
|
114
114
|
|
|
115
|
-
Start with [docs/index.md](docs/index.md).
|
|
115
|
+
Start with [docs/index.md](https://github.com/BaezFJ/MacroSignage/blob/master/docs/index.md).
|
|
116
116
|
|
|
117
117
|
Core guides:
|
|
118
118
|
|
|
119
|
-
- [Installation](docs/installation.md)
|
|
120
|
-
- [Configuration](docs/configuration.md)
|
|
121
|
-
- [Auth and RBAC](docs/auth-rbac.md)
|
|
122
|
-
- [Display Management and Player Pairing](docs/displays.md)
|
|
123
|
-
- [Media Library](docs/media.md)
|
|
124
|
-
- [Scheduling and Playback](docs/scheduling.md)
|
|
125
|
-
- [REST API](docs/rest-api.md)
|
|
126
|
-
- [API Tokens](docs/api-tokens.md)
|
|
127
|
-
- [Deployment](docs/deployment.md)
|
|
128
|
-
- [Troubleshooting](docs/troubleshooting.md)
|
|
129
|
-
- [Development](docs/development.md)
|
|
130
|
-
- [Architecture](docs/architecture.md)
|
|
119
|
+
- [Installation](https://github.com/BaezFJ/MacroSignage/blob/master/docs/installation.md)
|
|
120
|
+
- [Configuration](https://github.com/BaezFJ/MacroSignage/blob/master/docs/configuration.md)
|
|
121
|
+
- [Auth and RBAC](https://github.com/BaezFJ/MacroSignage/blob/master/docs/auth-rbac.md)
|
|
122
|
+
- [Display Management and Player Pairing](https://github.com/BaezFJ/MacroSignage/blob/master/docs/displays.md)
|
|
123
|
+
- [Media Library](https://github.com/BaezFJ/MacroSignage/blob/master/docs/media.md)
|
|
124
|
+
- [Scheduling and Playback](https://github.com/BaezFJ/MacroSignage/blob/master/docs/scheduling.md)
|
|
125
|
+
- [REST API](https://github.com/BaezFJ/MacroSignage/blob/master/docs/rest-api.md)
|
|
126
|
+
- [API Tokens](https://github.com/BaezFJ/MacroSignage/blob/master/docs/api-tokens.md)
|
|
127
|
+
- [Deployment](https://github.com/BaezFJ/MacroSignage/blob/master/docs/deployment.md)
|
|
128
|
+
- [Troubleshooting](https://github.com/BaezFJ/MacroSignage/blob/master/docs/troubleshooting.md)
|
|
129
|
+
- [Development](https://github.com/BaezFJ/MacroSignage/blob/master/docs/development.md)
|
|
130
|
+
- [Architecture](https://github.com/BaezFJ/MacroSignage/blob/master/docs/architecture.md)
|
|
131
131
|
|
|
132
132
|
## Development Commands
|
|
133
133
|
|
|
@@ -145,17 +145,17 @@ uv run twine check dist/*
|
|
|
145
145
|
- CI runs on pull requests and pushes to `main`.
|
|
146
146
|
- PyPI publishing runs when a `v*` tag is pushed.
|
|
147
147
|
- Client executable build and release workflows produce Windows, macOS, and Linux assets.
|
|
148
|
-
- Release documentation review is tracked in [the checklist](docs/release-documentation-checklist.md).
|
|
148
|
+
- Release documentation review is tracked in [the checklist](https://github.com/BaezFJ/MacroSignage/blob/master/docs/release-documentation-checklist.md).
|
|
149
149
|
|
|
150
150
|
## v1.0 Remaining Work
|
|
151
151
|
|
|
152
|
-
- [ ] Production-hardened and fully tested ([roadmap](docs/production-hardening-roadmap.md))
|
|
153
|
-
- [x] Complete documentation ([roadmap](docs/documentation-roadmap.md))
|
|
152
|
+
- [ ] Production-hardened and fully tested ([roadmap](https://github.com/BaezFJ/MacroSignage/blob/master/docs/production-hardening-roadmap.md))
|
|
153
|
+
- [x] Complete documentation ([roadmap](https://github.com/BaezFJ/MacroSignage/blob/master/docs/documentation-roadmap.md))
|
|
154
154
|
- [x] Deployment guides for Docker, systemd, health checks, backups, and rollback
|
|
155
155
|
|
|
156
156
|
## License
|
|
157
157
|
|
|
158
|
-
MacroSignage is licensed under the MIT License. See [LICENSE](LICENSE).
|
|
158
|
+
MacroSignage is licensed under the MIT License. See [LICENSE](https://github.com/BaezFJ/MacroSignage/blob/master/LICENSE).
|
|
159
159
|
|
|
160
160
|
Copyright (c) 2022 Javier Baez
|
|
161
161
|
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://pypi.org/project/MacroSignage/)
|
|
4
4
|
[](https://pypi.org/project/MacroSignage/)
|
|
5
|
-
[](LICENSE)
|
|
5
|
+
[](https://github.com/BaezFJ/MacroSignage/blob/master/LICENSE)
|
|
6
6
|
[](https://github.com/BaezFJ/MacroSignage/actions/workflows/ci.yml)
|
|
7
7
|
|
|
8
8
|
MacroSignage is a Flask-based digital signage manager with an admin console, token-secured display players, scheduling, media playback, REST API access, and a standalone pywebview display client.
|
|
9
9
|
|
|
10
|
-
> **Status:** Pre-alpha v0.2.
|
|
10
|
+
> **Status:** Pre-alpha v0.2.3. Data models and API contracts can change before v1.0.
|
|
11
11
|
|
|
12
12
|
## Features
|
|
13
13
|
|
|
@@ -58,7 +58,7 @@ MACROSIGNAGE_SESSION_COOKIE_SECURE=true \
|
|
|
58
58
|
macrosignage-prod --host 127.0.0.1 --port 8080 --threads 4
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
See [Deployment](docs/deployment.md) for systemd, Docker, HTTPS, health checks, backups, restore, and rollback.
|
|
61
|
+
See [Deployment](https://github.com/BaezFJ/MacroSignage/blob/master/docs/deployment.md) for systemd, Docker, HTTPS, health checks, backups, restore, and rollback.
|
|
62
62
|
|
|
63
63
|
## Client Executables
|
|
64
64
|
|
|
@@ -68,26 +68,26 @@ Prebuilt standalone display client executables are available on the GitHub Relea
|
|
|
68
68
|
https://github.com/BaezFJ/MacroSignage/releases
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
The client source package lives in `client/`. See [Standalone Client](docs/client.md).
|
|
71
|
+
The client source package lives in `client/`. See [Standalone Client](https://github.com/BaezFJ/MacroSignage/blob/master/docs/client.md).
|
|
72
72
|
|
|
73
73
|
## Documentation
|
|
74
74
|
|
|
75
|
-
Start with [docs/index.md](docs/index.md).
|
|
75
|
+
Start with [docs/index.md](https://github.com/BaezFJ/MacroSignage/blob/master/docs/index.md).
|
|
76
76
|
|
|
77
77
|
Core guides:
|
|
78
78
|
|
|
79
|
-
- [Installation](docs/installation.md)
|
|
80
|
-
- [Configuration](docs/configuration.md)
|
|
81
|
-
- [Auth and RBAC](docs/auth-rbac.md)
|
|
82
|
-
- [Display Management and Player Pairing](docs/displays.md)
|
|
83
|
-
- [Media Library](docs/media.md)
|
|
84
|
-
- [Scheduling and Playback](docs/scheduling.md)
|
|
85
|
-
- [REST API](docs/rest-api.md)
|
|
86
|
-
- [API Tokens](docs/api-tokens.md)
|
|
87
|
-
- [Deployment](docs/deployment.md)
|
|
88
|
-
- [Troubleshooting](docs/troubleshooting.md)
|
|
89
|
-
- [Development](docs/development.md)
|
|
90
|
-
- [Architecture](docs/architecture.md)
|
|
79
|
+
- [Installation](https://github.com/BaezFJ/MacroSignage/blob/master/docs/installation.md)
|
|
80
|
+
- [Configuration](https://github.com/BaezFJ/MacroSignage/blob/master/docs/configuration.md)
|
|
81
|
+
- [Auth and RBAC](https://github.com/BaezFJ/MacroSignage/blob/master/docs/auth-rbac.md)
|
|
82
|
+
- [Display Management and Player Pairing](https://github.com/BaezFJ/MacroSignage/blob/master/docs/displays.md)
|
|
83
|
+
- [Media Library](https://github.com/BaezFJ/MacroSignage/blob/master/docs/media.md)
|
|
84
|
+
- [Scheduling and Playback](https://github.com/BaezFJ/MacroSignage/blob/master/docs/scheduling.md)
|
|
85
|
+
- [REST API](https://github.com/BaezFJ/MacroSignage/blob/master/docs/rest-api.md)
|
|
86
|
+
- [API Tokens](https://github.com/BaezFJ/MacroSignage/blob/master/docs/api-tokens.md)
|
|
87
|
+
- [Deployment](https://github.com/BaezFJ/MacroSignage/blob/master/docs/deployment.md)
|
|
88
|
+
- [Troubleshooting](https://github.com/BaezFJ/MacroSignage/blob/master/docs/troubleshooting.md)
|
|
89
|
+
- [Development](https://github.com/BaezFJ/MacroSignage/blob/master/docs/development.md)
|
|
90
|
+
- [Architecture](https://github.com/BaezFJ/MacroSignage/blob/master/docs/architecture.md)
|
|
91
91
|
|
|
92
92
|
## Development Commands
|
|
93
93
|
|
|
@@ -105,17 +105,17 @@ uv run twine check dist/*
|
|
|
105
105
|
- CI runs on pull requests and pushes to `main`.
|
|
106
106
|
- PyPI publishing runs when a `v*` tag is pushed.
|
|
107
107
|
- Client executable build and release workflows produce Windows, macOS, and Linux assets.
|
|
108
|
-
- Release documentation review is tracked in [the checklist](docs/release-documentation-checklist.md).
|
|
108
|
+
- Release documentation review is tracked in [the checklist](https://github.com/BaezFJ/MacroSignage/blob/master/docs/release-documentation-checklist.md).
|
|
109
109
|
|
|
110
110
|
## v1.0 Remaining Work
|
|
111
111
|
|
|
112
|
-
- [ ] Production-hardened and fully tested ([roadmap](docs/production-hardening-roadmap.md))
|
|
113
|
-
- [x] Complete documentation ([roadmap](docs/documentation-roadmap.md))
|
|
112
|
+
- [ ] Production-hardened and fully tested ([roadmap](https://github.com/BaezFJ/MacroSignage/blob/master/docs/production-hardening-roadmap.md))
|
|
113
|
+
- [x] Complete documentation ([roadmap](https://github.com/BaezFJ/MacroSignage/blob/master/docs/documentation-roadmap.md))
|
|
114
114
|
- [x] Deployment guides for Docker, systemd, health checks, backups, and rollback
|
|
115
115
|
|
|
116
116
|
## License
|
|
117
117
|
|
|
118
|
-
MacroSignage is licensed under the MIT License. See [LICENSE](LICENSE).
|
|
118
|
+
MacroSignage is licensed under the MIT License. See [LICENSE](https://github.com/BaezFJ/MacroSignage/blob/master/LICENSE).
|
|
119
119
|
|
|
120
120
|
Copyright (c) 2022 Javier Baez
|
|
121
121
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: MacroSignage
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: Web-based Digital Signage System
|
|
5
5
|
Author-email: Javier Baez <baezdevs@gmail.com>
|
|
6
6
|
Maintainer-email: Javier Baez <baezdevs@gmail.com>
|
|
@@ -42,12 +42,12 @@ Dynamic: license-file
|
|
|
42
42
|
|
|
43
43
|
[](https://pypi.org/project/MacroSignage/)
|
|
44
44
|
[](https://pypi.org/project/MacroSignage/)
|
|
45
|
-
[](LICENSE)
|
|
45
|
+
[](https://github.com/BaezFJ/MacroSignage/blob/master/LICENSE)
|
|
46
46
|
[](https://github.com/BaezFJ/MacroSignage/actions/workflows/ci.yml)
|
|
47
47
|
|
|
48
48
|
MacroSignage is a Flask-based digital signage manager with an admin console, token-secured display players, scheduling, media playback, REST API access, and a standalone pywebview display client.
|
|
49
49
|
|
|
50
|
-
> **Status:** Pre-alpha v0.2.
|
|
50
|
+
> **Status:** Pre-alpha v0.2.3. Data models and API contracts can change before v1.0.
|
|
51
51
|
|
|
52
52
|
## Features
|
|
53
53
|
|
|
@@ -98,7 +98,7 @@ MACROSIGNAGE_SESSION_COOKIE_SECURE=true \
|
|
|
98
98
|
macrosignage-prod --host 127.0.0.1 --port 8080 --threads 4
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
See [Deployment](docs/deployment.md) for systemd, Docker, HTTPS, health checks, backups, restore, and rollback.
|
|
101
|
+
See [Deployment](https://github.com/BaezFJ/MacroSignage/blob/master/docs/deployment.md) for systemd, Docker, HTTPS, health checks, backups, restore, and rollback.
|
|
102
102
|
|
|
103
103
|
## Client Executables
|
|
104
104
|
|
|
@@ -108,26 +108,26 @@ Prebuilt standalone display client executables are available on the GitHub Relea
|
|
|
108
108
|
https://github.com/BaezFJ/MacroSignage/releases
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
-
The client source package lives in `client/`. See [Standalone Client](docs/client.md).
|
|
111
|
+
The client source package lives in `client/`. See [Standalone Client](https://github.com/BaezFJ/MacroSignage/blob/master/docs/client.md).
|
|
112
112
|
|
|
113
113
|
## Documentation
|
|
114
114
|
|
|
115
|
-
Start with [docs/index.md](docs/index.md).
|
|
115
|
+
Start with [docs/index.md](https://github.com/BaezFJ/MacroSignage/blob/master/docs/index.md).
|
|
116
116
|
|
|
117
117
|
Core guides:
|
|
118
118
|
|
|
119
|
-
- [Installation](docs/installation.md)
|
|
120
|
-
- [Configuration](docs/configuration.md)
|
|
121
|
-
- [Auth and RBAC](docs/auth-rbac.md)
|
|
122
|
-
- [Display Management and Player Pairing](docs/displays.md)
|
|
123
|
-
- [Media Library](docs/media.md)
|
|
124
|
-
- [Scheduling and Playback](docs/scheduling.md)
|
|
125
|
-
- [REST API](docs/rest-api.md)
|
|
126
|
-
- [API Tokens](docs/api-tokens.md)
|
|
127
|
-
- [Deployment](docs/deployment.md)
|
|
128
|
-
- [Troubleshooting](docs/troubleshooting.md)
|
|
129
|
-
- [Development](docs/development.md)
|
|
130
|
-
- [Architecture](docs/architecture.md)
|
|
119
|
+
- [Installation](https://github.com/BaezFJ/MacroSignage/blob/master/docs/installation.md)
|
|
120
|
+
- [Configuration](https://github.com/BaezFJ/MacroSignage/blob/master/docs/configuration.md)
|
|
121
|
+
- [Auth and RBAC](https://github.com/BaezFJ/MacroSignage/blob/master/docs/auth-rbac.md)
|
|
122
|
+
- [Display Management and Player Pairing](https://github.com/BaezFJ/MacroSignage/blob/master/docs/displays.md)
|
|
123
|
+
- [Media Library](https://github.com/BaezFJ/MacroSignage/blob/master/docs/media.md)
|
|
124
|
+
- [Scheduling and Playback](https://github.com/BaezFJ/MacroSignage/blob/master/docs/scheduling.md)
|
|
125
|
+
- [REST API](https://github.com/BaezFJ/MacroSignage/blob/master/docs/rest-api.md)
|
|
126
|
+
- [API Tokens](https://github.com/BaezFJ/MacroSignage/blob/master/docs/api-tokens.md)
|
|
127
|
+
- [Deployment](https://github.com/BaezFJ/MacroSignage/blob/master/docs/deployment.md)
|
|
128
|
+
- [Troubleshooting](https://github.com/BaezFJ/MacroSignage/blob/master/docs/troubleshooting.md)
|
|
129
|
+
- [Development](https://github.com/BaezFJ/MacroSignage/blob/master/docs/development.md)
|
|
130
|
+
- [Architecture](https://github.com/BaezFJ/MacroSignage/blob/master/docs/architecture.md)
|
|
131
131
|
|
|
132
132
|
## Development Commands
|
|
133
133
|
|
|
@@ -145,17 +145,17 @@ uv run twine check dist/*
|
|
|
145
145
|
- CI runs on pull requests and pushes to `main`.
|
|
146
146
|
- PyPI publishing runs when a `v*` tag is pushed.
|
|
147
147
|
- Client executable build and release workflows produce Windows, macOS, and Linux assets.
|
|
148
|
-
- Release documentation review is tracked in [the checklist](docs/release-documentation-checklist.md).
|
|
148
|
+
- Release documentation review is tracked in [the checklist](https://github.com/BaezFJ/MacroSignage/blob/master/docs/release-documentation-checklist.md).
|
|
149
149
|
|
|
150
150
|
## v1.0 Remaining Work
|
|
151
151
|
|
|
152
|
-
- [ ] Production-hardened and fully tested ([roadmap](docs/production-hardening-roadmap.md))
|
|
153
|
-
- [x] Complete documentation ([roadmap](docs/documentation-roadmap.md))
|
|
152
|
+
- [ ] Production-hardened and fully tested ([roadmap](https://github.com/BaezFJ/MacroSignage/blob/master/docs/production-hardening-roadmap.md))
|
|
153
|
+
- [x] Complete documentation ([roadmap](https://github.com/BaezFJ/MacroSignage/blob/master/docs/documentation-roadmap.md))
|
|
154
154
|
- [x] Deployment guides for Docker, systemd, health checks, backups, and rollback
|
|
155
155
|
|
|
156
156
|
## License
|
|
157
157
|
|
|
158
|
-
MacroSignage is licensed under the MIT License. See [LICENSE](LICENSE).
|
|
158
|
+
MacroSignage is licensed under the MIT License. See [LICENSE](https://github.com/BaezFJ/MacroSignage/blob/master/LICENSE).
|
|
159
159
|
|
|
160
160
|
Copyright (c) 2022 Javier Baez
|
|
161
161
|
|
|
@@ -348,7 +348,7 @@ macrosignage dev</code></pre>
|
|
|
348
348
|
<p class="eyebrow">Roadmap</p>
|
|
349
349
|
<h2 class="display-6 fw-semibold">Where MacroSignage is heading.</h2>
|
|
350
350
|
<p class="section-lead">
|
|
351
|
-
Pre-Alpha today (v0.2.
|
|
351
|
+
Pre-Alpha today (v0.2.3). Tracking toward a stable v1.0.
|
|
352
352
|
</p>
|
|
353
353
|
</header>
|
|
354
354
|
|
|
@@ -7,6 +7,7 @@ from pathlib import Path
|
|
|
7
7
|
ROOT = Path(__file__).resolve().parents[1]
|
|
8
8
|
MARKDOWN_FILES = [ROOT / "README.md", ROOT / "client" / "README.md", *sorted((ROOT / "docs").rglob("*.md"))]
|
|
9
9
|
LINK_PATTERN = re.compile(r"(?<!!)\[[^\]]+\]\((?!https?://|mailto:)([^)]+)\)")
|
|
10
|
+
GITHUB_BLOB_PREFIX = "https://github.com/BaezFJ/MacroSignage/blob/master/"
|
|
10
11
|
HEADING_PATTERN = re.compile(r"^(#{1,6})\s+(.+?)\s*$", re.MULTILINE)
|
|
11
12
|
|
|
12
13
|
|
|
@@ -44,6 +45,20 @@ def split_link(raw_link: str) -> tuple[str, str]:
|
|
|
44
45
|
return target, ""
|
|
45
46
|
|
|
46
47
|
|
|
48
|
+
def assert_link_resolves(source: Path, raw_link: str, failures: list[str], anchor_cache: dict[Path, set[str]]) -> None:
|
|
49
|
+
target_path, fragment = split_link(raw_link)
|
|
50
|
+
if not target_path and not fragment:
|
|
51
|
+
return
|
|
52
|
+
resolved = (source.parent / target_path).resolve() if target_path else source.resolve()
|
|
53
|
+
if not resolved.exists():
|
|
54
|
+
failures.append(f"{source.relative_to(ROOT)} -> {raw_link} missing file")
|
|
55
|
+
return
|
|
56
|
+
if fragment and resolved.suffix == ".md":
|
|
57
|
+
anchors = anchor_cache.setdefault(resolved, anchors_for(resolved))
|
|
58
|
+
if fragment not in anchors:
|
|
59
|
+
failures.append(f"{source.relative_to(ROOT)} -> {raw_link} missing anchor")
|
|
60
|
+
|
|
61
|
+
|
|
47
62
|
def test_markdown_local_links_resolve_to_files_and_anchors():
|
|
48
63
|
failures = []
|
|
49
64
|
anchor_cache: dict[Path, set[str]] = {}
|
|
@@ -51,21 +66,32 @@ def test_markdown_local_links_resolve_to_files_and_anchors():
|
|
|
51
66
|
for source in MARKDOWN_FILES:
|
|
52
67
|
text = source.read_text(encoding="utf-8")
|
|
53
68
|
for raw_link in LINK_PATTERN.findall(text):
|
|
54
|
-
|
|
55
|
-
if not target_path and not fragment:
|
|
56
|
-
continue
|
|
57
|
-
resolved = (source.parent / target_path).resolve() if target_path else source.resolve()
|
|
58
|
-
if not resolved.exists():
|
|
59
|
-
failures.append(f"{source.relative_to(ROOT)} -> {raw_link} missing file")
|
|
60
|
-
continue
|
|
61
|
-
if fragment and resolved.suffix == ".md":
|
|
62
|
-
anchors = anchor_cache.setdefault(resolved, anchors_for(resolved))
|
|
63
|
-
if fragment not in anchors:
|
|
64
|
-
failures.append(f"{source.relative_to(ROOT)} -> {raw_link} missing anchor")
|
|
69
|
+
assert_link_resolves(source, raw_link, failures, anchor_cache)
|
|
65
70
|
|
|
66
71
|
assert failures == []
|
|
67
72
|
|
|
68
73
|
|
|
74
|
+
def test_readme_github_documentation_links_resolve_to_repo_files():
|
|
75
|
+
readme = ROOT / "README.md"
|
|
76
|
+
text = readme.read_text(encoding="utf-8")
|
|
77
|
+
failures = []
|
|
78
|
+
anchor_cache: dict[Path, set[str]] = {}
|
|
79
|
+
|
|
80
|
+
for raw_url in re.findall(rf"{re.escape(GITHUB_BLOB_PREFIX)}[^)\s]+", text):
|
|
81
|
+
repo_path = raw_url.removeprefix(GITHUB_BLOB_PREFIX)
|
|
82
|
+
assert_link_resolves(readme, repo_path, failures, anchor_cache)
|
|
83
|
+
|
|
84
|
+
assert failures == []
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def test_readme_uses_pypi_safe_documentation_links():
|
|
88
|
+
readme = (ROOT / "README.md").read_text(encoding="utf-8")
|
|
89
|
+
|
|
90
|
+
assert "](docs/" not in readme
|
|
91
|
+
assert "](LICENSE)" not in readme
|
|
92
|
+
assert GITHUB_BLOB_PREFIX in readme
|
|
93
|
+
|
|
94
|
+
|
|
69
95
|
def test_docs_index_and_readme_reference_core_documentation():
|
|
70
96
|
docs_index = (ROOT / "docs" / "index.md").read_text(encoding="utf-8")
|
|
71
97
|
readme = (ROOT / "README.md").read_text(encoding="utf-8")
|
|
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
|
{macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/admin/templates/admin/logo.html
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
|
{macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/templates/auth/login.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/features/auth/templates/auth/setup.html
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
|
{macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-dust-corner-bl.png
RENAMED
|
File without changes
|
{macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-dust-corner-br.png
RENAMED
|
File without changes
|
{macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-dust-corner-tl.png
RENAMED
|
File without changes
|
{macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-dust-corner-tr.png
RENAMED
|
File without changes
|
{macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-dust-overlay.png
RENAMED
|
File without changes
|
{macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-dust-overlay.webp
RENAMED
|
File without changes
|
|
File without changes
|
{macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/img/bg/bg-pattern-embedded.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/vendor/animate/animate.css
RENAMED
|
File without changes
|
{macrosignage-0.2.2 → macrosignage-0.2.3}/src/macrosignage/static/vendor/animate/animate.min.css
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
|