MacroSignage 0.2.0__tar.gz → 0.2.2__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/PKG-INFO +166 -0
- macrosignage-0.2.2/README.md +126 -0
- macrosignage-0.2.2/pyproject.toml +95 -0
- macrosignage-0.2.2/setup.cfg +4 -0
- macrosignage-0.2.2/src/MacroSignage.egg-info/PKG-INFO +166 -0
- macrosignage-0.2.2/src/MacroSignage.egg-info/SOURCES.txt +122 -0
- macrosignage-0.2.2/src/MacroSignage.egg-info/dependency_links.txt +1 -0
- macrosignage-0.2.2/src/MacroSignage.egg-info/entry_points.txt +3 -0
- macrosignage-0.2.2/src/MacroSignage.egg-info/requires.txt +10 -0
- macrosignage-0.2.2/src/MacroSignage.egg-info/top_level.txt +1 -0
- macrosignage-0.2.2/src/macrosignage/__init__.py +4 -0
- macrosignage-0.2.2/src/macrosignage/app.py +265 -0
- macrosignage-0.2.2/src/macrosignage/cli.py +83 -0
- macrosignage-0.2.2/src/macrosignage/config.py +178 -0
- macrosignage-0.2.2/src/macrosignage/diagnostics.py +101 -0
- macrosignage-0.2.2/src/macrosignage/extensions.py +9 -0
- macrosignage-0.2.2/src/macrosignage/features/__init__.py +10 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/__init__.py +0 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/forms.py +98 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/models.py +41 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/routes.py +246 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/services.py +177 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/api_tokens/list.html +117 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/dashboard.html +94 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/database.html +174 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/displays/detail.html +201 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/displays/form.html +126 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/displays/list.html +100 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/fonts/form.html +87 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/fonts/list.html +75 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/logo.html +95 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/media/detail.html +182 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/media/form.html +369 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/media/list.html +106 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/schedules/detail.html +150 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/schedules/form.html +178 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/schedules/list.html +108 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/settings.html +145 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/users/detail.html +55 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/users/form.html +112 -0
- macrosignage-0.2.2/src/macrosignage/features/admin/templates/admin/users/list.html +83 -0
- macrosignage-0.2.2/src/macrosignage/features/api/__init__.py +3 -0
- macrosignage-0.2.2/src/macrosignage/features/api/routes.py +498 -0
- macrosignage-0.2.2/src/macrosignage/features/api/serializers.py +129 -0
- macrosignage-0.2.2/src/macrosignage/features/associations.py +26 -0
- macrosignage-0.2.2/src/macrosignage/features/auth/__init__.py +0 -0
- macrosignage-0.2.2/src/macrosignage/features/auth/api_token_forms.py +26 -0
- macrosignage-0.2.2/src/macrosignage/features/auth/forms.py +110 -0
- macrosignage-0.2.2/src/macrosignage/features/auth/models.py +55 -0
- macrosignage-0.2.2/src/macrosignage/features/auth/permissions.py +78 -0
- macrosignage-0.2.2/src/macrosignage/features/auth/routes.py +282 -0
- macrosignage-0.2.2/src/macrosignage/features/auth/services.py +201 -0
- macrosignage-0.2.2/src/macrosignage/features/auth/templates/auth/login.html +50 -0
- macrosignage-0.2.2/src/macrosignage/features/auth/templates/auth/password_reset_form.html +40 -0
- macrosignage-0.2.2/src/macrosignage/features/auth/templates/auth/password_reset_request.html +38 -0
- macrosignage-0.2.2/src/macrosignage/features/auth/templates/auth/setup.html +68 -0
- macrosignage-0.2.2/src/macrosignage/features/auth/token_routes.py +88 -0
- macrosignage-0.2.2/src/macrosignage/features/displays/__init__.py +3 -0
- macrosignage-0.2.2/src/macrosignage/features/displays/forms.py +58 -0
- macrosignage-0.2.2/src/macrosignage/features/displays/models.py +48 -0
- macrosignage-0.2.2/src/macrosignage/features/displays/routes.py +311 -0
- macrosignage-0.2.2/src/macrosignage/features/displays/services.py +197 -0
- macrosignage-0.2.2/src/macrosignage/features/displays/templates/displays/maintenance.html +12 -0
- macrosignage-0.2.2/src/macrosignage/features/displays/templates/displays/offline.html +12 -0
- macrosignage-0.2.2/src/macrosignage/features/displays/templates/displays/pair_failed.html +11 -0
- macrosignage-0.2.2/src/macrosignage/features/displays/templates/displays/player.html +103 -0
- macrosignage-0.2.2/src/macrosignage/features/displays/templates/displays/unauthorized.html +24 -0
- macrosignage-0.2.2/src/macrosignage/features/media/__init__.py +3 -0
- macrosignage-0.2.2/src/macrosignage/features/media/forms.py +308 -0
- macrosignage-0.2.2/src/macrosignage/features/media/models.py +115 -0
- macrosignage-0.2.2/src/macrosignage/features/media/routes.py +208 -0
- macrosignage-0.2.2/src/macrosignage/features/media/services.py +190 -0
- macrosignage-0.2.2/src/macrosignage/features/schedules/__init__.py +3 -0
- macrosignage-0.2.2/src/macrosignage/features/schedules/forms.py +97 -0
- macrosignage-0.2.2/src/macrosignage/features/schedules/models.py +46 -0
- macrosignage-0.2.2/src/macrosignage/features/schedules/routes.py +113 -0
- macrosignage-0.2.2/src/macrosignage/features/schedules/services.py +31 -0
- macrosignage-0.2.2/src/macrosignage/static/css/main.css +1683 -0
- macrosignage-0.2.2/src/macrosignage/static/css/theme.css +40 -0
- macrosignage-0.2.2/src/macrosignage/static/img/bg/bg-dust-corner-bl.png +0 -0
- macrosignage-0.2.2/src/macrosignage/static/img/bg/bg-dust-corner-br.png +0 -0
- macrosignage-0.2.2/src/macrosignage/static/img/bg/bg-dust-corner-tl.png +0 -0
- macrosignage-0.2.2/src/macrosignage/static/img/bg/bg-dust-corner-tr.png +0 -0
- macrosignage-0.2.2/src/macrosignage/static/img/bg/bg-dust-overlay.png +0 -0
- macrosignage-0.2.2/src/macrosignage/static/img/bg/bg-dust-overlay.webp +0 -0
- macrosignage-0.2.2/src/macrosignage/static/img/bg/bg-mask.png +0 -0
- macrosignage-0.2.2/src/macrosignage/static/img/bg/bg-pattern-embedded.svg +8 -0
- macrosignage-0.2.2/src/macrosignage/static/img/bg/bg-pattern.svg +9 -0
- macrosignage-0.2.2/src/macrosignage/static/img/bg/bg-tile-1024.png +0 -0
- macrosignage-0.2.2/src/macrosignage/static/img/bg/bg-tile-1024.webp +0 -0
- macrosignage-0.2.2/src/macrosignage/static/js/display-player.js +181 -0
- macrosignage-0.2.2/src/macrosignage/static/js/main.js +130 -0
- macrosignage-0.2.2/src/macrosignage/static/vendor/animate/LICENSE +21 -0
- macrosignage-0.2.2/src/macrosignage/static/vendor/animate/animate.css +4072 -0
- macrosignage-0.2.2/src/macrosignage/static/vendor/animate/animate.min.css +7 -0
- macrosignage-0.2.2/src/macrosignage/static/vendor/bootstrap/LICENSE +21 -0
- macrosignage-0.2.2/src/macrosignage/static/vendor/bootstrap/css/bootstrap.min.css +6 -0
- macrosignage-0.2.2/src/macrosignage/static/vendor/bootstrap/css/bootstrap.min.css.map +1 -0
- macrosignage-0.2.2/src/macrosignage/static/vendor/bootstrap/js/bootstrap.bundle.min.js +7 -0
- macrosignage-0.2.2/src/macrosignage/static/vendor/bootstrap/js/bootstrap.bundle.min.js.map +1 -0
- macrosignage-0.2.2/src/macrosignage/templates/errors/500.html +12 -0
- macrosignage-0.2.2/src/macrosignage/templates/layouts/_base.html +23 -0
- macrosignage-0.2.2/src/macrosignage/templates/layouts/admin.html +139 -0
- macrosignage-0.2.2/src/macrosignage/templates/layouts/auth.html +26 -0
- macrosignage-0.2.2/src/macrosignage/templates/pages/index.html +76 -0
- macrosignage-0.2.2/src/macrosignage/time_utils.py +47 -0
- macrosignage-0.2.2/src/macrosignage/web/__init__.py +0 -0
- macrosignage-0.2.2/src/macrosignage/web/routes.py +8 -0
- macrosignage-0.2.2/src/macrosignage/web/templates/web/index.html +462 -0
- macrosignage-0.2.2/tests/test_admin_crud.py +299 -0
- macrosignage-0.2.2/tests/test_admin_dashboard.py +113 -0
- macrosignage-0.2.2/tests/test_api.py +254 -0
- macrosignage-0.2.2/tests/test_auth.py +223 -0
- macrosignage-0.2.2/tests/test_cli.py +82 -0
- macrosignage-0.2.2/tests/test_client_app.py +50 -0
- macrosignage-0.2.2/tests/test_config.py +485 -0
- macrosignage-0.2.2/tests/test_display_player.py +435 -0
- macrosignage-0.2.2/tests/test_docs.py +103 -0
- macrosignage-0.2.2/tests/test_operational_readiness.py +44 -0
- macrosignage-0.2.2/tests/test_production_hardening.py +184 -0
- macrosignage-0.2.2/tests/test_release_workflows.py +56 -0
- macrosignage-0.2.2/tests/test_slider_media.py +214 -0
- macrosignage-0.2.2/tests/test_v05_polish_scale.py +233 -0
- macrosignage-0.2.0/.gitignore +0 -248
- macrosignage-0.2.0/PKG-INFO +0 -86
- macrosignage-0.2.0/README.md +0 -57
- macrosignage-0.2.0/pyproject.toml +0 -57
- macrosignage-0.2.0/src/macrosignage/__init__.py +0 -80
- macrosignage-0.2.0/src/macrosignage/blueprints/__init__.py +0 -3
- macrosignage-0.2.0/src/macrosignage/blueprints/core/__init__.py +0 -130
- macrosignage-0.2.0/src/macrosignage/blueprints/core/forms.py +0 -11
- macrosignage-0.2.0/src/macrosignage/blueprints/core/models.py +0 -98
- macrosignage-0.2.0/src/macrosignage/blueprints/core/templates/core/display.html +0 -33
- macrosignage-0.2.0/src/macrosignage/blueprints/core/templates/core/display_list.html +0 -57
- macrosignage-0.2.0/src/macrosignage/blueprints/core/templates/core/display_slides.html +0 -149
- macrosignage-0.2.0/src/macrosignage/blueprints/core/templates/core/index.html +0 -21
- macrosignage-0.2.0/src/macrosignage/blueprints/core/templates/core/slides.html +0 -40
- macrosignage-0.2.0/src/macrosignage/cli.py +0 -21
- macrosignage-0.2.0/src/macrosignage/config.py +0 -32
- macrosignage-0.2.0/src/macrosignage/extensions.py +0 -41
- macrosignage-0.2.0/src/macrosignage/ui/static/css/animate.css +0 -4367
- macrosignage-0.2.0/src/macrosignage/ui/static/css/animate.min.css +0 -9
- macrosignage-0.2.0/src/macrosignage/ui/static/css/icons.css +0 -23
- macrosignage-0.2.0/src/macrosignage/ui/static/css/icons.min.css +0 -1
- macrosignage-0.2.0/src/macrosignage/ui/static/css/main.css +0 -194
- macrosignage-0.2.0/src/macrosignage/ui/static/css/main.min.css +0 -7
- macrosignage-0.2.0/src/macrosignage/ui/static/css/materialize.css +0 -9297
- macrosignage-0.2.0/src/macrosignage/ui/static/css/materialize.min.css +0 -16
- macrosignage-0.2.0/src/macrosignage/ui/static/js/main.js +0 -73
- macrosignage-0.2.0/src/macrosignage/ui/static/js/main.min.js +0 -1
- macrosignage-0.2.0/src/macrosignage/ui/static/js/materialize.js +0 -13094
- macrosignage-0.2.0/src/macrosignage/ui/static/js/materialize.min.js +0 -1
- macrosignage-0.2.0/src/macrosignage/ui/templates/layouts/base.html +0 -23
- macrosignage-0.2.0/src/macrosignage/utils/__init__.py +0 -201
- macrosignage-0.2.0/src/macrosignage/utils/sql.py +0 -44
- {macrosignage-0.2.0 → macrosignage-0.2.2}/LICENSE +0 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: MacroSignage
|
|
3
|
+
Version: 0.2.2
|
|
4
|
+
Summary: Web-based Digital Signage System
|
|
5
|
+
Author-email: Javier Baez <baezdevs@gmail.com>
|
|
6
|
+
Maintainer-email: Javier Baez <baezdevs@gmail.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/BaezFJ/MacroSignage
|
|
9
|
+
Project-URL: Repository, https://github.com/BaezFJ/MacroSignage
|
|
10
|
+
Project-URL: Issues, https://github.com/BaezFJ/MacroSignage/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/BaezFJ/MacroSignage/releases
|
|
12
|
+
Keywords: dashboard,digital-signage,display-management,flask,signage
|
|
13
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
14
|
+
Classifier: Environment :: Web Environment
|
|
15
|
+
Classifier: Framework :: Flask
|
|
16
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
17
|
+
Classifier: Intended Audience :: System Administrators
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Topic :: Multimedia :: Video :: Display
|
|
26
|
+
Requires-Python: >=3.10
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
Requires-Dist: flask>=3.1.3
|
|
30
|
+
Requires-Dist: flask-login>=0.6.3
|
|
31
|
+
Requires-Dist: flask-wtf>=1.3.0
|
|
32
|
+
Requires-Dist: flask-sqlalchemy>=3.1.1
|
|
33
|
+
Requires-Dist: python-dotenv>=1.2.2
|
|
34
|
+
Requires-Dist: python-slugify>=8.0.4
|
|
35
|
+
Requires-Dist: email-validator>=2.3.0
|
|
36
|
+
Requires-Dist: python-usernames>=1.1.0
|
|
37
|
+
Requires-Dist: flask-migrate>=4.1.0
|
|
38
|
+
Requires-Dist: waitress>=3.0.2
|
|
39
|
+
Dynamic: license-file
|
|
40
|
+
|
|
41
|
+
# MacroSignage
|
|
42
|
+
|
|
43
|
+
[](https://pypi.org/project/MacroSignage/)
|
|
44
|
+
[](https://pypi.org/project/MacroSignage/)
|
|
45
|
+
[](LICENSE)
|
|
46
|
+
[](https://github.com/BaezFJ/MacroSignage/actions/workflows/ci.yml)
|
|
47
|
+
|
|
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
|
+
|
|
50
|
+
> **Status:** Pre-alpha v0.2.2. Data models and API contracts can change before v1.0.
|
|
51
|
+
|
|
52
|
+
## Features
|
|
53
|
+
|
|
54
|
+
- Admin dashboard with recent activity, diagnostics, and settings pages.
|
|
55
|
+
- Display CRUD with online, offline, and maintenance states.
|
|
56
|
+
- Token-secured display player pairing with remote disable/rotation.
|
|
57
|
+
- Media CRUD for images, text, video, HTML, YouTube, and slider media.
|
|
58
|
+
- Slider media with backgrounds, foreground images, fonts, positions, durations, and Animate.css effects.
|
|
59
|
+
- Schedule CRUD with active windows, weekday rules, display targets, playlists, and no-active-schedule fallback.
|
|
60
|
+
- Auth, password reset flow, user CRUD, RBAC, and API token lifecycle management.
|
|
61
|
+
- REST API for displays, media, schedules, users, fonts, settings, health, and player playlists.
|
|
62
|
+
- Server-sent events for display player refresh.
|
|
63
|
+
- Global logo overlay settings and managed Google Fonts.
|
|
64
|
+
- SQLite by default with configurable Flask-SQLAlchemy database URI support.
|
|
65
|
+
- Waitress-backed production CLI plus systemd and Docker examples.
|
|
66
|
+
- Separate pywebview client package with GitHub Release executables.
|
|
67
|
+
|
|
68
|
+
## Quick Start
|
|
69
|
+
|
|
70
|
+
Install from PyPI:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pip install MacroSignage
|
|
74
|
+
macrosignage dev
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Or run from source:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
git clone https://github.com/BaezFJ/MacroSignage.git
|
|
81
|
+
cd MacroSignage
|
|
82
|
+
uv sync --all-groups
|
|
83
|
+
cp .env.example .env
|
|
84
|
+
uv run macrosignage dev
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Open `http://127.0.0.1:5000`, then create the first admin account at `/auth/setup`.
|
|
88
|
+
|
|
89
|
+
## Production
|
|
90
|
+
|
|
91
|
+
Use the dedicated production script behind a reverse proxy:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
MACROSIGNAGE_SECRET_KEY='replace-with-a-long-random-secret' \
|
|
95
|
+
MACROSIGNAGE_DATABASE_URI='sqlite:////var/lib/macrosignage/macrosignage.sqlite3' \
|
|
96
|
+
MACROSIGNAGE_MEDIA_UPLOAD_FOLDER='/var/lib/macrosignage/media' \
|
|
97
|
+
MACROSIGNAGE_SESSION_COOKIE_SECURE=true \
|
|
98
|
+
macrosignage-prod --host 127.0.0.1 --port 8080 --threads 4
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
See [Deployment](docs/deployment.md) for systemd, Docker, HTTPS, health checks, backups, restore, and rollback.
|
|
102
|
+
|
|
103
|
+
## Client Executables
|
|
104
|
+
|
|
105
|
+
Prebuilt standalone display client executables are available on the GitHub Releases page:
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
https://github.com/BaezFJ/MacroSignage/releases
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The client source package lives in `client/`. See [Standalone Client](docs/client.md).
|
|
112
|
+
|
|
113
|
+
## Documentation
|
|
114
|
+
|
|
115
|
+
Start with [docs/index.md](docs/index.md).
|
|
116
|
+
|
|
117
|
+
Core guides:
|
|
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)
|
|
131
|
+
|
|
132
|
+
## Development Commands
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
uv lock --check
|
|
136
|
+
uv run python -m pytest
|
|
137
|
+
uv run python -m unittest discover -s tests
|
|
138
|
+
uv run python -m compileall src/macrosignage tests
|
|
139
|
+
uv build
|
|
140
|
+
uv run twine check dist/*
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Release Automation
|
|
144
|
+
|
|
145
|
+
- CI runs on pull requests and pushes to `main`.
|
|
146
|
+
- PyPI publishing runs when a `v*` tag is pushed.
|
|
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).
|
|
149
|
+
|
|
150
|
+
## v1.0 Remaining Work
|
|
151
|
+
|
|
152
|
+
- [ ] Production-hardened and fully tested ([roadmap](docs/production-hardening-roadmap.md))
|
|
153
|
+
- [x] Complete documentation ([roadmap](docs/documentation-roadmap.md))
|
|
154
|
+
- [x] Deployment guides for Docker, systemd, health checks, backups, and rollback
|
|
155
|
+
|
|
156
|
+
## License
|
|
157
|
+
|
|
158
|
+
MacroSignage is licensed under the MIT License. See [LICENSE](LICENSE).
|
|
159
|
+
|
|
160
|
+
Copyright (c) 2022 Javier Baez
|
|
161
|
+
|
|
162
|
+
## Links
|
|
163
|
+
|
|
164
|
+
[GitHub Repository](https://github.com/BaezFJ/MacroSignage) |
|
|
165
|
+
[PyPI Package](https://pypi.org/project/MacroSignage/) |
|
|
166
|
+
[Issue Tracker](https://github.com/BaezFJ/MacroSignage/issues)
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# MacroSignage
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/MacroSignage/)
|
|
4
|
+
[](https://pypi.org/project/MacroSignage/)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](https://github.com/BaezFJ/MacroSignage/actions/workflows/ci.yml)
|
|
7
|
+
|
|
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
|
+
|
|
10
|
+
> **Status:** Pre-alpha v0.2.2. Data models and API contracts can change before v1.0.
|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
- Admin dashboard with recent activity, diagnostics, and settings pages.
|
|
15
|
+
- Display CRUD with online, offline, and maintenance states.
|
|
16
|
+
- Token-secured display player pairing with remote disable/rotation.
|
|
17
|
+
- Media CRUD for images, text, video, HTML, YouTube, and slider media.
|
|
18
|
+
- Slider media with backgrounds, foreground images, fonts, positions, durations, and Animate.css effects.
|
|
19
|
+
- Schedule CRUD with active windows, weekday rules, display targets, playlists, and no-active-schedule fallback.
|
|
20
|
+
- Auth, password reset flow, user CRUD, RBAC, and API token lifecycle management.
|
|
21
|
+
- REST API for displays, media, schedules, users, fonts, settings, health, and player playlists.
|
|
22
|
+
- Server-sent events for display player refresh.
|
|
23
|
+
- Global logo overlay settings and managed Google Fonts.
|
|
24
|
+
- SQLite by default with configurable Flask-SQLAlchemy database URI support.
|
|
25
|
+
- Waitress-backed production CLI plus systemd and Docker examples.
|
|
26
|
+
- Separate pywebview client package with GitHub Release executables.
|
|
27
|
+
|
|
28
|
+
## Quick Start
|
|
29
|
+
|
|
30
|
+
Install from PyPI:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pip install MacroSignage
|
|
34
|
+
macrosignage dev
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Or run from source:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
git clone https://github.com/BaezFJ/MacroSignage.git
|
|
41
|
+
cd MacroSignage
|
|
42
|
+
uv sync --all-groups
|
|
43
|
+
cp .env.example .env
|
|
44
|
+
uv run macrosignage dev
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Open `http://127.0.0.1:5000`, then create the first admin account at `/auth/setup`.
|
|
48
|
+
|
|
49
|
+
## Production
|
|
50
|
+
|
|
51
|
+
Use the dedicated production script behind a reverse proxy:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
MACROSIGNAGE_SECRET_KEY='replace-with-a-long-random-secret' \
|
|
55
|
+
MACROSIGNAGE_DATABASE_URI='sqlite:////var/lib/macrosignage/macrosignage.sqlite3' \
|
|
56
|
+
MACROSIGNAGE_MEDIA_UPLOAD_FOLDER='/var/lib/macrosignage/media' \
|
|
57
|
+
MACROSIGNAGE_SESSION_COOKIE_SECURE=true \
|
|
58
|
+
macrosignage-prod --host 127.0.0.1 --port 8080 --threads 4
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
See [Deployment](docs/deployment.md) for systemd, Docker, HTTPS, health checks, backups, restore, and rollback.
|
|
62
|
+
|
|
63
|
+
## Client Executables
|
|
64
|
+
|
|
65
|
+
Prebuilt standalone display client executables are available on the GitHub Releases page:
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
https://github.com/BaezFJ/MacroSignage/releases
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
The client source package lives in `client/`. See [Standalone Client](docs/client.md).
|
|
72
|
+
|
|
73
|
+
## Documentation
|
|
74
|
+
|
|
75
|
+
Start with [docs/index.md](docs/index.md).
|
|
76
|
+
|
|
77
|
+
Core guides:
|
|
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)
|
|
91
|
+
|
|
92
|
+
## Development Commands
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
uv lock --check
|
|
96
|
+
uv run python -m pytest
|
|
97
|
+
uv run python -m unittest discover -s tests
|
|
98
|
+
uv run python -m compileall src/macrosignage tests
|
|
99
|
+
uv build
|
|
100
|
+
uv run twine check dist/*
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Release Automation
|
|
104
|
+
|
|
105
|
+
- CI runs on pull requests and pushes to `main`.
|
|
106
|
+
- PyPI publishing runs when a `v*` tag is pushed.
|
|
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).
|
|
109
|
+
|
|
110
|
+
## v1.0 Remaining Work
|
|
111
|
+
|
|
112
|
+
- [ ] Production-hardened and fully tested ([roadmap](docs/production-hardening-roadmap.md))
|
|
113
|
+
- [x] Complete documentation ([roadmap](docs/documentation-roadmap.md))
|
|
114
|
+
- [x] Deployment guides for Docker, systemd, health checks, backups, and rollback
|
|
115
|
+
|
|
116
|
+
## License
|
|
117
|
+
|
|
118
|
+
MacroSignage is licensed under the MIT License. See [LICENSE](LICENSE).
|
|
119
|
+
|
|
120
|
+
Copyright (c) 2022 Javier Baez
|
|
121
|
+
|
|
122
|
+
## Links
|
|
123
|
+
|
|
124
|
+
[GitHub Repository](https://github.com/BaezFJ/MacroSignage) |
|
|
125
|
+
[PyPI Package](https://pypi.org/project/MacroSignage/) |
|
|
126
|
+
[Issue Tracker](https://github.com/BaezFJ/MacroSignage/issues)
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77.0.3"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "MacroSignage"
|
|
7
|
+
version = "0.2.2"
|
|
8
|
+
description = "Web-based Digital Signage System"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = "MIT"
|
|
11
|
+
license-files = ["LICENSE"]
|
|
12
|
+
requires-python = ">=3.10"
|
|
13
|
+
keywords = [
|
|
14
|
+
"dashboard",
|
|
15
|
+
"digital-signage",
|
|
16
|
+
"display-management",
|
|
17
|
+
"flask",
|
|
18
|
+
"signage",
|
|
19
|
+
]
|
|
20
|
+
authors = [
|
|
21
|
+
{ name = "Javier Baez", email = "baezdevs@gmail.com" },
|
|
22
|
+
]
|
|
23
|
+
maintainers = [
|
|
24
|
+
{ name = "Javier Baez", email = "baezdevs@gmail.com" },
|
|
25
|
+
]
|
|
26
|
+
classifiers = [
|
|
27
|
+
"Development Status :: 2 - Pre-Alpha",
|
|
28
|
+
"Environment :: Web Environment",
|
|
29
|
+
"Framework :: Flask",
|
|
30
|
+
"Intended Audience :: End Users/Desktop",
|
|
31
|
+
"Intended Audience :: System Administrators",
|
|
32
|
+
"Operating System :: OS Independent",
|
|
33
|
+
"Programming Language :: Python :: 3",
|
|
34
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
35
|
+
"Programming Language :: Python :: 3.10",
|
|
36
|
+
"Programming Language :: Python :: 3.11",
|
|
37
|
+
"Programming Language :: Python :: 3.12",
|
|
38
|
+
"Programming Language :: Python :: 3.13",
|
|
39
|
+
"Topic :: Multimedia :: Video :: Display",
|
|
40
|
+
]
|
|
41
|
+
dependencies = [
|
|
42
|
+
"flask>=3.1.3",
|
|
43
|
+
"flask-login>=0.6.3",
|
|
44
|
+
"flask-wtf>=1.3.0",
|
|
45
|
+
"flask-sqlalchemy>=3.1.1",
|
|
46
|
+
"python-dotenv>=1.2.2",
|
|
47
|
+
"python-slugify>=8.0.4",
|
|
48
|
+
"email-validator>=2.3.0",
|
|
49
|
+
"python-usernames>=1.1.0",
|
|
50
|
+
"flask-migrate>=4.1.0",
|
|
51
|
+
"waitress>=3.0.2",
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
[project.urls]
|
|
55
|
+
Homepage = "https://github.com/BaezFJ/MacroSignage"
|
|
56
|
+
Repository = "https://github.com/BaezFJ/MacroSignage"
|
|
57
|
+
Issues = "https://github.com/BaezFJ/MacroSignage/issues"
|
|
58
|
+
Changelog = "https://github.com/BaezFJ/MacroSignage/releases"
|
|
59
|
+
|
|
60
|
+
[project.scripts]
|
|
61
|
+
macrosignage = "macrosignage.cli:main"
|
|
62
|
+
macrosignage-prod = "macrosignage.cli:prod_main"
|
|
63
|
+
|
|
64
|
+
[dependency-groups]
|
|
65
|
+
dev = [
|
|
66
|
+
"build>=1.5.0",
|
|
67
|
+
"pytest>=8.4.2",
|
|
68
|
+
"twine>=6.2.0",
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
[tool.pytest.ini_options]
|
|
72
|
+
testpaths = ["tests"]
|
|
73
|
+
pythonpath = ["src"]
|
|
74
|
+
|
|
75
|
+
[tool.setuptools]
|
|
76
|
+
include-package-data = false
|
|
77
|
+
|
|
78
|
+
[tool.setuptools.packages.find]
|
|
79
|
+
where = ["src"]
|
|
80
|
+
exclude = ["tests*"]
|
|
81
|
+
namespaces = false
|
|
82
|
+
|
|
83
|
+
[tool.setuptools.package-data]
|
|
84
|
+
macrosignage = [
|
|
85
|
+
"**/*.html",
|
|
86
|
+
"**/*.css",
|
|
87
|
+
"**/*.js",
|
|
88
|
+
"**/*.map",
|
|
89
|
+
"**/*.json",
|
|
90
|
+
"**/*.png",
|
|
91
|
+
"**/*.jpg",
|
|
92
|
+
"**/*.svg",
|
|
93
|
+
"**/*.webp",
|
|
94
|
+
"**/LICENSE*",
|
|
95
|
+
]
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: MacroSignage
|
|
3
|
+
Version: 0.2.2
|
|
4
|
+
Summary: Web-based Digital Signage System
|
|
5
|
+
Author-email: Javier Baez <baezdevs@gmail.com>
|
|
6
|
+
Maintainer-email: Javier Baez <baezdevs@gmail.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/BaezFJ/MacroSignage
|
|
9
|
+
Project-URL: Repository, https://github.com/BaezFJ/MacroSignage
|
|
10
|
+
Project-URL: Issues, https://github.com/BaezFJ/MacroSignage/issues
|
|
11
|
+
Project-URL: Changelog, https://github.com/BaezFJ/MacroSignage/releases
|
|
12
|
+
Keywords: dashboard,digital-signage,display-management,flask,signage
|
|
13
|
+
Classifier: Development Status :: 2 - Pre-Alpha
|
|
14
|
+
Classifier: Environment :: Web Environment
|
|
15
|
+
Classifier: Framework :: Flask
|
|
16
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
17
|
+
Classifier: Intended Audience :: System Administrators
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Topic :: Multimedia :: Video :: Display
|
|
26
|
+
Requires-Python: >=3.10
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
Requires-Dist: flask>=3.1.3
|
|
30
|
+
Requires-Dist: flask-login>=0.6.3
|
|
31
|
+
Requires-Dist: flask-wtf>=1.3.0
|
|
32
|
+
Requires-Dist: flask-sqlalchemy>=3.1.1
|
|
33
|
+
Requires-Dist: python-dotenv>=1.2.2
|
|
34
|
+
Requires-Dist: python-slugify>=8.0.4
|
|
35
|
+
Requires-Dist: email-validator>=2.3.0
|
|
36
|
+
Requires-Dist: python-usernames>=1.1.0
|
|
37
|
+
Requires-Dist: flask-migrate>=4.1.0
|
|
38
|
+
Requires-Dist: waitress>=3.0.2
|
|
39
|
+
Dynamic: license-file
|
|
40
|
+
|
|
41
|
+
# MacroSignage
|
|
42
|
+
|
|
43
|
+
[](https://pypi.org/project/MacroSignage/)
|
|
44
|
+
[](https://pypi.org/project/MacroSignage/)
|
|
45
|
+
[](LICENSE)
|
|
46
|
+
[](https://github.com/BaezFJ/MacroSignage/actions/workflows/ci.yml)
|
|
47
|
+
|
|
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
|
+
|
|
50
|
+
> **Status:** Pre-alpha v0.2.2. Data models and API contracts can change before v1.0.
|
|
51
|
+
|
|
52
|
+
## Features
|
|
53
|
+
|
|
54
|
+
- Admin dashboard with recent activity, diagnostics, and settings pages.
|
|
55
|
+
- Display CRUD with online, offline, and maintenance states.
|
|
56
|
+
- Token-secured display player pairing with remote disable/rotation.
|
|
57
|
+
- Media CRUD for images, text, video, HTML, YouTube, and slider media.
|
|
58
|
+
- Slider media with backgrounds, foreground images, fonts, positions, durations, and Animate.css effects.
|
|
59
|
+
- Schedule CRUD with active windows, weekday rules, display targets, playlists, and no-active-schedule fallback.
|
|
60
|
+
- Auth, password reset flow, user CRUD, RBAC, and API token lifecycle management.
|
|
61
|
+
- REST API for displays, media, schedules, users, fonts, settings, health, and player playlists.
|
|
62
|
+
- Server-sent events for display player refresh.
|
|
63
|
+
- Global logo overlay settings and managed Google Fonts.
|
|
64
|
+
- SQLite by default with configurable Flask-SQLAlchemy database URI support.
|
|
65
|
+
- Waitress-backed production CLI plus systemd and Docker examples.
|
|
66
|
+
- Separate pywebview client package with GitHub Release executables.
|
|
67
|
+
|
|
68
|
+
## Quick Start
|
|
69
|
+
|
|
70
|
+
Install from PyPI:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pip install MacroSignage
|
|
74
|
+
macrosignage dev
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Or run from source:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
git clone https://github.com/BaezFJ/MacroSignage.git
|
|
81
|
+
cd MacroSignage
|
|
82
|
+
uv sync --all-groups
|
|
83
|
+
cp .env.example .env
|
|
84
|
+
uv run macrosignage dev
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Open `http://127.0.0.1:5000`, then create the first admin account at `/auth/setup`.
|
|
88
|
+
|
|
89
|
+
## Production
|
|
90
|
+
|
|
91
|
+
Use the dedicated production script behind a reverse proxy:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
MACROSIGNAGE_SECRET_KEY='replace-with-a-long-random-secret' \
|
|
95
|
+
MACROSIGNAGE_DATABASE_URI='sqlite:////var/lib/macrosignage/macrosignage.sqlite3' \
|
|
96
|
+
MACROSIGNAGE_MEDIA_UPLOAD_FOLDER='/var/lib/macrosignage/media' \
|
|
97
|
+
MACROSIGNAGE_SESSION_COOKIE_SECURE=true \
|
|
98
|
+
macrosignage-prod --host 127.0.0.1 --port 8080 --threads 4
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
See [Deployment](docs/deployment.md) for systemd, Docker, HTTPS, health checks, backups, restore, and rollback.
|
|
102
|
+
|
|
103
|
+
## Client Executables
|
|
104
|
+
|
|
105
|
+
Prebuilt standalone display client executables are available on the GitHub Releases page:
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
https://github.com/BaezFJ/MacroSignage/releases
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The client source package lives in `client/`. See [Standalone Client](docs/client.md).
|
|
112
|
+
|
|
113
|
+
## Documentation
|
|
114
|
+
|
|
115
|
+
Start with [docs/index.md](docs/index.md).
|
|
116
|
+
|
|
117
|
+
Core guides:
|
|
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)
|
|
131
|
+
|
|
132
|
+
## Development Commands
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
uv lock --check
|
|
136
|
+
uv run python -m pytest
|
|
137
|
+
uv run python -m unittest discover -s tests
|
|
138
|
+
uv run python -m compileall src/macrosignage tests
|
|
139
|
+
uv build
|
|
140
|
+
uv run twine check dist/*
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Release Automation
|
|
144
|
+
|
|
145
|
+
- CI runs on pull requests and pushes to `main`.
|
|
146
|
+
- PyPI publishing runs when a `v*` tag is pushed.
|
|
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).
|
|
149
|
+
|
|
150
|
+
## v1.0 Remaining Work
|
|
151
|
+
|
|
152
|
+
- [ ] Production-hardened and fully tested ([roadmap](docs/production-hardening-roadmap.md))
|
|
153
|
+
- [x] Complete documentation ([roadmap](docs/documentation-roadmap.md))
|
|
154
|
+
- [x] Deployment guides for Docker, systemd, health checks, backups, and rollback
|
|
155
|
+
|
|
156
|
+
## License
|
|
157
|
+
|
|
158
|
+
MacroSignage is licensed under the MIT License. See [LICENSE](LICENSE).
|
|
159
|
+
|
|
160
|
+
Copyright (c) 2022 Javier Baez
|
|
161
|
+
|
|
162
|
+
## Links
|
|
163
|
+
|
|
164
|
+
[GitHub Repository](https://github.com/BaezFJ/MacroSignage) |
|
|
165
|
+
[PyPI Package](https://pypi.org/project/MacroSignage/) |
|
|
166
|
+
[Issue Tracker](https://github.com/BaezFJ/MacroSignage/issues)
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
src/MacroSignage.egg-info/PKG-INFO
|
|
5
|
+
src/MacroSignage.egg-info/SOURCES.txt
|
|
6
|
+
src/MacroSignage.egg-info/dependency_links.txt
|
|
7
|
+
src/MacroSignage.egg-info/entry_points.txt
|
|
8
|
+
src/MacroSignage.egg-info/requires.txt
|
|
9
|
+
src/MacroSignage.egg-info/top_level.txt
|
|
10
|
+
src/macrosignage/__init__.py
|
|
11
|
+
src/macrosignage/app.py
|
|
12
|
+
src/macrosignage/cli.py
|
|
13
|
+
src/macrosignage/config.py
|
|
14
|
+
src/macrosignage/diagnostics.py
|
|
15
|
+
src/macrosignage/extensions.py
|
|
16
|
+
src/macrosignage/time_utils.py
|
|
17
|
+
src/macrosignage/features/__init__.py
|
|
18
|
+
src/macrosignage/features/associations.py
|
|
19
|
+
src/macrosignage/features/admin/__init__.py
|
|
20
|
+
src/macrosignage/features/admin/forms.py
|
|
21
|
+
src/macrosignage/features/admin/models.py
|
|
22
|
+
src/macrosignage/features/admin/routes.py
|
|
23
|
+
src/macrosignage/features/admin/services.py
|
|
24
|
+
src/macrosignage/features/admin/templates/admin/dashboard.html
|
|
25
|
+
src/macrosignage/features/admin/templates/admin/database.html
|
|
26
|
+
src/macrosignage/features/admin/templates/admin/logo.html
|
|
27
|
+
src/macrosignage/features/admin/templates/admin/settings.html
|
|
28
|
+
src/macrosignage/features/admin/templates/admin/api_tokens/list.html
|
|
29
|
+
src/macrosignage/features/admin/templates/admin/displays/detail.html
|
|
30
|
+
src/macrosignage/features/admin/templates/admin/displays/form.html
|
|
31
|
+
src/macrosignage/features/admin/templates/admin/displays/list.html
|
|
32
|
+
src/macrosignage/features/admin/templates/admin/fonts/form.html
|
|
33
|
+
src/macrosignage/features/admin/templates/admin/fonts/list.html
|
|
34
|
+
src/macrosignage/features/admin/templates/admin/media/detail.html
|
|
35
|
+
src/macrosignage/features/admin/templates/admin/media/form.html
|
|
36
|
+
src/macrosignage/features/admin/templates/admin/media/list.html
|
|
37
|
+
src/macrosignage/features/admin/templates/admin/schedules/detail.html
|
|
38
|
+
src/macrosignage/features/admin/templates/admin/schedules/form.html
|
|
39
|
+
src/macrosignage/features/admin/templates/admin/schedules/list.html
|
|
40
|
+
src/macrosignage/features/admin/templates/admin/users/detail.html
|
|
41
|
+
src/macrosignage/features/admin/templates/admin/users/form.html
|
|
42
|
+
src/macrosignage/features/admin/templates/admin/users/list.html
|
|
43
|
+
src/macrosignage/features/api/__init__.py
|
|
44
|
+
src/macrosignage/features/api/routes.py
|
|
45
|
+
src/macrosignage/features/api/serializers.py
|
|
46
|
+
src/macrosignage/features/auth/__init__.py
|
|
47
|
+
src/macrosignage/features/auth/api_token_forms.py
|
|
48
|
+
src/macrosignage/features/auth/forms.py
|
|
49
|
+
src/macrosignage/features/auth/models.py
|
|
50
|
+
src/macrosignage/features/auth/permissions.py
|
|
51
|
+
src/macrosignage/features/auth/routes.py
|
|
52
|
+
src/macrosignage/features/auth/services.py
|
|
53
|
+
src/macrosignage/features/auth/token_routes.py
|
|
54
|
+
src/macrosignage/features/auth/templates/auth/login.html
|
|
55
|
+
src/macrosignage/features/auth/templates/auth/password_reset_form.html
|
|
56
|
+
src/macrosignage/features/auth/templates/auth/password_reset_request.html
|
|
57
|
+
src/macrosignage/features/auth/templates/auth/setup.html
|
|
58
|
+
src/macrosignage/features/displays/__init__.py
|
|
59
|
+
src/macrosignage/features/displays/forms.py
|
|
60
|
+
src/macrosignage/features/displays/models.py
|
|
61
|
+
src/macrosignage/features/displays/routes.py
|
|
62
|
+
src/macrosignage/features/displays/services.py
|
|
63
|
+
src/macrosignage/features/displays/templates/displays/maintenance.html
|
|
64
|
+
src/macrosignage/features/displays/templates/displays/offline.html
|
|
65
|
+
src/macrosignage/features/displays/templates/displays/pair_failed.html
|
|
66
|
+
src/macrosignage/features/displays/templates/displays/player.html
|
|
67
|
+
src/macrosignage/features/displays/templates/displays/unauthorized.html
|
|
68
|
+
src/macrosignage/features/media/__init__.py
|
|
69
|
+
src/macrosignage/features/media/forms.py
|
|
70
|
+
src/macrosignage/features/media/models.py
|
|
71
|
+
src/macrosignage/features/media/routes.py
|
|
72
|
+
src/macrosignage/features/media/services.py
|
|
73
|
+
src/macrosignage/features/schedules/__init__.py
|
|
74
|
+
src/macrosignage/features/schedules/forms.py
|
|
75
|
+
src/macrosignage/features/schedules/models.py
|
|
76
|
+
src/macrosignage/features/schedules/routes.py
|
|
77
|
+
src/macrosignage/features/schedules/services.py
|
|
78
|
+
src/macrosignage/static/css/main.css
|
|
79
|
+
src/macrosignage/static/css/theme.css
|
|
80
|
+
src/macrosignage/static/img/bg/bg-dust-corner-bl.png
|
|
81
|
+
src/macrosignage/static/img/bg/bg-dust-corner-br.png
|
|
82
|
+
src/macrosignage/static/img/bg/bg-dust-corner-tl.png
|
|
83
|
+
src/macrosignage/static/img/bg/bg-dust-corner-tr.png
|
|
84
|
+
src/macrosignage/static/img/bg/bg-dust-overlay.png
|
|
85
|
+
src/macrosignage/static/img/bg/bg-dust-overlay.webp
|
|
86
|
+
src/macrosignage/static/img/bg/bg-mask.png
|
|
87
|
+
src/macrosignage/static/img/bg/bg-pattern-embedded.svg
|
|
88
|
+
src/macrosignage/static/img/bg/bg-pattern.svg
|
|
89
|
+
src/macrosignage/static/img/bg/bg-tile-1024.png
|
|
90
|
+
src/macrosignage/static/img/bg/bg-tile-1024.webp
|
|
91
|
+
src/macrosignage/static/js/display-player.js
|
|
92
|
+
src/macrosignage/static/js/main.js
|
|
93
|
+
src/macrosignage/static/vendor/animate/LICENSE
|
|
94
|
+
src/macrosignage/static/vendor/animate/animate.css
|
|
95
|
+
src/macrosignage/static/vendor/animate/animate.min.css
|
|
96
|
+
src/macrosignage/static/vendor/bootstrap/LICENSE
|
|
97
|
+
src/macrosignage/static/vendor/bootstrap/css/bootstrap.min.css
|
|
98
|
+
src/macrosignage/static/vendor/bootstrap/css/bootstrap.min.css.map
|
|
99
|
+
src/macrosignage/static/vendor/bootstrap/js/bootstrap.bundle.min.js
|
|
100
|
+
src/macrosignage/static/vendor/bootstrap/js/bootstrap.bundle.min.js.map
|
|
101
|
+
src/macrosignage/templates/errors/500.html
|
|
102
|
+
src/macrosignage/templates/layouts/_base.html
|
|
103
|
+
src/macrosignage/templates/layouts/admin.html
|
|
104
|
+
src/macrosignage/templates/layouts/auth.html
|
|
105
|
+
src/macrosignage/templates/pages/index.html
|
|
106
|
+
src/macrosignage/web/__init__.py
|
|
107
|
+
src/macrosignage/web/routes.py
|
|
108
|
+
src/macrosignage/web/templates/web/index.html
|
|
109
|
+
tests/test_admin_crud.py
|
|
110
|
+
tests/test_admin_dashboard.py
|
|
111
|
+
tests/test_api.py
|
|
112
|
+
tests/test_auth.py
|
|
113
|
+
tests/test_cli.py
|
|
114
|
+
tests/test_client_app.py
|
|
115
|
+
tests/test_config.py
|
|
116
|
+
tests/test_display_player.py
|
|
117
|
+
tests/test_docs.py
|
|
118
|
+
tests/test_operational_readiness.py
|
|
119
|
+
tests/test_production_hardening.py
|
|
120
|
+
tests/test_release_workflows.py
|
|
121
|
+
tests/test_slider_media.py
|
|
122
|
+
tests/test_v05_polish_scale.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|