Sanitize codebase, reorganize docs, and add missing deploy files

Remove dead code identified in docs/SANITIZATION-REVIEW.md:
- app/blueprints/content_old.py and app/blueprints/playlist.py
- app/models/group.py, app/utils/nginx_config_reader.py
- orphaned templates (content_list, edit_content, upload_content,
  player_page) and the related group/Template references

Result: 6 blueprints, 82 routes, no dead modules or orphan templates.

Add files that deploy.sh and docker-entrypoint.sh already require but
which were never tracked:
- https_manager.py       (referenced by deploy.sh, migrate_network.sh,
                          docker-entrypoint.sh)
- Caddyfile.example      (seeded by deploy.sh; its absence aborts deploy)

Relocate generated Graphify artifacts from graphify-out/ to
docs/graphify-out/ (110 files, no content change) and archive the
superseded docs under docs/.

Ignore hygiene:
- ignore ad-hoc .env backups (.env.bak*) — they contain live secrets
- keep the pre-sanitization snapshots (docs/legacy code/,
  docs/old_code_documentation/) on disk but out of the repo

Fix .env.example: drop a duplicated config block, genericize the
hardcoded host IP, and document HOSTNAME_INTERNAL.
This commit is contained in:
2026-09-11 12:18:34 +03:00
parent 1c5186463a
commit 46602f1933
226 changed files with 3999 additions and 15737 deletions
@@ -0,0 +1,243 @@
# CaddyConfigGenerator
> God node · 31 connections · [/home/scheianu/digiserver-v2/app/utils/caddy_manager.py](file:///home/scheianu/digiserver-v2/app/utils/caddy_manager.py#L36)
## Call Trace Diagram
```mermaid
sequenceDiagram
participant P0 as CaddyConfigGenerator
participant P1 as HTTPSConfig
participant P2 as Models package for digiserver-v2.
participant P3 as PlayerEdit
participant P4 as PlayerUser
participant P5 as Playlist
participant P6 as Content
participant P7 as User
participant P8 as Player
participant P9 as ServerLog
participant P10 as Group
participant P11 as PlayerFeedback
participant P12 as Players blueprint for player management and display.
participant P13 as Display list of all players.
participant P14 as Add a new player with optional SSH deployment.
participant P15 as Regenerate authentication code for a player.
participant P16 as Redirect to manage player page (combined view).
participant P17 as Manage player - edit credentials, assign playlist, view logs.
participant P18 as Display all edited media files from this player.
participant P19 as Display a tabular report of all edited media from this player.
participant P20 as Display player fullscreen view (no authentication required for players).
participant P21 as Get playlist for a player based on their assigned playlist. Args:
participant P22 as Legacy endpoint - Content reordering now handled in playlist management.
participant P23 as Delete multiple players at once.
participant P24 as Assign multiple players to a playlist.
participant P25 as Return deployment status for all players (used by polling JS).
participant P26 as Reorder items in player's playlist.
participant P27 as Remove content from player's playlist.
participant P28 as Add https_config table for HTTPS configuration management.
participant P29 as Caddy configuration generator and manager.
participant P30 as Generate Caddyfile configuration based on HTTPSConfig.
participant P31 as Generate a complete Caddyfile. Behaviour: - HTTPS disabled / no
participant P32 as Write Caddyfile to disk. The default path is /etc/caddy/Caddyfile — the
participant P33 as Push the current Caddyfile to Caddy via its admin API (/load). Caddy ap
participant P34 as Write Caddyfile to disk. Args: caddyfile_content: C
participant P35 as Reload Caddy configuration without restart. Note: Caddy monitor
participant P36 as Admin blueprint for user management and system settings.
participant P37 as Decorator to require admin role for route access.
participant P38 as Display admin panel with system overview.
participant P39 as Create a new user account.
participant P40 as Change user role between user and admin.
participant P41 as Delete a user account.
participant P42 as Change application theme.
participant P43 as Upload custom logo for application.
participant P44 as Clear all server logs.
participant P45 as Display user management page.
participant P46 as Get system information as JSON.
participant P47 as Display leftover media files not assigned to any playlist.
participant P48 as Delete all leftover images that are not part of any playlist
participant P49 as Delete all leftover videos that are not part of any playlist
participant P50 as Delete a single leftover content file
participant P51 as Show system dependencies status.
participant P52 as Install LibreOffice for PPTX conversion.
participant P53 as Install Emoji Fonts for better UI display.
participant P54 as Logo customization page.
participant P55 as Upload login page logo.
participant P56 as Display and manage users that edit images on players.
participant P57 as Update editing user name.
participant P58 as Display HTTPS configuration management page.
participant P59 as Update HTTPS configuration.
participant P60 as Get current HTTPS configuration status as JSON.
participant P61 as Path to the persisted player-build settings (in the instance folder).
participant P62 as Display the 'Build player files for deployment' admin page.
participant P63 as Build/refresh the staged player code and/or write its base config.
P0->>+ P1: uses
P1-->>- P0: return
P1->>+ P0: uses
P0-->>- P1: return
P1->>+ P2: uses
P2-->>- P1: return
P2->>+ P3: uses
P3-->>- P2: return
P2->>+ P4: uses
P4-->>- P2: return
P2->>+ P5: uses
P5-->>- P2: return
P2->>+ P1: uses
P1-->>- P2: return
P2->>+ P6: uses
P6-->>- P2: return
P2->>+ P7: uses
P7-->>- P2: return
P2->>+ P8: uses
P8-->>- P2: return
P2->>+ P9: uses
P9-->>- P2: return
P2->>+ P10: uses
P10-->>- P2: return
P2->>+ P11: uses
P11-->>- P2: return
P1->>+ P12: uses
P12-->>- P1: return
P12->>+ P3: uses
P3-->>- P12: return
P12->>+ P4: uses
P4-->>- P12: return
P12->>+ P1: uses
P1-->>- P12: return
P1->>+ P13: uses
P13-->>- P1: return
P1->>+ P14: uses
P14-->>- P1: return
P1->>+ P15: uses
P15-->>- P1: return
P1->>+ P16: uses
P16-->>- P1: return
P1->>+ P17: uses
P17-->>- P1: return
P1->>+ P18: uses
P18-->>- P1: return
P1->>+ P19: uses
P19-->>- P1: return
P1->>+ P20: uses
P20-->>- P1: return
P1->>+ P21: uses
P21-->>- P1: return
P1->>+ P22: uses
P22-->>- P1: return
P1->>+ P23: uses
P23-->>- P1: return
P1->>+ P24: uses
P24-->>- P1: return
P1->>+ P25: uses
P25-->>- P1: return
P1->>+ P26: uses
P26-->>- P1: return
P1->>+ P27: uses
P27-->>- P1: return
P1->>+ P28: uses
P28-->>- P1: return
P1->>+ P29: uses
P29-->>- P1: return
P1->>+ P30: uses
P30-->>- P1: return
P1->>+ P31: uses
P31-->>- P1: return
P1->>+ P32: uses
P32-->>- P1: return
P1->>+ P33: uses
P33-->>- P1: return
P1->>+ P34: uses
P34-->>- P1: return
P1->>+ P35: uses
P35-->>- P1: return
P0->>+ P36: uses
P36-->>- P0: return
P0->>+ P37: uses
P37-->>- P0: return
P0->>+ P38: uses
P38-->>- P0: return
P0->>+ P39: uses
P39-->>- P0: return
P0->>+ P40: uses
P40-->>- P0: return
P0->>+ P41: uses
P41-->>- P0: return
P0->>+ P42: uses
P42-->>- P0: return
P0->>+ P43: uses
P43-->>- P0: return
P0->>+ P44: uses
P44-->>- P0: return
P0->>+ P45: uses
P45-->>- P0: return
P0->>+ P46: uses
P46-->>- P0: return
P0->>+ P47: uses
P47-->>- P0: return
P0->>+ P48: uses
P48-->>- P0: return
P0->>+ P49: uses
P49-->>- P0: return
P0->>+ P50: uses
P50-->>- P0: return
P0->>+ P51: uses
P51-->>- P0: return
P0->>+ P52: uses
P52-->>- P0: return
P0->>+ P53: uses
P53-->>- P0: return
P0->>+ P54: uses
P54-->>- P0: return
P0->>+ P55: uses
P55-->>- P0: return
P0->>+ P56: uses
P56-->>- P0: return
P0->>+ P57: uses
P57-->>- P0: return
P0->>+ P58: uses
P58-->>- P0: return
P0->>+ P59: uses
P59-->>- P0: return
P0->>+ P60: uses
P60-->>- P0: return
P0->>+ P61: uses
P61-->>- P0: return
P0->>+ P62: uses
P62-->>- P0: return
P0->>+ P63: uses
P63-->>- P0: return
```
## Connections by Relation
### contains
- [[caddy_manager.py]] `EXTRACTED`
### rationale_for
- [[Generate Caddyfile configuration based on HTTPSConfig.]] `EXTRACTED`
### uses
- [[HTTPSConfig]] `INFERRED`
- [[Admin blueprint for user management and system settings.]] `INFERRED`
- [[Decorator to require admin role for route access.]] `INFERRED`
- [[Display admin panel with system overview.]] `INFERRED`
- [[Create a new user account.]] `INFERRED`
- [[Change user role between user and admin.]] `INFERRED`
- [[Delete a user account.]] `INFERRED`
- [[Change application theme.]] `INFERRED`
- [[Upload custom logo for application.]] `INFERRED`
- [[Clear all server logs.]] `INFERRED`
- [[Display user management page.]] `INFERRED`
- [[Get system information as JSON.]] `INFERRED`
- [[Display leftover media files not assigned to any playlist.]] `INFERRED`
- [[Delete all leftover images that are not part of any playlist]] `INFERRED`
- [[Delete all leftover videos that are not part of any playlist]] `INFERRED`
- [[Delete a single leftover content file]] `INFERRED`
- [[Show system dependencies status.]] `INFERRED`
- [[Install LibreOffice for PPTX conversion.]] `INFERRED`
- [[Install Emoji Fonts for better UI display.]] `INFERRED`
- [[Logo customization page.]] `INFERRED`
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+66
View File
@@ -0,0 +1,66 @@
# Community 0
> 90 nodes · cohesion 0.03
## Key Concepts
- [log_action()](file:///home/scheianu/digiserver-v2/app/utils/logger.py#L9) (116 connections)
- [content_old.py](file:///home/scheianu/digiserver-v2/app/blueprints/content_old.py#L1) (13 connections)
- [blueprint_groups.py](file:///home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py#L1) (13 connections)
- [ServerLog](file:///home/scheianu/digiserver-v2/app/models/server_log.py#L8) (12 connections)
- [group_player_management.py](file:///home/scheianu/digiserver-v2/app/utils/group_player_management.py#L1) (8 connections)
- [get_player_status_info()](file:///home/scheianu/digiserver-v2/app/utils/group_player_management.py#L10) (7 connections)
- [logger.py](file:///home/scheianu/digiserver-v2/app/utils/logger.py#L1) (7 connections)
- [auth.py](file:///home/scheianu/digiserver-v2/app/blueprints/auth.py#L1) (5 connections)
- [server_log.py](file:///home/scheianu/digiserver-v2/app/models/server_log.py#L1) (5 connections)
- [group_fullscreen()](file:///home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py#L214) (4 connections)
- [group_stats()](file:///home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py#L394) (4 connections)
- [groups_list()](file:///home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py#L16) (4 connections)
- [manage_group()](file:///home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py#L175) (4 connections)
- [get_group_statistics()](file:///home/scheianu/digiserver-v2/app/utils/group_player_management.py#L54) (4 connections)
- [add_content_to_group()](file:///home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py#L298) (3 connections)
- [add_player_to_group()](file:///home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py#L239) (3 connections)
- [remove_content_from_group()](file:///home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py#L335) (3 connections)
- [remove_player_from_group()](file:///home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py#L269) (3 connections)
- [reorder_group_content()](file:///home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py#L365) (3 connections)
- [bulk_delete_content()](file:///home/scheianu/digiserver-v2/app/blueprints/content_old.py#L337) (3 connections)
- [check_duplicates()](file:///home/scheianu/digiserver-v2/app/blueprints/content_old.py#L453) (3 connections)
- [content_groups_info()](file:///home/scheianu/digiserver-v2/app/blueprints/content_old.py#L478) (3 connections)
- [content_list()](file:///home/scheianu/digiserver-v2/app/blueprints/content_old.py#L30) (3 connections)
- [content_statistics()](file:///home/scheianu/digiserver-v2/app/blueprints/content_old.py#L419) (3 connections)
- [delete_by_filename()](file:///home/scheianu/digiserver-v2/app/blueprints/content_old.py#L289) (3 connections)
- *... and 65 more nodes in this community*
## Class Diagram
```mermaid
classDiagram
class ServerLog {
+server_log.py()
+.__repr__()
}
```
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/blueprints/auth.py](file:///home/scheianu/digiserver-v2/app/blueprints/auth.py)
- [/home/scheianu/digiserver-v2/app/blueprints/content_old.py](file:///home/scheianu/digiserver-v2/app/blueprints/content_old.py)
- [/home/scheianu/digiserver-v2/app/blueprints/main.py](file:///home/scheianu/digiserver-v2/app/blueprints/main.py)
- [/home/scheianu/digiserver-v2/app/models/server_log.py](file:///home/scheianu/digiserver-v2/app/models/server_log.py)
- [/home/scheianu/digiserver-v2/app/utils/group_player_management.py](file:///home/scheianu/digiserver-v2/app/utils/group_player_management.py)
- [/home/scheianu/digiserver-v2/app/utils/logger.py](file:///home/scheianu/digiserver-v2/app/utils/logger.py)
- [/home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py](file:///home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py)
## Audit Trail
- EXTRACTED: 180 (52%)
- INFERRED: 165 (48%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+69
View File
@@ -0,0 +1,69 @@
# Community 1
> 80 nodes · cohesion 0.04
## Key Concepts
- [PlayerUser](file:///home/scheianu/digiserver-v2/app/models/player_user.py#L7) (74 connections)
- [CaddyConfigGenerator](file:///home/scheianu/digiserver-v2/app/utils/caddy_manager.py#L36) (31 connections)
- [admin.py](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L1) (31 connections)
- [get_config()](file:///home/scheianu/digiserver-v2/app/models/https_config.py#L43) (8 connections)
- [build_player()](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L1028) (7 connections)
- [update_https_config()](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L886) (7 connections)
- [https_config_status()](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L995) (5 connections)
- [caddy_manager.py](file:///home/scheianu/digiserver-v2/app/utils/caddy_manager.py#L1) (5 connections)
- [create_user()](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L79) (4 connections)
- [https_config()](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L856) (4 connections)
- [_player_build_meta_path()](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L1019) (4 connections)
- [Admin blueprint for user management and system settings.](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L1) (4 connections)
- [Path to the persisted player-build settings (in the instance folder).](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L1020) (4 connections)
- [Display the 'Build player files for deployment' admin page.](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L1029) (4 connections)
- [Change user role between user and admin.](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L126) (4 connections)
- [Delete a user account.](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L160) (4 connections)
- [Change application theme.](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L188) (4 connections)
- [Decorator to require admin role for route access.](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L19) (4 connections)
- [Upload custom logo for application.](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L212) (4 connections)
- [Clear all server logs.](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L254) (4 connections)
- [Display user management page.](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L274) (4 connections)
- [Get system information as JSON.](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L323) (4 connections)
- [Display leftover media files not assigned to any playlist.](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L355) (4 connections)
- [Display admin panel with system overview.](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L36) (4 connections)
- [Delete all leftover images that are not part of any playlist](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L407) (4 connections)
- *... and 55 more nodes in this community*
## Class Diagram
```mermaid
classDiagram
class CaddyConfigGenerator {
+caddy_manager.py()
}
class PlayerUser {
+player_user.py()
+.__repr__()
+.to_dict()
}
```
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/blueprints/admin.py](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py)
- [/home/scheianu/digiserver-v2/app/models/https_config.py](file:///home/scheianu/digiserver-v2/app/models/https_config.py)
- [/home/scheianu/digiserver-v2/app/models/player_edit.py](file:///home/scheianu/digiserver-v2/app/models/player_edit.py)
- [/home/scheianu/digiserver-v2/app/models/player_user.py](file:///home/scheianu/digiserver-v2/app/models/player_user.py)
- [/home/scheianu/digiserver-v2/app/utils/caddy_manager.py](file:///home/scheianu/digiserver-v2/app/utils/caddy_manager.py)
- [/home/scheianu/digiserver-v2/migrations/add_player_user_table.py](file:///home/scheianu/digiserver-v2/migrations/add_player_user_table.py)
## Audit Trail
- EXTRACTED: 156 (41%)
- INFERRED: 229 (59%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+45
View File
@@ -0,0 +1,45 @@
# Community 10
> 20 nodes · cohesion 0.12
## Key Concepts
- [ssh_deploy.py](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L1) (8 connections)
- [deploy_player_to_host()](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L311) (8 connections)
- [background_player_deployment()](file:///home/scheianu/digiserver-v2/app/utils/background_tasks.py#L29) (4 connections)
- [generate_app_config()](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L267) (4 connections)
- [get_local_player_code_status()](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L15) (4 connections)
- [run_background_task()](file:///home/scheianu/digiserver-v2/app/utils/background_tasks.py#L9) (3 connections)
- [background_tasks.py](file:///home/scheianu/digiserver-v2/app/utils/background_tasks.py#L1) (3 connections)
- [parse_server_address()](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L241) (3 connections)
- [test_ssh_connection()](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L85) (3 connections)
- [generate_player_config()](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L149) (2 connections)
- [Background task execution for long-running operations.](file:///home/scheianu/digiserver-v2/app/utils/background_tasks.py#L1) (1 connections)
- [Run a function in a background thread, with a Flask app context pushed.](file:///home/scheianu/digiserver-v2/app/utils/background_tasks.py#L10) (1 connections)
- [Deploy player code to host in background. Args: hostname: SSH h](file:///home/scheianu/digiserver-v2/app/utils/background_tasks.py#L43) (1 connections)
- [SSH deployment utilities for player provisioning.](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L1) (1 connections)
- [Generate player configuration JSON for connecting to DigiServer. Args:](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L156) (1 connections)
- [Check status of pre-staged player code. Args: player_code_dir: Opti](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L16) (1 connections)
- [Derive the values the player needs from a DigiServer URL. The player's conf](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L242) (1 connections)
- [Generate the config/app_config.json the player actually reads. This is what](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L277) (1 connections)
- [Deploy player code to remote host. Args: hostname: Target hostn](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L326) (1 connections)
- [Test SSH connection to a remote host. Args: hostname: Target ho](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L86) (1 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/utils/background_tasks.py](file:///home/scheianu/digiserver-v2/app/utils/background_tasks.py)
- [/home/scheianu/digiserver-v2/app/utils/ssh_deploy.py](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py)
## Audit Trail
- EXTRACTED: 45 (87%)
- INFERRED: 7 (13%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+44
View File
@@ -0,0 +1,44 @@
# Community 11
> 19 nodes · cohesion 0.15
## Key Concepts
- [build_player_action()](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L1074) (9 connections)
- [player_build.py](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L1) (9 connections)
- [build_player_files()](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L49) (5 connections)
- [get_short_head()](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L38) (5 connections)
- [Build/refresh the staged player code and/or write its base config.](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py#L1075) (4 connections)
- [get_player_server_settings()](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L188) (4 connections)
- [load_build_settings()](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L165) (4 connections)
- [write_base_config()](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L128) (4 connections)
- [make_build_record()](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L208) (3 connections)
- [_run_git()](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L28) (3 connections)
- [save_build_settings()](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L176) (3 connections)
- [Utilities for building/staging the player files on the server. Admins use the "](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L1) (1 connections)
- [Write a base ``config/app_config.json`` into the staged player code. ``scre](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L137) (1 connections)
- [Load saved build settings from ``meta_path`` (or None if absent/invalid).](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L166) (1 connections)
- [Persist build settings to ``meta_path``.](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L177) (1 connections)
- [Return the saved server address settings for deployment, if available. Retu](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L189) (1 connections)
- [Assemble the metadata record to persist after a build.](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L210) (1 connections)
- [Return the short git commit of the staged code, or 'unknown'.](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L39) (1 connections)
- [Clone or refresh the player source into ``player_code_dir``. If the directo](file:///home/scheianu/digiserver-v2/app/utils/player_build.py#L50) (1 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/blueprints/admin.py](file:///home/scheianu/digiserver-v2/app/blueprints/admin.py)
- [/home/scheianu/digiserver-v2/app/utils/player_build.py](file:///home/scheianu/digiserver-v2/app/utils/player_build.py)
## Audit Trail
- EXTRACTED: 44 (72%)
- INFERRED: 17 (28%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+32
View File
@@ -0,0 +1,32 @@
# Community 12
> 8 nodes · cohesion 0.29
## Key Concepts
- [pptx_converter.py](file:///home/scheianu/digiserver-v2/app/utils/pptx_converter.py#L1) (4 connections)
- [cleanup_libreoffice_processes()](file:///home/scheianu/digiserver-v2/app/utils/pptx_converter.py#L11) (3 connections)
- [pptx_to_pdf_libreoffice()](file:///home/scheianu/digiserver-v2/app/utils/pptx_converter.py#L20) (3 connections)
- [validate_pptx_file()](file:///home/scheianu/digiserver-v2/app/utils/pptx_converter.py#L86) (2 connections)
- [PowerPoint to PDF converter using LibreOffice.](file:///home/scheianu/digiserver-v2/app/utils/pptx_converter.py#L1) (1 connections)
- [Clean up any hanging LibreOffice processes.](file:///home/scheianu/digiserver-v2/app/utils/pptx_converter.py#L12) (1 connections)
- [Convert PPTX to PDF using LibreOffice for highest quality. This functio](file:///home/scheianu/digiserver-v2/app/utils/pptx_converter.py#L21) (1 connections)
- [Validate if file is a valid PowerPoint file. Args: filepath: Pa](file:///home/scheianu/digiserver-v2/app/utils/pptx_converter.py#L87) (1 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/utils/pptx_converter.py](file:///home/scheianu/digiserver-v2/app/utils/pptx_converter.py)
## Audit Trail
- EXTRACTED: 16 (100%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+28
View File
@@ -0,0 +1,28 @@
# Community 13
> 4 nodes · cohesion 0.50
## Key Concepts
- [migrate_add_edit_enabled.py](file:///home/scheianu/digiserver-v2/old_code_documentation/migrate_add_edit_enabled.py#L1) (2 connections)
- [migrate()](file:///home/scheianu/digiserver-v2/old_code_documentation/migrate_add_edit_enabled.py#L7) (2 connections)
- [Migration: Add edit_on_player_enabled column to playlist_content table.](file:///home/scheianu/digiserver-v2/old_code_documentation/migrate_add_edit_enabled.py#L1) (1 connections)
- [Add edit_on_player_enabled column to playlist_content.](file:///home/scheianu/digiserver-v2/old_code_documentation/migrate_add_edit_enabled.py#L8) (1 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/old_code_documentation/migrate_add_edit_enabled.py](file:///home/scheianu/digiserver-v2/old_code_documentation/migrate_add_edit_enabled.py)
## Audit Trail
- EXTRACTED: 6 (100%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+26
View File
@@ -0,0 +1,26 @@
# Community 14
> 2 nodes · cohesion 1.00
## Key Concepts
- [migrate_player_user_global.py](file:///home/scheianu/digiserver-v2/migrations/migrate_player_user_global.py#L1) (1 connections)
- [Migrate player_user table to remove player_id and make user_code unique globally](file:///home/scheianu/digiserver-v2/migrations/migrate_player_user_global.py#L1) (1 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/migrations/migrate_player_user_global.py](file:///home/scheianu/digiserver-v2/migrations/migrate_player_user_global.py)
## Audit Trail
- EXTRACTED: 2 (100%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+26
View File
@@ -0,0 +1,26 @@
# Community 15
> 2 nodes · cohesion 1.00
## Key Concepts
- [Add original_filename column to content table. This preserves the pristine uplo](file:///home/scheianu/digiserver-v2/migrations/add_original_filename_to_content.py#L1) (1 connections)
- [add_original_filename_to_content.py](file:///home/scheianu/digiserver-v2/migrations/add_original_filename_to_content.py#L1) (1 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/migrations/add_original_filename_to_content.py](file:///home/scheianu/digiserver-v2/migrations/add_original_filename_to_content.py)
## Audit Trail
- EXTRACTED: 2 (100%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+26
View File
@@ -0,0 +1,26 @@
# Community 16
> 2 nodes · cohesion 1.00
## Key Concepts
- [Add url column to content table for weblink support.](file:///home/scheianu/digiserver-v2/migrations/add_url_to_content.py#L1) (1 connections)
- [add_url_to_content.py](file:///home/scheianu/digiserver-v2/migrations/add_url_to_content.py#L1) (1 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/migrations/add_url_to_content.py](file:///home/scheianu/digiserver-v2/migrations/add_url_to_content.py)
## Audit Trail
- EXTRACTED: 2 (100%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+26
View File
@@ -0,0 +1,26 @@
# Community 17
> 2 nodes · cohesion 1.00
## Key Concepts
- [Add deployment tracking columns to player table.](file:///home/scheianu/digiserver-v2/migrations/add_deployment_fields_to_player.py#L1) (1 connections)
- [add_deployment_fields_to_player.py](file:///home/scheianu/digiserver-v2/migrations/add_deployment_fields_to_player.py#L1) (1 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/migrations/add_deployment_fields_to_player.py](file:///home/scheianu/digiserver-v2/migrations/add_deployment_fields_to_player.py)
## Audit Trail
- EXTRACTED: 2 (100%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+26
View File
@@ -0,0 +1,26 @@
# Community 18
> 2 nodes · cohesion 1.00
## Key Concepts
- [Add email field to https_config table.](file:///home/scheianu/digiserver-v2/migrations/add_email_to_https_config.py#L1) (1 connections)
- [add_email_to_https_config.py](file:///home/scheianu/digiserver-v2/migrations/add_email_to_https_config.py#L1) (1 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/migrations/add_email_to_https_config.py](file:///home/scheianu/digiserver-v2/migrations/add_email_to_https_config.py)
## Audit Trail
- EXTRACTED: 2 (100%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+26
View File
@@ -0,0 +1,26 @@
# Community 19
> 2 nodes · cohesion 1.00
## Key Concepts
- [Flask extensions initialization Centralized extension management for the applica](file:///home/scheianu/digiserver-v2/app/extensions.py#L1) (1 connections)
- [extensions.py](file:///home/scheianu/digiserver-v2/app/extensions.py#L1) (1 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/extensions.py](file:///home/scheianu/digiserver-v2/app/extensions.py)
## Audit Trail
- EXTRACTED: 2 (100%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+52
View File
@@ -0,0 +1,52 @@
# Community 2
> 68 nodes · cohesion 0.04
## Key Concepts
- [content.py](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L1) (27 connections)
- [.increment_version()](file:///home/scheianu/digiserver-v2/app/models/playlist.py#L70) (18 connections)
- [upload_media()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L1220) (9 connections)
- [playlist.py](file:///home/scheianu/digiserver-v2/app/blueprints/playlist.py#L1) (8 connections)
- [process_file_in_background()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L798) (7 connections)
- [process_presentation_file()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L977) (7 connections)
- [add_weblink()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L272) (5 connections)
- [add_weblink_to_playlist()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L352) (5 connections)
- [process_pdf_file()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L727) (5 connections)
- [process_video_file_extended()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L702) (5 connections)
- [playlist.py](file:///home/scheianu/digiserver-v2/app/models/playlist.py#L1) (5 connections)
- [add_content_to_playlist()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L222) (4 connections)
- [bulk_remove_from_playlist()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L455) (4 connections)
- [optimize_image_to_fullhd()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L1203) (4 connections)
- [process_image_file()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L676) (4 connections)
- [remove_content_from_playlist()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L418) (4 connections)
- [reorder_playlist_content()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L497) (4 connections)
- [resize_image_to_fullhd()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L1145) (4 connections)
- [update_playlist_content_duration()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L620) (4 connections)
- [update_playlist_content_edit_enabled()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L579) (4 connections)
- [update_playlist_content_muted()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L538) (4 connections)
- [add_to_playlist()](file:///home/scheianu/digiserver-v2/app/blueprints/playlist.py#L33) (4 connections)
- [clear_playlist()](file:///home/scheianu/digiserver-v2/app/blueprints/playlist.py#L278) (4 connections)
- [remove_from_playlist()](file:///home/scheianu/digiserver-v2/app/blueprints/playlist.py#L88) (4 connections)
- [reorder_playlist()](file:///home/scheianu/digiserver-v2/app/blueprints/playlist.py#L143) (4 connections)
- *... and 43 more nodes in this community*
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/blueprints/content.py](file:///home/scheianu/digiserver-v2/app/blueprints/content.py)
- [/home/scheianu/digiserver-v2/app/blueprints/playlist.py](file:///home/scheianu/digiserver-v2/app/blueprints/playlist.py)
- [/home/scheianu/digiserver-v2/app/models/playlist.py](file:///home/scheianu/digiserver-v2/app/models/playlist.py)
## Audit Trail
- EXTRACTED: 154 (64%)
- INFERRED: 86 (36%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 20
> 1 nodes · cohesion 1.00
## Key Concepts
- [Check if feedback indicates an error.](file:///home/scheianu/digiserver-v2/app/models/player_feedback.py#L43) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/player_feedback.py](file:///home/scheianu/digiserver-v2/app/models/player_feedback.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 21
> 1 nodes · cohesion 1.00
## Key Concepts
- [Get age of feedback in seconds.](file:///home/scheianu/digiserver-v2/app/models/player_feedback.py#L48) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/player_feedback.py](file:///home/scheianu/digiserver-v2/app/models/player_feedback.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 22
> 1 nodes · cohesion 1.00
## Key Concepts
- [Get most recent feedback for a player. Args: player](file:///home/scheianu/digiserver-v2/app/models/player_feedback.py#L54) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/player_feedback.py](file:///home/scheianu/digiserver-v2/app/models/player_feedback.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 23
> 1 nodes · cohesion 1.00
## Key Concepts
- [Get the current HTTPS configuration. Returns: HTTPS](file:///home/scheianu/digiserver-v2/app/models/https_config.py#L44) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/https_config.py](file:///home/scheianu/digiserver-v2/app/models/https_config.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 24
> 1 nodes · cohesion 1.00
## Key Concepts
- [Create or update HTTPS configuration. Args: https_e](file:///home/scheianu/digiserver-v2/app/models/https_config.py#L56) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/https_config.py](file:///home/scheianu/digiserver-v2/app/models/https_config.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 25
> 1 nodes · cohesion 1.00
## Key Concepts
- [Check if user has admin role.](file:///home/scheianu/digiserver-v2/app/models/user.py#L38) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/user.py](file:///home/scheianu/digiserver-v2/app/models/user.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 26
> 1 nodes · cohesion 1.00
## Key Concepts
- [Check if player is online (seen in last 5 minutes).](file:///home/scheianu/digiserver-v2/app/models/player.py#L61) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/player.py](file:///home/scheianu/digiserver-v2/app/models/player.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 27
> 1 nodes · cohesion 1.00
## Key Concepts
- [Authenticate a player by hostname and password or quickconnect code.](file:///home/scheianu/digiserver-v2/app/models/player.py#L122) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/player.py](file:///home/scheianu/digiserver-v2/app/models/player.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 28
> 1 nodes · cohesion 1.00
## Key Concepts
- [Create an info level log entry. Args: message: Log](file:///home/scheianu/digiserver-v2/app/models/server_log.py#L31) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/server_log.py](file:///home/scheianu/digiserver-v2/app/models/server_log.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 29
> 1 nodes · cohesion 1.00
## Key Concepts
- [Create a warning level log entry. Args: message: Lo](file:///home/scheianu/digiserver-v2/app/models/server_log.py#L46) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/server_log.py](file:///home/scheianu/digiserver-v2/app/models/server_log.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+71
View File
@@ -0,0 +1,71 @@
# Community 3
> 62 nodes · cohesion 0.06
## Key Concepts
- [PlayerEdit](file:///home/scheianu/digiserver-v2/app/models/player_edit.py#L8) (99 connections)
- [Playlist](file:///home/scheianu/digiserver-v2/app/models/playlist.py#L19) (33 connections)
- [api.py](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L1) (23 connections)
- [receive_edited_media()](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L736) (6 connections)
- [authenticate_player()](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L107) (5 connections)
- [get_cached_playlist()](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L378) (5 connections)
- [get_playlist_by_quickconnect()](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L207) (5 connections)
- [receive_player_feedback()](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L429) (5 connections)
- [.get_content_ordered()](file:///home/scheianu/digiserver-v2/app/models/playlist.py#L75) (5 connections)
- [deploy_player()](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L980) (4 connections)
- [get_player_playlist()](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L305) (4 connections)
- [API blueprint for REST endpoints and player communication.](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L1) (4 connections)
- [Get server SSL certificate.](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L101) (4 connections)
- [Handle 404 errors in API.](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L1050) (4 connections)
- [Handle 405 errors in API.](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L1056) (4 connections)
- [Handle 500 errors in API.](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L1062) (4 connections)
- [Authenticate a player and return auth code and configuration. Request J](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L108) (4 connections)
- [Verify an auth code and return player information. Request JSON:](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L164) (4 connections)
- [Get playlist using hostname and quickconnect code (Kivy player compatible).](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L208) (4 connections)
- [Rate limiting decorator. Args: max_requests: Maximum number of](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L22) (4 connections)
- [Get playlist for a specific player. Requires player authentication via](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L306) (4 connections)
- [Get current playlist version for a player. Lightweight endpoint for pla](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L350) (4 connections)
- [Get cached playlist for a player based on assigned playlist.](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L379) (4 connections)
- [Receive feedback/status updates from players (Kivy player compatible).](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L430) (4 connections)
- [Get current status of a player (public endpoint for monitoring).](file:///home/scheianu/digiserver-v2/app/blueprints/api.py#L541) (4 connections)
- *... and 37 more nodes in this community*
## Class Diagram
```mermaid
classDiagram
class PlayerEdit {
+player_edit.py()
+.__repr__()
+.to_dict()
}
class Playlist {
+playlist.py()
+.__repr__()
+.increment_version()
+.get_content_ordered()
}
```
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/blueprints/api.py](file:///home/scheianu/digiserver-v2/app/blueprints/api.py)
- [/home/scheianu/digiserver-v2/app/blueprints/content.py](file:///home/scheianu/digiserver-v2/app/blueprints/content.py)
- [/home/scheianu/digiserver-v2/app/models/player.py](file:///home/scheianu/digiserver-v2/app/models/player.py)
- [/home/scheianu/digiserver-v2/app/models/player_edit.py](file:///home/scheianu/digiserver-v2/app/models/player_edit.py)
- [/home/scheianu/digiserver-v2/app/models/playlist.py](file:///home/scheianu/digiserver-v2/app/models/playlist.py)
## Audit Trail
- EXTRACTED: 123 (35%)
- INFERRED: 228 (65%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 30
> 1 nodes · cohesion 1.00
## Key Concepts
- [Create an error level log entry. Args: message: Log](file:///home/scheianu/digiserver-v2/app/models/server_log.py#L61) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/server_log.py](file:///home/scheianu/digiserver-v2/app/models/server_log.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 31
> 1 nodes · cohesion 1.00
## Key Concepts
- [Get number of content items in this group.](file:///home/scheianu/digiserver-v2/app/models/group.py#L46) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/group.py](file:///home/scheianu/digiserver-v2/app/models/group.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 32
> 1 nodes · cohesion 1.00
## Key Concepts
- [Get file size in megabytes.](file:///home/scheianu/digiserver-v2/app/models/content.py#L50) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/content.py](file:///home/scheianu/digiserver-v2/app/models/content.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 33
> 1 nodes · cohesion 1.00
## Key Concepts
- [Get number of groups containing this content.](file:///home/scheianu/digiserver-v2/app/models/content.py#L57) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/content.py](file:///home/scheianu/digiserver-v2/app/models/content.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 34
> 1 nodes · cohesion 1.00
## Key Concepts
- [Name of the original (unedited) file for display purposes.](file:///home/scheianu/digiserver-v2/app/models/content.py#L62) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/content.py](file:///home/scheianu/digiserver-v2/app/models/content.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 35
> 1 nodes · cohesion 1.00
## Key Concepts
- [Path (relative to uploads/) where the original unedited file lives. Whe](file:///home/scheianu/digiserver-v2/app/models/content.py#L67) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/content.py](file:///home/scheianu/digiserver-v2/app/models/content.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 36
> 1 nodes · cohesion 1.00
## Key Concepts
- [Path (relative to uploads/) of the current/latest version to display.](file:///home/scheianu/digiserver-v2/app/models/content.py#L79) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/content.py](file:///home/scheianu/digiserver-v2/app/models/content.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 37
> 1 nodes · cohesion 1.00
## Key Concepts
- [Whether this content has been edited on a player.](file:///home/scheianu/digiserver-v2/app/models/content.py#L100) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/content.py](file:///home/scheianu/digiserver-v2/app/models/content.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 38
> 1 nodes · cohesion 1.00
## Key Concepts
- [Display name of the original (unedited) file.](file:///home/scheianu/digiserver-v2/app/models/content.py#L105) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/content.py](file:///home/scheianu/digiserver-v2/app/models/content.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 39
> 1 nodes · cohesion 1.00
## Key Concepts
- [uploads/-relative path of the pristine original file. After a player ed](file:///home/scheianu/digiserver-v2/app/models/content.py#L110) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/models/content.py](file:///home/scheianu/digiserver-v2/app/models/content.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+91
View File
@@ -0,0 +1,91 @@
# Community 4
> 55 nodes · cohesion 0.07
## Key Concepts
- [User](file:///home/scheianu/digiserver-v2/app/models/user.py#L10) (19 connections)
- [create_app()](file:///home/scheianu/digiserver-v2/app/app.py#L17) (13 connections)
- [ScriptNameFix](file:///home/scheianu/digiserver-v2/app/utils/script_name_fix.py#L15) (12 connections)
- [DevelopmentConfig](file:///home/scheianu/digiserver-v2/app/config.py#L56) (11 connections)
- [ProductionConfig](file:///home/scheianu/digiserver-v2/app/config.py#L78) (11 connections)
- [TestingConfig](file:///home/scheianu/digiserver-v2/app/config.py#L102) (11 connections)
- [app.py](file:///home/scheianu/digiserver-v2/app/app.py#L1) (8 connections)
- [DigiServer v2 - Application Factory Modern Flask application with blueprint arch](file:///home/scheianu/digiserver-v2/app/app.py#L1) (6 connections)
- [Configure Flask-Login](file:///home/scheianu/digiserver-v2/app/app.py#L111) (6 connections)
- [Register error handlers](file:///home/scheianu/digiserver-v2/app/app.py#L124) (6 connections)
- [Register CLI commands](file:///home/scheianu/digiserver-v2/app/app.py#L149) (6 connections)
- [Application factory pattern Args: config_name: Configuration en](file:///home/scheianu/digiserver-v2/app/app.py#L18) (6 connections)
- [Register context processors for templates](file:///home/scheianu/digiserver-v2/app/app.py#L190) (6 connections)
- [Register custom Jinja2 template filters](file:///home/scheianu/digiserver-v2/app/app.py#L214) (6 connections)
- [Register application blueprints](file:///home/scheianu/digiserver-v2/app/app.py#L91) (6 connections)
- [config.py](file:///home/scheianu/digiserver-v2/app/config.py#L1) (6 connections)
- [Config](file:///home/scheianu/digiserver-v2/app/config.py#L9) (4 connections)
- [add_muted_column()](file:///home/scheianu/digiserver-v2/old_code_documentation/add_muted_column.py#L6) (3 connections)
- [configure_login_manager()](file:///home/scheianu/digiserver-v2/app/app.py#L110) (3 connections)
- [register_blueprints()](file:///home/scheianu/digiserver-v2/app/app.py#L90) (3 connections)
- [register_commands()](file:///home/scheianu/digiserver-v2/app/app.py#L148) (3 connections)
- [register_context_processors()](file:///home/scheianu/digiserver-v2/app/app.py#L189) (3 connections)
- [register_error_handlers()](file:///home/scheianu/digiserver-v2/app/app.py#L123) (3 connections)
- [register_template_filters()](file:///home/scheianu/digiserver-v2/app/app.py#L213) (3 connections)
- [user.py](file:///home/scheianu/digiserver-v2/app/models/user.py#L1) (3 connections)
- *... and 30 more nodes in this community*
## Class Diagram
```mermaid
classDiagram
class Config {
+config.py()
}
class DevelopmentConfig {
+config.py()
}
class ProductionConfig {
+config.py()
}
class TestingConfig {
+config.py()
}
class ScriptNameFix {
+script_name_fix.py()
+.__init__()
+.__call__()
}
class User {
+user.py()
+.__repr__()
+.update_last_login()
}
DevelopmentConfig <|-- Config
ProductionConfig <|-- Config
TestingConfig <|-- Config
Config <|-- DevelopmentConfig
Config <|-- ProductionConfig
Config <|-- TestingConfig
```
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/app.py](file:///home/scheianu/digiserver-v2/app/app.py)
- [/home/scheianu/digiserver-v2/app/config.py](file:///home/scheianu/digiserver-v2/app/config.py)
- [/home/scheianu/digiserver-v2/app/models/user.py](file:///home/scheianu/digiserver-v2/app/models/user.py)
- [/home/scheianu/digiserver-v2/app/utils/portal_sso.py](file:///home/scheianu/digiserver-v2/app/utils/portal_sso.py)
- [/home/scheianu/digiserver-v2/app/utils/script_name_fix.py](file:///home/scheianu/digiserver-v2/app/utils/script_name_fix.py)
- [/home/scheianu/digiserver-v2/old_code_documentation/add_muted_column.py](file:///home/scheianu/digiserver-v2/old_code_documentation/add_muted_column.py)
- [/home/scheianu/digiserver-v2/old_code_documentation/fix_player_user_schema.py](file:///home/scheianu/digiserver-v2/old_code_documentation/fix_player_user_schema.py)
- [/home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_simple.py](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_simple.py)
## Audit Trail
- EXTRACTED: 112 (53%)
- INFERRED: 99 (47%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+25
View File
@@ -0,0 +1,25 @@
# Community 40
> 1 nodes · cohesion 1.00
## Key Concepts
- [check_fix_player.py](file:///home/scheianu/digiserver-v2/old_code_documentation/check_fix_player.py#L1) (0 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/old_code_documentation/check_fix_player.py](file:///home/scheianu/digiserver-v2/old_code_documentation/check_fix_player.py)
## Audit Trail
- EXTRACTED: 0 (0%)
- INFERRED: 0 (0%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+84
View File
@@ -0,0 +1,84 @@
# Community 5
> 54 nodes · cohesion 0.04
## Key Concepts
- [Content](file:///home/scheianu/digiserver-v2/app/models/content.py#L8) (24 connections)
- [Models package for digiserver-v2.](file:///home/scheianu/digiserver-v2/app/models/__init__.py#L1) (13 connections)
- [Player](file:///home/scheianu/digiserver-v2/app/models/player.py#L8) (12 connections)
- [content.py](file:///home/scheianu/digiserver-v2/app/models/content.py#L1) (8 connections)
- [player_feedback.py](file:///home/scheianu/digiserver-v2/app/models/player_feedback.py#L1) (5 connections)
- [PlayerFeedback](file:///home/scheianu/digiserver-v2/app/models/player_feedback.py#L8) (5 connections)
- [.check_quickconnect_code()](file:///home/scheianu/digiserver-v2/app/models/player.py#L106) (5 connections)
- [player.py](file:///home/scheianu/digiserver-v2/app/models/player.py#L1) (4 connections)
- [Main Blueprint - Dashboard and Home Routes](file:///home/scheianu/digiserver-v2/app/blueprints/main.py#L1) (4 connections)
- [Health check endpoint](file:///home/scheianu/digiserver-v2/app/blueprints/main.py#L50) (4 connections)
- [authenticate()](file:///home/scheianu/digiserver-v2/app/models/player.py#L121) (4 connections)
- [Content model for media files.](file:///home/scheianu/digiserver-v2/app/models/content.py#L1) (3 connections)
- [main.py](file:///home/scheianu/digiserver-v2/app/blueprints/main.py#L1) (3 connections)
- [.check_password()](file:///home/scheianu/digiserver-v2/app/models/player.py#L85) (3 connections)
- [.is_image()](file:///home/scheianu/digiserver-v2/app/models/content.py#L82) (2 connections)
- [.is_pdf()](file:///home/scheianu/digiserver-v2/app/models/content.py#L90) (2 connections)
- [.is_video()](file:///home/scheianu/digiserver-v2/app/models/content.py#L86) (2 connections)
- [.is_weblink()](file:///home/scheianu/digiserver-v2/app/models/content.py#L94) (2 connections)
- [.__repr__()](file:///home/scheianu/digiserver-v2/app/models/content.py#L44) (2 connections)
- [health()](file:///home/scheianu/digiserver-v2/app/blueprints/main.py#L49) (2 connections)
- [.__repr__()](file:///home/scheianu/digiserver-v2/app/models/player_feedback.py#L37) (2 connections)
- [.__repr__()](file:///home/scheianu/digiserver-v2/app/models/player.py#L55) (2 connections)
- [.__repr__()](file:///home/scheianu/digiserver-v2/app/models/playlist.py#L48) (2 connections)
- [String representation of Playlist.](file:///home/scheianu/digiserver-v2/app/models/playlist.py#L49) (2 connections)
- [current_media_path()](file:///home/scheianu/digiserver-v2/app/models/content.py#L78) (1 connections)
- *... and 29 more nodes in this community*
## Class Diagram
```mermaid
classDiagram
class Content {
+content.py()
+.__repr__()
+.is_image()
+.is_video()
+.is_pdf()
+.is_weblink()
}
class PlayerFeedback {
+player_feedback.py()
+.__repr__()
}
class Player {
+player.py()
+.__repr__()
+.update_status()
+.set_password()
+.check_password()
+.set_quickconnect_code()
+.check_quickconnect_code()
}
```
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/blueprints/__init__.py](file:///home/scheianu/digiserver-v2/app/blueprints/__init__.py)
- [/home/scheianu/digiserver-v2/app/blueprints/main.py](file:///home/scheianu/digiserver-v2/app/blueprints/main.py)
- [/home/scheianu/digiserver-v2/app/models/__init__.py](file:///home/scheianu/digiserver-v2/app/models/__init__.py)
- [/home/scheianu/digiserver-v2/app/models/content.py](file:///home/scheianu/digiserver-v2/app/models/content.py)
- [/home/scheianu/digiserver-v2/app/models/player.py](file:///home/scheianu/digiserver-v2/app/models/player.py)
- [/home/scheianu/digiserver-v2/app/models/player_feedback.py](file:///home/scheianu/digiserver-v2/app/models/player_feedback.py)
- [/home/scheianu/digiserver-v2/app/models/playlist.py](file:///home/scheianu/digiserver-v2/app/models/playlist.py)
- [/home/scheianu/digiserver-v2/app/utils/__init__.py](file:///home/scheianu/digiserver-v2/app/utils/__init__.py)
## Audit Trail
- EXTRACTED: 100 (68%)
- INFERRED: 47 (32%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+66
View File
@@ -0,0 +1,66 @@
# Community 6
> 51 nodes · cohesion 0.05
## Key Concepts
- [HTTPSConfig](file:///home/scheianu/digiserver-v2/app/models/https_config.py#L8) (30 connections)
- [players.py](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L1) (18 connections)
- [add_player()](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L56) (10 connections)
- [manage_player()](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L328) (6 connections)
- [.set_password()](file:///home/scheianu/digiserver-v2/app/models/player.py#L76) (4 connections)
- [.set_quickconnect_code()](file:///home/scheianu/digiserver-v2/app/models/player.py#L97) (4 connections)
- [get_player_playlist()](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L545) (4 connections)
- [player_fullscreen()](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L522) (4 connections)
- [Players blueprint for player management and display.](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L1) (4 connections)
- [Regenerate authentication code for a player.](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L299) (4 connections)
- [Redirect to manage player page (combined view).](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L322) (4 connections)
- [Manage player - edit credentials, assign playlist, view logs.](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L329) (4 connections)
- [Display all edited media files from this player.](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L446) (4 connections)
- [Display a tabular report of all edited media from this player.](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L490) (4 connections)
- [Display player fullscreen view (no authentication required for players).](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L523) (4 connections)
- [Get playlist for a player based on their assigned playlist. Args:](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L546) (4 connections)
- [Add a new player with optional SSH deployment.](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L57) (4 connections)
- [Legacy endpoint - Content reordering now handled in playlist management.](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L591) (4 connections)
- [Delete multiple players at once.](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L601) (4 connections)
- [Assign multiple players to a playlist.](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L633) (4 connections)
- [Return deployment status for all players (used by polling JS).](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L670) (4 connections)
- [Reorder items in player's playlist.](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L694) (4 connections)
- [Remove content from player's playlist.](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L747) (4 connections)
- [detect_server_ip()](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py#L208) (4 connections)
- [bulk_assign_playlist()](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L632) (3 connections)
- *... and 26 more nodes in this community*
## Class Diagram
```mermaid
classDiagram
class HTTPSConfig {
+https_config.py()
+.__repr__()
+.to_dict()
}
```
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/blueprints/players.py](file:///home/scheianu/digiserver-v2/app/blueprints/players.py)
- [/home/scheianu/digiserver-v2/app/models/https_config.py](file:///home/scheianu/digiserver-v2/app/models/https_config.py)
- [/home/scheianu/digiserver-v2/app/models/player.py](file:///home/scheianu/digiserver-v2/app/models/player.py)
- [/home/scheianu/digiserver-v2/app/utils/caddy_manager.py](file:///home/scheianu/digiserver-v2/app/utils/caddy_manager.py)
- [/home/scheianu/digiserver-v2/app/utils/ssh_deploy.py](file:///home/scheianu/digiserver-v2/app/utils/ssh_deploy.py)
- [/home/scheianu/digiserver-v2/migrations/add_https_config_table.py](file:///home/scheianu/digiserver-v2/migrations/add_https_config_table.py)
## Audit Trail
- EXTRACTED: 87 (45%)
- INFERRED: 107 (55%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+78
View File
@@ -0,0 +1,78 @@
# Community 7
> 42 nodes · cohesion 0.06
## Key Concepts
- [NginxConfigReader](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py#L7) (13 connections)
- [Group](file:///home/scheianu/digiserver-v2/app/models/group.py#L15) (11 connections)
- [.get_status()](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py#L24) (11 connections)
- [list()](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L19) (9 connections)
- [delete_media()](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L71) (4 connections)
- [get_nginx_status()](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py#L117) (4 connections)
- [._extract_client_max_body_size()](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py#L102) (4 connections)
- [._extract_http_ports()](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py#L53) (4 connections)
- [._extract_https_ports()](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py#L61) (4 connections)
- [._extract_ssl_protocols()](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py#L92) (4 connections)
- [._extract_upstream_servers()](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py#L69) (4 connections)
- [Display list of all players.](file:///home/scheianu/digiserver-v2/app/blueprints/players.py#L20) (4 connections)
- [create_group()](file:///home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py#L38) (3 connections)
- [group.py](file:///home/scheianu/digiserver-v2/app/models/group.py#L1) (3 connections)
- [nginx_config_reader.py](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py#L1) (3 connections)
- [._check_gzip_enabled()](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py#L110) (3 connections)
- [._check_ssl_enabled()](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py#L47) (3 connections)
- [._extract_server_names()](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py#L80) (3 connections)
- [Delete a media file and remove it from all playlists.](file:///home/scheianu/digiserver-v2/app/blueprints/content.py#L72) (2 connections)
- [.add_player()](file:///home/scheianu/digiserver-v2/app/models/group.py#L49) (2 connections)
- [.remove_player()](file:///home/scheianu/digiserver-v2/app/models/group.py#L58) (2 connections)
- [.__repr__()](file:///home/scheianu/digiserver-v2/app/models/group.py#L38) (2 connections)
- [.__init__()](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py#L10) (2 connections)
- [content_count()](file:///home/scheianu/digiserver-v2/app/models/group.py#L45) (1 connections)
- [Group model for organizing players and content.](file:///home/scheianu/digiserver-v2/app/models/group.py#L1) (1 connections)
- *... and 17 more nodes in this community*
## Class Diagram
```mermaid
classDiagram
class Group {
+group.py()
+.__repr__()
+.add_player()
+.remove_player()
}
class NginxConfigReader {
+nginx_config_reader.py()
+.__init__()
+.get_status()
+._check_ssl_enabled()
+._extract_http_ports()
+._extract_https_ports()
+._extract_upstream_servers()
+._extract_server_names()
+._extract_ssl_protocols()
+._extract_client_max_body_size()
}
```
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/blueprints/content.py](file:///home/scheianu/digiserver-v2/app/blueprints/content.py)
- [/home/scheianu/digiserver-v2/app/blueprints/players.py](file:///home/scheianu/digiserver-v2/app/blueprints/players.py)
- [/home/scheianu/digiserver-v2/app/models/group.py](file:///home/scheianu/digiserver-v2/app/models/group.py)
- [/home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py](file:///home/scheianu/digiserver-v2/app/utils/nginx_config_reader.py)
- [/home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py](file:///home/scheianu/digiserver-v2/old_code_documentation/blueprint_groups.py)
## Audit Trail
- EXTRACTED: 97 (79%)
- INFERRED: 26 (21%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+57
View File
@@ -0,0 +1,57 @@
# Community 8
> 24 nodes · cohesion 0.23
## Key Concepts
- [test_edit_media_api.py](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L1) (14 connections)
- [main()](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L309) (13 connections)
- [print_section()](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L25) (10 connections)
- [print_error()](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L34) (9 connections)
- [get_player_auth_code()](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L97) (8 connections)
- [get_sample_content()](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L137) (8 connections)
- [print_success()](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L31) (8 connections)
- [test_endpoint_exists()](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L65) (8 connections)
- [check_database_integrity()](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L271) (7 connections)
- [test_authentication()](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L171) (7 connections)
- [test_full_upload()](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L202) (7 connections)
- [print_info()](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L37) (6 connections)
- [print_warning()](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L40) (6 connections)
- [test_server_health()](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L43) (6 connections)
- [Colors](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L14) (1 connections)
- [Get a sample content file to use for testing](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L138) (1 connections)
- [Test if authentication works](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L172) (1 connections)
- [Test a full media upload](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L203) (1 connections)
- [Print a section header](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L26) (1 connections)
- [Check database tables and records](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L272) (1 connections)
- [Run all diagnostic tests](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L310) (1 connections)
- [Test if server is accessible](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L44) (1 connections)
- [Test if the endpoint is available](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L66) (1 connections)
- [Get a valid player auth code from the database](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py#L98) (1 connections)
## Class Diagram
```mermaid
classDiagram
class Colors {
+test_edit_media_api.py()
}
```
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py](file:///home/scheianu/digiserver-v2/old_code_documentation/test_edit_media_api.py)
## Audit Trail
- EXTRACTED: 126 (99%)
- INFERRED: 1 (1%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+46
View File
@@ -0,0 +1,46 @@
# Community 9
> 21 nodes · cohesion 0.11
## Key Concepts
- [uploads.py](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L1) (9 connections)
- [upload_content()](file:///home/scheianu/digiserver-v2/app/blueprints/content_old.py#L86) (5 connections)
- [process_video_file()](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L94) (5 connections)
- [set_upload_progress()](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L33) (5 connections)
- [process_pdf_file()](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L176) (4 connections)
- [upload_progress_status()](file:///home/scheianu/digiserver-v2/app/blueprints/content_old.py#L374) (3 connections)
- [delete_file()](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L224) (3 connections)
- [get_upload_progress()](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L17) (3 connections)
- [save_uploaded_file()](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L60) (3 connections)
- [clear_upload_progress()](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L50) (2 connections)
- [get_file_size()](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L209) (2 connections)
- [Get upload progress for a specific upload.](file:///home/scheianu/digiserver-v2/app/blueprints/content_old.py#L375) (1 connections)
- [Upload utilities for handling file uploads and processing.](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L1) (1 connections)
- [Process PDF file (convert to images for display). Args: filepat](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L177) (1 connections)
- [Get upload progress for a specific upload ID. Args: upload_id:](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L18) (1 connections)
- [Get file size in bytes. Args: filepath: Path to file](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L210) (1 connections)
- [Delete a file from disk. Args: filepath: Path to file](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L225) (1 connections)
- [Set upload progress for a specific upload ID. Args: upload_id:](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L35) (1 connections)
- [Clear upload progress for a specific upload ID. Args: upload_id](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L51) (1 connections)
- [Save an uploaded file to the upload folder. Args: file: FileSto](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L62) (1 connections)
- [Process video file for optimization (H.264, 30fps, max 1080p). Args:](file:///home/scheianu/digiserver-v2/app/utils/uploads.py#L95) (1 connections)
## Relationships
- No strong cross-community connections detected
## Source Files
- [/home/scheianu/digiserver-v2/app/blueprints/content_old.py](file:///home/scheianu/digiserver-v2/app/blueprints/content_old.py)
- [/home/scheianu/digiserver-v2/app/utils/uploads.py](file:///home/scheianu/digiserver-v2/app/utils/uploads.py)
## Audit Trail
- EXTRACTED: 42 (78%)
- INFERRED: 12 (22%)
- AMBIGUOUS: 0 (0%)
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+215
View File
@@ -0,0 +1,215 @@
# Content
> God node · 24 connections · [/home/scheianu/digiserver-v2/app/models/content.py](file:///home/scheianu/digiserver-v2/app/models/content.py#L8)
## Call Trace Diagram
```mermaid
sequenceDiagram
participant P0 as Content
participant P1 as Playlist
participant P2 as Models package for digiserver-v2.
participant P3 as PlayerEdit
participant P4 as PlayerUser
participant P5 as HTTPSConfig
participant P6 as User
participant P7 as Player
participant P8 as ServerLog
participant P9 as Group
participant P10 as PlayerFeedback
participant P11 as API blueprint for REST endpoints and player communication.
participant P12 as Rate limiting decorator. Args: max_requests: Maximum number of
participant P13 as Decorator to verify player authentication via auth code.
participant P14 as API health check endpoint.
participant P15 as Get server SSL certificate.
participant P16 as Authenticate a player and return auth code and configuration. Request J
participant P17 as Verify an auth code and return player information. Request JSON:
participant P18 as Get playlist using hostname and quickconnect code (Kivy player compatible).
participant P19 as Get playlist for a specific player. Requires player authentication via
participant P20 as Get current playlist version for a player. Lightweight endpoint for pla
participant P21 as Get cached playlist for a player based on assigned playlist.
participant P22 as Receive feedback/status updates from players (Kivy player compatible).
participant P23 as Get current status of a player (public endpoint for monitoring).
participant P24 as Get progress of a file upload.
participant P25 as Get system information and statistics.
participant P26 as List all content with basic information.
participant P27 as Get recent server logs. Query parameters: limit: Number of logs
participant P28 as Receive edited media from player. Expected multipart/form-data: - i
participant P29 as Test SSH connection to a remote host. Request JSON: hostname: T
participant P30 as Deploy player code to a remote host via SSH. Request JSON: host
participant P31 as Handle 404 errors in API.
participant P32 as Handle 405 errors in API.
participant P33 as Handle 500 errors in API.
participant P34 as Main Blueprint - Dashboard and Home Routes
participant P35 as Health check endpoint
participant P36 as create_playlist()
participant P37 as upload_media()
participant P38 as process_file_in_background()
participant P39 as upload_content()
participant P40 as add_weblink()
participant P41 as add_weblink_to_playlist()
participant P42 as Playlist model for managing content collections.
participant P43 as Playlist model representing a collection of content. Attributes:
participant P44 as String representation of Playlist.
participant P45 as Increment playlist version for sync detection.
participant P46 as Get content items ordered by position.
participant P47 as Get number of players assigned to this playlist.
participant P48 as Get number of content items in this playlist.
participant P49 as Calculate total duration of all content in seconds.
P0->>+ P1: uses
P1-->>- P0: return
P1->>+ P0: uses
P0-->>- P1: return
P1->>+ P2: uses
P2-->>- P1: return
P2->>+ P3: uses
P3-->>- P2: return
P2->>+ P4: uses
P4-->>- P2: return
P2->>+ P1: uses
P1-->>- P2: return
P2->>+ P5: uses
P5-->>- P2: return
P2->>+ P0: uses
P0-->>- P2: return
P2->>+ P6: uses
P6-->>- P2: return
P2->>+ P7: uses
P7-->>- P2: return
P2->>+ P8: uses
P8-->>- P2: return
P2->>+ P9: uses
P9-->>- P2: return
P2->>+ P10: uses
P10-->>- P2: return
P1->>+ P11: uses
P11-->>- P1: return
P11->>+ P3: uses
P3-->>- P11: return
P11->>+ P4: uses
P4-->>- P11: return
P11->>+ P1: uses
P1-->>- P11: return
P1->>+ P12: uses
P12-->>- P1: return
P1->>+ P13: uses
P13-->>- P1: return
P1->>+ P14: uses
P14-->>- P1: return
P1->>+ P15: uses
P15-->>- P1: return
P1->>+ P16: uses
P16-->>- P1: return
P1->>+ P17: uses
P17-->>- P1: return
P1->>+ P18: uses
P18-->>- P1: return
P1->>+ P19: uses
P19-->>- P1: return
P1->>+ P20: uses
P20-->>- P1: return
P1->>+ P21: uses
P21-->>- P1: return
P1->>+ P22: uses
P22-->>- P1: return
P1->>+ P23: uses
P23-->>- P1: return
P1->>+ P24: uses
P24-->>- P1: return
P1->>+ P25: uses
P25-->>- P1: return
P1->>+ P26: uses
P26-->>- P1: return
P1->>+ P27: uses
P27-->>- P1: return
P1->>+ P28: uses
P28-->>- P1: return
P1->>+ P29: uses
P29-->>- P1: return
P1->>+ P30: uses
P30-->>- P1: return
P1->>+ P31: uses
P31-->>- P1: return
P1->>+ P32: uses
P32-->>- P1: return
P1->>+ P33: uses
P33-->>- P1: return
P1->>+ P34: uses
P34-->>- P1: return
P1->>+ P35: uses
P35-->>- P1: return
P1->>+ P36: calls
P36-->>- P1: return
P0->>+ P2: uses
P2-->>- P0: return
P0->>+ P37: calls
P37-->>- P0: return
P0->>+ P38: calls
P38-->>- P0: return
P0->>+ P39: calls
P39-->>- P0: return
P0->>+ P40: calls
P40-->>- P0: return
P0->>+ P41: calls
P41-->>- P0: return
P0->>+ P34: uses
P34-->>- P0: return
P0->>+ P35: uses
P35-->>- P0: return
P0->>+ P42: uses
P42-->>- P0: return
P0->>+ P43: uses
P43-->>- P0: return
P0->>+ P44: uses
P44-->>- P0: return
P0->>+ P45: uses
P45-->>- P0: return
P0->>+ P46: uses
P46-->>- P0: return
P0->>+ P47: uses
P47-->>- P0: return
P0->>+ P48: uses
P48-->>- P0: return
P0->>+ P49: uses
P49-->>- P0: return
```
## Connections by Relation
### calls
- [[upload_media()]] `INFERRED`
- [[process_file_in_background()]] `INFERRED`
- [[upload_content()]] `INFERRED`
- [[add_weblink()]] `INFERRED`
- [[add_weblink_to_playlist()]] `INFERRED`
### contains
- [[content.py]] `EXTRACTED`
### method
- [[.__repr__()]] `EXTRACTED`
- [[.is_image()]] `EXTRACTED`
- [[.is_video()]] `EXTRACTED`
- [[.is_pdf()]] `EXTRACTED`
- [[.is_weblink()]] `EXTRACTED`
### rationale_for
- [[Content model representing media files for display. Attributes:]] `EXTRACTED`
### uses
- [[Playlist]] `INFERRED`
- [[Models package for digiserver-v2.]] `INFERRED`
- [[Main Blueprint - Dashboard and Home Routes]] `INFERRED`
- [[Health check endpoint]] `INFERRED`
- [[Playlist model for managing content collections.]] `INFERRED`
- [[Playlist model representing a collection of content. Attributes:]] `INFERRED`
- [[String representation of Playlist.]] `INFERRED`
- [[Increment playlist version for sync detection.]] `INFERRED`
- [[Get content items ordered by position.]] `INFERRED`
- [[Get number of players assigned to this playlist.]] `INFERRED`
- [[Get number of content items in this playlist.]] `INFERRED`
- [[Calculate total duration of all content in seconds.]] `INFERRED`
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+232
View File
@@ -0,0 +1,232 @@
# HTTPSConfig
> God node · 30 connections · [/home/scheianu/digiserver-v2/app/models/https_config.py](file:///home/scheianu/digiserver-v2/app/models/https_config.py#L8)
## Call Trace Diagram
```mermaid
sequenceDiagram
participant P0 as HTTPSConfig
participant P1 as CaddyConfigGenerator
participant P2 as Admin blueprint for user management and system settings.
participant P3 as PlayerEdit
participant P4 as PlayerUser
participant P5 as Decorator to require admin role for route access.
participant P6 as Display admin panel with system overview.
participant P7 as Create a new user account.
participant P8 as Change user role between user and admin.
participant P9 as Delete a user account.
participant P10 as Change application theme.
participant P11 as Upload custom logo for application.
participant P12 as Clear all server logs.
participant P13 as Display user management page.
participant P14 as Get system information as JSON.
participant P15 as Display leftover media files not assigned to any playlist.
participant P16 as Delete all leftover images that are not part of any playlist
participant P17 as Delete all leftover videos that are not part of any playlist
participant P18 as Delete a single leftover content file
participant P19 as Show system dependencies status.
participant P20 as Install LibreOffice for PPTX conversion.
participant P21 as Install Emoji Fonts for better UI display.
participant P22 as Logo customization page.
participant P23 as Upload login page logo.
participant P24 as Display and manage users that edit images on players.
participant P25 as Update editing user name.
participant P26 as Display HTTPS configuration management page.
participant P27 as Update HTTPS configuration.
participant P28 as Get current HTTPS configuration status as JSON.
participant P29 as Path to the persisted player-build settings (in the instance folder).
participant P30 as Display the 'Build player files for deployment' admin page.
participant P31 as Build/refresh the staged player code and/or write its base config.
participant P32 as Models package for digiserver-v2.
participant P33 as Players blueprint for player management and display.
participant P34 as Display list of all players.
participant P35 as Add a new player with optional SSH deployment.
participant P36 as Regenerate authentication code for a player.
participant P37 as Redirect to manage player page (combined view).
participant P38 as Manage player - edit credentials, assign playlist, view logs.
participant P39 as Display all edited media files from this player.
participant P40 as Display a tabular report of all edited media from this player.
participant P41 as Display player fullscreen view (no authentication required for players).
participant P42 as Get playlist for a player based on their assigned playlist. Args:
participant P43 as Legacy endpoint - Content reordering now handled in playlist management.
participant P44 as Delete multiple players at once.
participant P45 as Assign multiple players to a playlist.
participant P46 as Return deployment status for all players (used by polling JS).
participant P47 as Reorder items in player's playlist.
participant P48 as Remove content from player's playlist.
participant P49 as Add https_config table for HTTPS configuration management.
participant P50 as Caddy configuration generator and manager.
participant P51 as Generate Caddyfile configuration based on HTTPSConfig.
participant P52 as Generate a complete Caddyfile. Behaviour: - HTTPS disabled / no
participant P53 as Write Caddyfile to disk. The default path is /etc/caddy/Caddyfile — the
participant P54 as Push the current Caddyfile to Caddy via its admin API (/load). Caddy ap
participant P55 as Write Caddyfile to disk. Args: caddyfile_content: C
participant P56 as Reload Caddy configuration without restart. Note: Caddy monitor
P0->>+ P1: uses
P1-->>- P0: return
P1->>+ P0: uses
P0-->>- P1: return
P1->>+ P2: uses
P2-->>- P1: return
P2->>+ P3: uses
P3-->>- P2: return
P2->>+ P4: uses
P4-->>- P2: return
P2->>+ P1: uses
P1-->>- P2: return
P1->>+ P5: uses
P5-->>- P1: return
P5->>+ P3: uses
P3-->>- P5: return
P5->>+ P4: uses
P4-->>- P5: return
P5->>+ P1: uses
P1-->>- P5: return
P1->>+ P6: uses
P6-->>- P1: return
P6->>+ P3: uses
P3-->>- P6: return
P6->>+ P4: uses
P4-->>- P6: return
P6->>+ P1: uses
P1-->>- P6: return
P1->>+ P7: uses
P7-->>- P1: return
P1->>+ P8: uses
P8-->>- P1: return
P1->>+ P9: uses
P9-->>- P1: return
P1->>+ P10: uses
P10-->>- P1: return
P1->>+ P11: uses
P11-->>- P1: return
P1->>+ P12: uses
P12-->>- P1: return
P1->>+ P13: uses
P13-->>- P1: return
P1->>+ P14: uses
P14-->>- P1: return
P1->>+ P15: uses
P15-->>- P1: return
P1->>+ P16: uses
P16-->>- P1: return
P1->>+ P17: uses
P17-->>- P1: return
P1->>+ P18: uses
P18-->>- P1: return
P1->>+ P19: uses
P19-->>- P1: return
P1->>+ P20: uses
P20-->>- P1: return
P1->>+ P21: uses
P21-->>- P1: return
P1->>+ P22: uses
P22-->>- P1: return
P1->>+ P23: uses
P23-->>- P1: return
P1->>+ P24: uses
P24-->>- P1: return
P1->>+ P25: uses
P25-->>- P1: return
P1->>+ P26: uses
P26-->>- P1: return
P1->>+ P27: uses
P27-->>- P1: return
P1->>+ P28: uses
P28-->>- P1: return
P1->>+ P29: uses
P29-->>- P1: return
P1->>+ P30: uses
P30-->>- P1: return
P1->>+ P31: uses
P31-->>- P1: return
P0->>+ P32: uses
P32-->>- P0: return
P0->>+ P33: uses
P33-->>- P0: return
P0->>+ P34: uses
P34-->>- P0: return
P0->>+ P35: uses
P35-->>- P0: return
P0->>+ P36: uses
P36-->>- P0: return
P0->>+ P37: uses
P37-->>- P0: return
P0->>+ P38: uses
P38-->>- P0: return
P0->>+ P39: uses
P39-->>- P0: return
P0->>+ P40: uses
P40-->>- P0: return
P0->>+ P41: uses
P41-->>- P0: return
P0->>+ P42: uses
P42-->>- P0: return
P0->>+ P43: uses
P43-->>- P0: return
P0->>+ P44: uses
P44-->>- P0: return
P0->>+ P45: uses
P45-->>- P0: return
P0->>+ P46: uses
P46-->>- P0: return
P0->>+ P47: uses
P47-->>- P0: return
P0->>+ P48: uses
P48-->>- P0: return
P0->>+ P49: uses
P49-->>- P0: return
P0->>+ P50: uses
P50-->>- P0: return
P0->>+ P51: uses
P51-->>- P0: return
P0->>+ P52: uses
P52-->>- P0: return
P0->>+ P53: uses
P53-->>- P0: return
P0->>+ P54: uses
P54-->>- P0: return
P0->>+ P55: uses
P55-->>- P0: return
P0->>+ P56: uses
P56-->>- P0: return
```
## Connections by Relation
### contains
- [[https_config.py]] `EXTRACTED`
### method
- [[.__repr__()]] `EXTRACTED`
- [[.to_dict()]] `EXTRACTED`
### rationale_for
- [[HTTPS configuration model for managing secure connections. Attributes:]] `EXTRACTED`
### uses
- [[CaddyConfigGenerator]] `INFERRED`
- [[Models package for digiserver-v2.]] `INFERRED`
- [[Players blueprint for player management and display.]] `INFERRED`
- [[Display list of all players.]] `INFERRED`
- [[Add a new player with optional SSH deployment.]] `INFERRED`
- [[Regenerate authentication code for a player.]] `INFERRED`
- [[Redirect to manage player page (combined view).]] `INFERRED`
- [[Manage player - edit credentials, assign playlist, view logs.]] `INFERRED`
- [[Display all edited media files from this player.]] `INFERRED`
- [[Display a tabular report of all edited media from this player.]] `INFERRED`
- [[Display player fullscreen view (no authentication required for players).]] `INFERRED`
- [[Get playlist for a player based on their assigned playlist. Args:]] `INFERRED`
- [[Legacy endpoint - Content reordering now handled in playlist management.]] `INFERRED`
- [[Delete multiple players at once.]] `INFERRED`
- [[Assign multiple players to a playlist.]] `INFERRED`
- [[Return deployment status for all players (used by polling JS).]] `INFERRED`
- [[Reorder items in player's playlist.]] `INFERRED`
- [[Remove content from player's playlist.]] `INFERRED`
- [[Add https_config table for HTTPS configuration management.]] `INFERRED`
- [[Caddy configuration generator and manager.]] `INFERRED`
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
@@ -0,0 +1,369 @@
# Models package for digiserver-v2.
> God node · 13 connections · [/home/scheianu/digiserver-v2/app/models/__init__.py](file:///home/scheianu/digiserver-v2/app/models/__init__.py#L1)
## Call Trace Diagram
```mermaid
sequenceDiagram
participant P0 as Models package for digiserver-v2.
participant P1 as PlayerEdit
participant P2 as receive_edited_media()
participant P3 as log_action()
participant P4 as PlayerUser
participant P5 as Group
participant P6 as Admin blueprint for user management and system settings.
participant P7 as CaddyConfigGenerator
participant P8 as Decorator to require admin role for route access.
participant P9 as Display admin panel with system overview.
participant P10 as Create a new user account.
participant P11 as Change user role between user and admin.
participant P12 as Delete a user account.
participant P13 as Change application theme.
participant P14 as Upload custom logo for application.
participant P15 as Clear all server logs.
participant P16 as Display user management page.
participant P17 as Get system information as JSON.
participant P18 as Display leftover media files not assigned to any playlist.
participant P19 as Delete all leftover images that are not part of any playlist
participant P20 as Delete all leftover videos that are not part of any playlist
participant P21 as Delete a single leftover content file
participant P22 as Show system dependencies status.
participant P23 as Install LibreOffice for PPTX conversion.
participant P24 as Install Emoji Fonts for better UI display.
participant P25 as Logo customization page.
participant P26 as Upload login page logo.
participant P27 as Display and manage users that edit images on players.
participant P28 as Update editing user name.
participant P29 as Display HTTPS configuration management page.
participant P30 as Update HTTPS configuration.
participant P31 as Get current HTTPS configuration status as JSON.
participant P32 as Path to the persisted player-build settings (in the instance folder).
participant P33 as Display the 'Build player files for deployment' admin page.
participant P34 as Build/refresh the staged player code and/or write its base config.
participant P35 as API blueprint for REST endpoints and player communication.
participant P36 as Rate limiting decorator. Args: max_requests: Maximum number of
participant P37 as Decorator to verify player authentication via auth code.
participant P38 as API health check endpoint.
participant P39 as Get server SSL certificate.
participant P40 as Authenticate a player and return auth code and configuration. Request J
participant P41 as Verify an auth code and return player information. Request JSON:
participant P42 as Get playlist using hostname and quickconnect code (Kivy player compatible).
participant P43 as Get playlist for a specific player. Requires player authentication via
participant P44 as Get current playlist version for a player. Lightweight endpoint for pla
participant P45 as Get cached playlist for a player based on assigned playlist.
participant P46 as Receive feedback/status updates from players (Kivy player compatible).
participant P47 as Get current status of a player (public endpoint for monitoring).
participant P48 as Get progress of a file upload.
participant P49 as Get system information and statistics.
participant P50 as List all content with basic information.
participant P51 as Get recent server logs. Query parameters: limit: Number of logs
participant P52 as Receive edited media from player. Expected multipart/form-data: - i
participant P53 as Test SSH connection to a remote host. Request JSON: hostname: T
participant P54 as Deploy player code to a remote host via SSH. Request JSON: host
participant P55 as Handle 404 errors in API.
participant P56 as Handle 405 errors in API.
participant P57 as Handle 500 errors in API.
participant P58 as Players blueprint for player management and display.
participant P59 as Display list of all players.
participant P60 as Add a new player with optional SSH deployment.
participant P61 as Regenerate authentication code for a player.
participant P62 as Redirect to manage player page (combined view).
participant P63 as Manage player - edit credentials, assign playlist, view logs.
participant P64 as Display all edited media files from this player.
participant P65 as Display a tabular report of all edited media from this player.
participant P66 as Display player fullscreen view (no authentication required for players).
participant P67 as Get playlist for a player based on their assigned playlist. Args:
participant P68 as Legacy endpoint - Content reordering now handled in playlist management.
participant P69 as Delete multiple players at once.
participant P70 as Assign multiple players to a playlist.
participant P71 as Return deployment status for all players (used by polling JS).
participant P72 as Reorder items in player's playlist.
participant P73 as Remove content from player's playlist.
participant P74 as Content model for media files.
participant P75 as Main playlist management page.
participant P76 as View all media files in the library.
participant P77 as Delete a media file and remove it from all playlists.
participant P78 as Create a new playlist.
participant P79 as Manage content in a specific playlist.
participant P80 as Add content to playlist.
participant P81 as Create a web link content item from the Upload Media page. Optionally adds
participant P82 as Create a web link content item and add it to the playlist.
participant P83 as Remove content from playlist.
participant P84 as Remove multiple content items from playlist.
participant P85 as Reorder content in playlist.
participant P86 as Update content muted setting in playlist.
participant P87 as Update content edit_on_player_enabled setting in playlist.
participant P88 as Update content duration in playlist.
participant P89 as Display upload media page.
participant P90 as Process and optimize image files.
participant P91 as Process and optimize video files for Raspberry Pi playback.
participant P92 as Process PDF files by converting each page to PNG images.
participant P93 as Process large files (PDF, PPTX, Video) in background thread.
participant P94 as Process PowerPoint presentation files by converting slides to images.
participant P95 as Create a Full HD (1920x1080) image from PIL Image object, centered on white back
participant P96 as Resize image to exactly Full HD (1920x1080) maintaining aspect ratio with center
participant P97 as Optimize and resize image file to Full HD (1920x1080) maintaining aspect ratio.
participant P98 as Upload media files to library with type-specific processing.
participant P99 as Assign a player to a playlist.
participant P100 as Playlist
participant P101 as HTTPSConfig
participant P102 as Content
participant P103 as User
participant P104 as Player
participant P105 as ServerLog
participant P106 as PlayerFeedback
P0->>+ P1: uses
P1-->>- P0: return
P1->>+ P0: uses
P0-->>- P1: return
P1->>+ P2: calls
P2-->>- P1: return
P2->>+ P3: calls
P3-->>- P2: return
P2->>+ P1: calls
P1-->>- P2: return
P2->>+ P4: calls
P4-->>- P2: return
P2->>+ P5: calls
P5-->>- P2: return
P1->>+ P6: uses
P6-->>- P1: return
P6->>+ P1: uses
P1-->>- P6: return
P6->>+ P4: uses
P4-->>- P6: return
P6->>+ P7: uses
P7-->>- P6: return
P1->>+ P8: uses
P8-->>- P1: return
P8->>+ P1: uses
P1-->>- P8: return
P8->>+ P4: uses
P4-->>- P8: return
P8->>+ P7: uses
P7-->>- P8: return
P1->>+ P9: uses
P9-->>- P1: return
P1->>+ P10: uses
P10-->>- P1: return
P1->>+ P11: uses
P11-->>- P1: return
P1->>+ P12: uses
P12-->>- P1: return
P1->>+ P13: uses
P13-->>- P1: return
P1->>+ P14: uses
P14-->>- P1: return
P1->>+ P15: uses
P15-->>- P1: return
P1->>+ P16: uses
P16-->>- P1: return
P1->>+ P17: uses
P17-->>- P1: return
P1->>+ P18: uses
P18-->>- P1: return
P1->>+ P19: uses
P19-->>- P1: return
P1->>+ P20: uses
P20-->>- P1: return
P1->>+ P21: uses
P21-->>- P1: return
P1->>+ P22: uses
P22-->>- P1: return
P1->>+ P23: uses
P23-->>- P1: return
P1->>+ P24: uses
P24-->>- P1: return
P1->>+ P25: uses
P25-->>- P1: return
P1->>+ P26: uses
P26-->>- P1: return
P1->>+ P27: uses
P27-->>- P1: return
P1->>+ P28: uses
P28-->>- P1: return
P1->>+ P29: uses
P29-->>- P1: return
P1->>+ P30: uses
P30-->>- P1: return
P1->>+ P31: uses
P31-->>- P1: return
P1->>+ P32: uses
P32-->>- P1: return
P1->>+ P33: uses
P33-->>- P1: return
P1->>+ P34: uses
P34-->>- P1: return
P1->>+ P35: uses
P35-->>- P1: return
P1->>+ P36: uses
P36-->>- P1: return
P1->>+ P37: uses
P37-->>- P1: return
P1->>+ P38: uses
P38-->>- P1: return
P1->>+ P39: uses
P39-->>- P1: return
P1->>+ P40: uses
P40-->>- P1: return
P1->>+ P41: uses
P41-->>- P1: return
P1->>+ P42: uses
P42-->>- P1: return
P1->>+ P43: uses
P43-->>- P1: return
P1->>+ P44: uses
P44-->>- P1: return
P1->>+ P45: uses
P45-->>- P1: return
P1->>+ P46: uses
P46-->>- P1: return
P1->>+ P47: uses
P47-->>- P1: return
P1->>+ P48: uses
P48-->>- P1: return
P1->>+ P49: uses
P49-->>- P1: return
P1->>+ P50: uses
P50-->>- P1: return
P1->>+ P51: uses
P51-->>- P1: return
P1->>+ P52: uses
P52-->>- P1: return
P1->>+ P53: uses
P53-->>- P1: return
P1->>+ P54: uses
P54-->>- P1: return
P1->>+ P55: uses
P55-->>- P1: return
P1->>+ P56: uses
P56-->>- P1: return
P1->>+ P57: uses
P57-->>- P1: return
P1->>+ P58: uses
P58-->>- P1: return
P1->>+ P59: uses
P59-->>- P1: return
P1->>+ P60: uses
P60-->>- P1: return
P1->>+ P61: uses
P61-->>- P1: return
P1->>+ P62: uses
P62-->>- P1: return
P1->>+ P63: uses
P63-->>- P1: return
P1->>+ P64: uses
P64-->>- P1: return
P1->>+ P65: uses
P65-->>- P1: return
P1->>+ P66: uses
P66-->>- P1: return
P1->>+ P67: uses
P67-->>- P1: return
P1->>+ P68: uses
P68-->>- P1: return
P1->>+ P69: uses
P69-->>- P1: return
P1->>+ P70: uses
P70-->>- P1: return
P1->>+ P71: uses
P71-->>- P1: return
P1->>+ P72: uses
P72-->>- P1: return
P1->>+ P73: uses
P73-->>- P1: return
P1->>+ P74: uses
P74-->>- P1: return
P1->>+ P75: uses
P75-->>- P1: return
P1->>+ P76: uses
P76-->>- P1: return
P1->>+ P77: uses
P77-->>- P1: return
P1->>+ P78: uses
P78-->>- P1: return
P1->>+ P79: uses
P79-->>- P1: return
P1->>+ P80: uses
P80-->>- P1: return
P1->>+ P81: uses
P81-->>- P1: return
P1->>+ P82: uses
P82-->>- P1: return
P1->>+ P83: uses
P83-->>- P1: return
P1->>+ P84: uses
P84-->>- P1: return
P1->>+ P85: uses
P85-->>- P1: return
P1->>+ P86: uses
P86-->>- P1: return
P1->>+ P87: uses
P87-->>- P1: return
P1->>+ P88: uses
P88-->>- P1: return
P1->>+ P89: uses
P89-->>- P1: return
P1->>+ P90: uses
P90-->>- P1: return
P1->>+ P91: uses
P91-->>- P1: return
P1->>+ P92: uses
P92-->>- P1: return
P1->>+ P93: uses
P93-->>- P1: return
P1->>+ P94: uses
P94-->>- P1: return
P1->>+ P95: uses
P95-->>- P1: return
P1->>+ P96: uses
P96-->>- P1: return
P1->>+ P97: uses
P97-->>- P1: return
P1->>+ P98: uses
P98-->>- P1: return
P1->>+ P99: uses
P99-->>- P1: return
P0->>+ P4: uses
P4-->>- P0: return
P0->>+ P100: uses
P100-->>- P0: return
P0->>+ P101: uses
P101-->>- P0: return
P0->>+ P102: uses
P102-->>- P0: return
P0->>+ P103: uses
P103-->>- P0: return
P0->>+ P104: uses
P104-->>- P0: return
P0->>+ P105: uses
P105-->>- P0: return
P0->>+ P5: uses
P5-->>- P0: return
P0->>+ P106: uses
P106-->>- P0: return
```
## Connections by Relation
### rationale_for
- [[__init__.py]] `EXTRACTED`
- [[__init__.py]] `EXTRACTED`
- [[__init__.py]] `EXTRACTED`
### uses
- [[PlayerEdit]] `INFERRED`
- [[PlayerUser]] `INFERRED`
- [[Playlist]] `INFERRED`
- [[HTTPSConfig]] `INFERRED`
- [[Content]] `INFERRED`
- [[User]] `INFERRED`
- [[Player]] `INFERRED`
- [[ServerLog]] `INFERRED`
- [[Group]] `INFERRED`
- [[PlayerFeedback]] `INFERRED`
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+506
View File
@@ -0,0 +1,506 @@
# PlayerEdit
> God node · 99 connections · [/home/scheianu/digiserver-v2/app/models/player_edit.py](file:///home/scheianu/digiserver-v2/app/models/player_edit.py#L8)
## Call Trace Diagram
```mermaid
sequenceDiagram
participant P0 as PlayerEdit
participant P1 as Models package for digiserver-v2.
participant P2 as PlayerUser
participant P3 as receive_edited_media()
participant P4 as Admin blueprint for user management and system settings.
participant P5 as Decorator to require admin role for route access.
participant P6 as Display admin panel with system overview.
participant P7 as Create a new user account.
participant P8 as Change user role between user and admin.
participant P9 as Delete a user account.
participant P10 as Change application theme.
participant P11 as Upload custom logo for application.
participant P12 as Clear all server logs.
participant P13 as Display user management page.
participant P14 as Get system information as JSON.
participant P15 as Display leftover media files not assigned to any playlist.
participant P16 as Delete all leftover images that are not part of any playlist
participant P17 as Delete all leftover videos that are not part of any playlist
participant P18 as Delete a single leftover content file
participant P19 as Show system dependencies status.
participant P20 as Install LibreOffice for PPTX conversion.
participant P21 as Install Emoji Fonts for better UI display.
participant P22 as Logo customization page.
participant P23 as Upload login page logo.
participant P24 as Display and manage users that edit images on players.
participant P25 as Update editing user name.
participant P26 as Display HTTPS configuration management page.
participant P27 as Update HTTPS configuration.
participant P28 as Get current HTTPS configuration status as JSON.
participant P29 as Path to the persisted player-build settings (in the instance folder).
participant P30 as Display the 'Build player files for deployment' admin page.
participant P31 as Build/refresh the staged player code and/or write its base config.
participant P32 as API blueprint for REST endpoints and player communication.
participant P33 as Rate limiting decorator. Args: max_requests: Maximum number of
participant P34 as Decorator to verify player authentication via auth code.
participant P35 as API health check endpoint.
participant P36 as Get server SSL certificate.
participant P37 as Authenticate a player and return auth code and configuration. Request J
participant P38 as Verify an auth code and return player information. Request JSON:
participant P39 as Get playlist using hostname and quickconnect code (Kivy player compatible).
participant P40 as Get playlist for a specific player. Requires player authentication via
participant P41 as Get current playlist version for a player. Lightweight endpoint for pla
participant P42 as Get cached playlist for a player based on assigned playlist.
participant P43 as Receive feedback/status updates from players (Kivy player compatible).
participant P44 as Get current status of a player (public endpoint for monitoring).
participant P45 as Get progress of a file upload.
participant P46 as Get system information and statistics.
participant P47 as List all content with basic information.
participant P48 as Get recent server logs. Query parameters: limit: Number of logs
participant P49 as Receive edited media from player. Expected multipart/form-data: - i
participant P50 as Test SSH connection to a remote host. Request JSON: hostname: T
participant P51 as Deploy player code to a remote host via SSH. Request JSON: host
participant P52 as Handle 404 errors in API.
participant P53 as Handle 405 errors in API.
participant P54 as Handle 500 errors in API.
participant P55 as Players blueprint for player management and display.
participant P56 as Display list of all players.
participant P57 as Add a new player with optional SSH deployment.
participant P58 as Regenerate authentication code for a player.
participant P59 as Redirect to manage player page (combined view).
participant P60 as Manage player - edit credentials, assign playlist, view logs.
participant P61 as Display all edited media files from this player.
participant P62 as Display a tabular report of all edited media from this player.
participant P63 as Display player fullscreen view (no authentication required for players).
participant P64 as Get playlist for a player based on their assigned playlist. Args:
participant P65 as Legacy endpoint - Content reordering now handled in playlist management.
participant P66 as Delete multiple players at once.
participant P67 as Assign multiple players to a playlist.
participant P68 as Return deployment status for all players (used by polling JS).
participant P69 as Reorder items in player's playlist.
participant P70 as Remove content from player's playlist.
participant P71 as Add player_user table for user code mappings.
participant P72 as Playlist
participant P73 as HTTPSConfig
participant P74 as Content
participant P75 as User
participant P76 as Player
participant P77 as ServerLog
participant P78 as Group
participant P79 as PlayerFeedback
participant P80 as Content model for media files.
participant P81 as Main playlist management page.
participant P82 as View all media files in the library.
participant P83 as Delete a media file and remove it from all playlists.
participant P84 as Create a new playlist.
participant P85 as Manage content in a specific playlist.
participant P86 as Add content to playlist.
participant P87 as Create a web link content item from the Upload Media page. Optionally adds
participant P88 as Create a web link content item and add it to the playlist.
participant P89 as Remove content from playlist.
participant P90 as Remove multiple content items from playlist.
participant P91 as Reorder content in playlist.
participant P92 as Update content muted setting in playlist.
participant P93 as Update content edit_on_player_enabled setting in playlist.
participant P94 as Update content duration in playlist.
participant P95 as Display upload media page.
participant P96 as Process and optimize image files.
participant P97 as Process and optimize video files for Raspberry Pi playback.
participant P98 as Process PDF files by converting each page to PNG images.
participant P99 as Process large files (PDF, PPTX, Video) in background thread.
participant P100 as Process PowerPoint presentation files by converting slides to images.
participant P101 as Create a Full HD (1920x1080) image from PIL Image object, centered on white back
participant P102 as Resize image to exactly Full HD (1920x1080) maintaining aspect ratio with center
participant P103 as Optimize and resize image file to Full HD (1920x1080) maintaining aspect ratio.
participant P104 as Upload media files to library with type-specific processing.
participant P105 as Assign a player to a playlist.
P0->>+ P1: uses
P1-->>- P0: return
P1->>+ P0: uses
P0-->>- P1: return
P1->>+ P2: uses
P2-->>- P1: return
P2->>+ P1: uses
P1-->>- P2: return
P2->>+ P3: calls
P3-->>- P2: return
P2->>+ P4: uses
P4-->>- P2: return
P2->>+ P5: uses
P5-->>- P2: return
P2->>+ P6: uses
P6-->>- P2: return
P2->>+ P7: uses
P7-->>- P2: return
P2->>+ P8: uses
P8-->>- P2: return
P2->>+ P9: uses
P9-->>- P2: return
P2->>+ P10: uses
P10-->>- P2: return
P2->>+ P11: uses
P11-->>- P2: return
P2->>+ P12: uses
P12-->>- P2: return
P2->>+ P13: uses
P13-->>- P2: return
P2->>+ P14: uses
P14-->>- P2: return
P2->>+ P15: uses
P15-->>- P2: return
P2->>+ P16: uses
P16-->>- P2: return
P2->>+ P17: uses
P17-->>- P2: return
P2->>+ P18: uses
P18-->>- P2: return
P2->>+ P19: uses
P19-->>- P2: return
P2->>+ P20: uses
P20-->>- P2: return
P2->>+ P21: uses
P21-->>- P2: return
P2->>+ P22: uses
P22-->>- P2: return
P2->>+ P23: uses
P23-->>- P2: return
P2->>+ P24: uses
P24-->>- P2: return
P2->>+ P25: uses
P25-->>- P2: return
P2->>+ P26: uses
P26-->>- P2: return
P2->>+ P27: uses
P27-->>- P2: return
P2->>+ P28: uses
P28-->>- P2: return
P2->>+ P29: uses
P29-->>- P2: return
P2->>+ P30: uses
P30-->>- P2: return
P2->>+ P31: uses
P31-->>- P2: return
P2->>+ P32: uses
P32-->>- P2: return
P2->>+ P33: uses
P33-->>- P2: return
P2->>+ P34: uses
P34-->>- P2: return
P2->>+ P35: uses
P35-->>- P2: return
P2->>+ P36: uses
P36-->>- P2: return
P2->>+ P37: uses
P37-->>- P2: return
P2->>+ P38: uses
P38-->>- P2: return
P2->>+ P39: uses
P39-->>- P2: return
P2->>+ P40: uses
P40-->>- P2: return
P2->>+ P41: uses
P41-->>- P2: return
P2->>+ P42: uses
P42-->>- P2: return
P2->>+ P43: uses
P43-->>- P2: return
P2->>+ P44: uses
P44-->>- P2: return
P2->>+ P45: uses
P45-->>- P2: return
P2->>+ P46: uses
P46-->>- P2: return
P2->>+ P47: uses
P47-->>- P2: return
P2->>+ P48: uses
P48-->>- P2: return
P2->>+ P49: uses
P49-->>- P2: return
P2->>+ P50: uses
P50-->>- P2: return
P2->>+ P51: uses
P51-->>- P2: return
P2->>+ P52: uses
P52-->>- P2: return
P2->>+ P53: uses
P53-->>- P2: return
P2->>+ P54: uses
P54-->>- P2: return
P2->>+ P55: uses
P55-->>- P2: return
P2->>+ P56: uses
P56-->>- P2: return
P2->>+ P57: uses
P57-->>- P2: return
P2->>+ P58: uses
P58-->>- P2: return
P2->>+ P59: uses
P59-->>- P2: return
P2->>+ P60: uses
P60-->>- P2: return
P2->>+ P61: uses
P61-->>- P2: return
P2->>+ P62: uses
P62-->>- P2: return
P2->>+ P63: uses
P63-->>- P2: return
P2->>+ P64: uses
P64-->>- P2: return
P2->>+ P65: uses
P65-->>- P2: return
P2->>+ P66: uses
P66-->>- P2: return
P2->>+ P67: uses
P67-->>- P2: return
P2->>+ P68: uses
P68-->>- P2: return
P2->>+ P69: uses
P69-->>- P2: return
P2->>+ P70: uses
P70-->>- P2: return
P2->>+ P71: uses
P71-->>- P2: return
P1->>+ P72: uses
P72-->>- P1: return
P1->>+ P73: uses
P73-->>- P1: return
P1->>+ P74: uses
P74-->>- P1: return
P1->>+ P75: uses
P75-->>- P1: return
P1->>+ P76: uses
P76-->>- P1: return
P1->>+ P77: uses
P77-->>- P1: return
P1->>+ P78: uses
P78-->>- P1: return
P1->>+ P79: uses
P79-->>- P1: return
P0->>+ P3: calls
P3-->>- P0: return
P0->>+ P4: uses
P4-->>- P0: return
P0->>+ P5: uses
P5-->>- P0: return
P0->>+ P6: uses
P6-->>- P0: return
P0->>+ P7: uses
P7-->>- P0: return
P0->>+ P8: uses
P8-->>- P0: return
P0->>+ P9: uses
P9-->>- P0: return
P0->>+ P10: uses
P10-->>- P0: return
P0->>+ P11: uses
P11-->>- P0: return
P0->>+ P12: uses
P12-->>- P0: return
P0->>+ P13: uses
P13-->>- P0: return
P0->>+ P14: uses
P14-->>- P0: return
P0->>+ P15: uses
P15-->>- P0: return
P0->>+ P16: uses
P16-->>- P0: return
P0->>+ P17: uses
P17-->>- P0: return
P0->>+ P18: uses
P18-->>- P0: return
P0->>+ P19: uses
P19-->>- P0: return
P0->>+ P20: uses
P20-->>- P0: return
P0->>+ P21: uses
P21-->>- P0: return
P0->>+ P22: uses
P22-->>- P0: return
P0->>+ P23: uses
P23-->>- P0: return
P0->>+ P24: uses
P24-->>- P0: return
P0->>+ P25: uses
P25-->>- P0: return
P0->>+ P26: uses
P26-->>- P0: return
P0->>+ P27: uses
P27-->>- P0: return
P0->>+ P28: uses
P28-->>- P0: return
P0->>+ P29: uses
P29-->>- P0: return
P0->>+ P30: uses
P30-->>- P0: return
P0->>+ P31: uses
P31-->>- P0: return
P0->>+ P32: uses
P32-->>- P0: return
P0->>+ P33: uses
P33-->>- P0: return
P0->>+ P34: uses
P34-->>- P0: return
P0->>+ P35: uses
P35-->>- P0: return
P0->>+ P36: uses
P36-->>- P0: return
P0->>+ P37: uses
P37-->>- P0: return
P0->>+ P38: uses
P38-->>- P0: return
P0->>+ P39: uses
P39-->>- P0: return
P0->>+ P40: uses
P40-->>- P0: return
P0->>+ P41: uses
P41-->>- P0: return
P0->>+ P42: uses
P42-->>- P0: return
P0->>+ P43: uses
P43-->>- P0: return
P0->>+ P44: uses
P44-->>- P0: return
P0->>+ P45: uses
P45-->>- P0: return
P0->>+ P46: uses
P46-->>- P0: return
P0->>+ P47: uses
P47-->>- P0: return
P0->>+ P48: uses
P48-->>- P0: return
P0->>+ P49: uses
P49-->>- P0: return
P0->>+ P50: uses
P50-->>- P0: return
P0->>+ P51: uses
P51-->>- P0: return
P0->>+ P52: uses
P52-->>- P0: return
P0->>+ P53: uses
P53-->>- P0: return
P0->>+ P54: uses
P54-->>- P0: return
P0->>+ P55: uses
P55-->>- P0: return
P0->>+ P56: uses
P56-->>- P0: return
P0->>+ P57: uses
P57-->>- P0: return
P0->>+ P58: uses
P58-->>- P0: return
P0->>+ P59: uses
P59-->>- P0: return
P0->>+ P60: uses
P60-->>- P0: return
P0->>+ P61: uses
P61-->>- P0: return
P0->>+ P62: uses
P62-->>- P0: return
P0->>+ P63: uses
P63-->>- P0: return
P0->>+ P64: uses
P64-->>- P0: return
P0->>+ P65: uses
P65-->>- P0: return
P0->>+ P66: uses
P66-->>- P0: return
P0->>+ P67: uses
P67-->>- P0: return
P0->>+ P68: uses
P68-->>- P0: return
P0->>+ P69: uses
P69-->>- P0: return
P0->>+ P70: uses
P70-->>- P0: return
P0->>+ P80: uses
P80-->>- P0: return
P0->>+ P81: uses
P81-->>- P0: return
P0->>+ P82: uses
P82-->>- P0: return
P0->>+ P83: uses
P83-->>- P0: return
P0->>+ P84: uses
P84-->>- P0: return
P0->>+ P85: uses
P85-->>- P0: return
P0->>+ P86: uses
P86-->>- P0: return
P0->>+ P87: uses
P87-->>- P0: return
P0->>+ P88: uses
P88-->>- P0: return
P0->>+ P89: uses
P89-->>- P0: return
P0->>+ P90: uses
P90-->>- P0: return
P0->>+ P91: uses
P91-->>- P0: return
P0->>+ P92: uses
P92-->>- P0: return
P0->>+ P93: uses
P93-->>- P0: return
P0->>+ P94: uses
P94-->>- P0: return
P0->>+ P95: uses
P95-->>- P0: return
P0->>+ P96: uses
P96-->>- P0: return
P0->>+ P97: uses
P97-->>- P0: return
P0->>+ P98: uses
P98-->>- P0: return
P0->>+ P99: uses
P99-->>- P0: return
P0->>+ P100: uses
P100-->>- P0: return
P0->>+ P101: uses
P101-->>- P0: return
P0->>+ P102: uses
P102-->>- P0: return
P0->>+ P103: uses
P103-->>- P0: return
P0->>+ P104: uses
P104-->>- P0: return
P0->>+ P105: uses
P105-->>- P0: return
```
## Connections by Relation
### calls
- [[receive_edited_media()]] `INFERRED`
### contains
- [[player_edit.py]] `EXTRACTED`
### method
- [[.to_dict()]] `EXTRACTED`
- [[.__repr__()]] `EXTRACTED`
### rationale_for
- [[Player edit model for tracking media files edited on player devices. At]] `EXTRACTED`
### uses
- [[Models package for digiserver-v2.]] `INFERRED`
- [[Admin blueprint for user management and system settings.]] `INFERRED`
- [[Decorator to require admin role for route access.]] `INFERRED`
- [[Display admin panel with system overview.]] `INFERRED`
- [[Create a new user account.]] `INFERRED`
- [[Change user role between user and admin.]] `INFERRED`
- [[Delete a user account.]] `INFERRED`
- [[Change application theme.]] `INFERRED`
- [[Upload custom logo for application.]] `INFERRED`
- [[Clear all server logs.]] `INFERRED`
- [[Display user management page.]] `INFERRED`
- [[Get system information as JSON.]] `INFERRED`
- [[Display leftover media files not assigned to any playlist.]] `INFERRED`
- [[Delete all leftover images that are not part of any playlist]] `INFERRED`
- [[Delete all leftover videos that are not part of any playlist]] `INFERRED`
- [[Delete a single leftover content file]] `INFERRED`
- [[Show system dependencies status.]] `INFERRED`
- [[Install LibreOffice for PPTX conversion.]] `INFERRED`
- [[Install Emoji Fonts for better UI display.]] `INFERRED`
- [[Logo customization page.]] `INFERRED`
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+506
View File
@@ -0,0 +1,506 @@
# PlayerUser
> God node · 74 connections · [/home/scheianu/digiserver-v2/app/models/player_user.py](file:///home/scheianu/digiserver-v2/app/models/player_user.py#L7)
## Call Trace Diagram
```mermaid
sequenceDiagram
participant P0 as PlayerUser
participant P1 as Models package for digiserver-v2.
participant P2 as PlayerEdit
participant P3 as receive_edited_media()
participant P4 as Admin blueprint for user management and system settings.
participant P5 as Decorator to require admin role for route access.
participant P6 as Display admin panel with system overview.
participant P7 as Create a new user account.
participant P8 as Change user role between user and admin.
participant P9 as Delete a user account.
participant P10 as Change application theme.
participant P11 as Upload custom logo for application.
participant P12 as Clear all server logs.
participant P13 as Display user management page.
participant P14 as Get system information as JSON.
participant P15 as Display leftover media files not assigned to any playlist.
participant P16 as Delete all leftover images that are not part of any playlist
participant P17 as Delete all leftover videos that are not part of any playlist
participant P18 as Delete a single leftover content file
participant P19 as Show system dependencies status.
participant P20 as Install LibreOffice for PPTX conversion.
participant P21 as Install Emoji Fonts for better UI display.
participant P22 as Logo customization page.
participant P23 as Upload login page logo.
participant P24 as Display and manage users that edit images on players.
participant P25 as Update editing user name.
participant P26 as Display HTTPS configuration management page.
participant P27 as Update HTTPS configuration.
participant P28 as Get current HTTPS configuration status as JSON.
participant P29 as Path to the persisted player-build settings (in the instance folder).
participant P30 as Display the 'Build player files for deployment' admin page.
participant P31 as Build/refresh the staged player code and/or write its base config.
participant P32 as API blueprint for REST endpoints and player communication.
participant P33 as Rate limiting decorator. Args: max_requests: Maximum number of
participant P34 as Decorator to verify player authentication via auth code.
participant P35 as API health check endpoint.
participant P36 as Get server SSL certificate.
participant P37 as Authenticate a player and return auth code and configuration. Request J
participant P38 as Verify an auth code and return player information. Request JSON:
participant P39 as Get playlist using hostname and quickconnect code (Kivy player compatible).
participant P40 as Get playlist for a specific player. Requires player authentication via
participant P41 as Get current playlist version for a player. Lightweight endpoint for pla
participant P42 as Get cached playlist for a player based on assigned playlist.
participant P43 as Receive feedback/status updates from players (Kivy player compatible).
participant P44 as Get current status of a player (public endpoint for monitoring).
participant P45 as Get progress of a file upload.
participant P46 as Get system information and statistics.
participant P47 as List all content with basic information.
participant P48 as Get recent server logs. Query parameters: limit: Number of logs
participant P49 as Receive edited media from player. Expected multipart/form-data: - i
participant P50 as Test SSH connection to a remote host. Request JSON: hostname: T
participant P51 as Deploy player code to a remote host via SSH. Request JSON: host
participant P52 as Handle 404 errors in API.
participant P53 as Handle 405 errors in API.
participant P54 as Handle 500 errors in API.
participant P55 as Players blueprint for player management and display.
participant P56 as Display list of all players.
participant P57 as Add a new player with optional SSH deployment.
participant P58 as Regenerate authentication code for a player.
participant P59 as Redirect to manage player page (combined view).
participant P60 as Manage player - edit credentials, assign playlist, view logs.
participant P61 as Display all edited media files from this player.
participant P62 as Display a tabular report of all edited media from this player.
participant P63 as Display player fullscreen view (no authentication required for players).
participant P64 as Get playlist for a player based on their assigned playlist. Args:
participant P65 as Legacy endpoint - Content reordering now handled in playlist management.
participant P66 as Delete multiple players at once.
participant P67 as Assign multiple players to a playlist.
participant P68 as Return deployment status for all players (used by polling JS).
participant P69 as Reorder items in player's playlist.
participant P70 as Remove content from player's playlist.
participant P71 as Content model for media files.
participant P72 as Main playlist management page.
participant P73 as View all media files in the library.
participant P74 as Delete a media file and remove it from all playlists.
participant P75 as Create a new playlist.
participant P76 as Manage content in a specific playlist.
participant P77 as Add content to playlist.
participant P78 as Create a web link content item from the Upload Media page. Optionally adds
participant P79 as Create a web link content item and add it to the playlist.
participant P80 as Remove content from playlist.
participant P81 as Remove multiple content items from playlist.
participant P82 as Reorder content in playlist.
participant P83 as Update content muted setting in playlist.
participant P84 as Update content edit_on_player_enabled setting in playlist.
participant P85 as Update content duration in playlist.
participant P86 as Display upload media page.
participant P87 as Process and optimize image files.
participant P88 as Process and optimize video files for Raspberry Pi playback.
participant P89 as Process PDF files by converting each page to PNG images.
participant P90 as Process large files (PDF, PPTX, Video) in background thread.
participant P91 as Process PowerPoint presentation files by converting slides to images.
participant P92 as Create a Full HD (1920x1080) image from PIL Image object, centered on white back
participant P93 as Resize image to exactly Full HD (1920x1080) maintaining aspect ratio with center
participant P94 as Optimize and resize image file to Full HD (1920x1080) maintaining aspect ratio.
participant P95 as Upload media files to library with type-specific processing.
participant P96 as Assign a player to a playlist.
participant P97 as Playlist
participant P98 as HTTPSConfig
participant P99 as Content
participant P100 as User
participant P101 as Player
participant P102 as ServerLog
participant P103 as Group
participant P104 as PlayerFeedback
participant P105 as Add player_user table for user code mappings.
P0->>+ P1: uses
P1-->>- P0: return
P1->>+ P2: uses
P2-->>- P1: return
P2->>+ P1: uses
P1-->>- P2: return
P2->>+ P3: calls
P3-->>- P2: return
P2->>+ P4: uses
P4-->>- P2: return
P2->>+ P5: uses
P5-->>- P2: return
P2->>+ P6: uses
P6-->>- P2: return
P2->>+ P7: uses
P7-->>- P2: return
P2->>+ P8: uses
P8-->>- P2: return
P2->>+ P9: uses
P9-->>- P2: return
P2->>+ P10: uses
P10-->>- P2: return
P2->>+ P11: uses
P11-->>- P2: return
P2->>+ P12: uses
P12-->>- P2: return
P2->>+ P13: uses
P13-->>- P2: return
P2->>+ P14: uses
P14-->>- P2: return
P2->>+ P15: uses
P15-->>- P2: return
P2->>+ P16: uses
P16-->>- P2: return
P2->>+ P17: uses
P17-->>- P2: return
P2->>+ P18: uses
P18-->>- P2: return
P2->>+ P19: uses
P19-->>- P2: return
P2->>+ P20: uses
P20-->>- P2: return
P2->>+ P21: uses
P21-->>- P2: return
P2->>+ P22: uses
P22-->>- P2: return
P2->>+ P23: uses
P23-->>- P2: return
P2->>+ P24: uses
P24-->>- P2: return
P2->>+ P25: uses
P25-->>- P2: return
P2->>+ P26: uses
P26-->>- P2: return
P2->>+ P27: uses
P27-->>- P2: return
P2->>+ P28: uses
P28-->>- P2: return
P2->>+ P29: uses
P29-->>- P2: return
P2->>+ P30: uses
P30-->>- P2: return
P2->>+ P31: uses
P31-->>- P2: return
P2->>+ P32: uses
P32-->>- P2: return
P2->>+ P33: uses
P33-->>- P2: return
P2->>+ P34: uses
P34-->>- P2: return
P2->>+ P35: uses
P35-->>- P2: return
P2->>+ P36: uses
P36-->>- P2: return
P2->>+ P37: uses
P37-->>- P2: return
P2->>+ P38: uses
P38-->>- P2: return
P2->>+ P39: uses
P39-->>- P2: return
P2->>+ P40: uses
P40-->>- P2: return
P2->>+ P41: uses
P41-->>- P2: return
P2->>+ P42: uses
P42-->>- P2: return
P2->>+ P43: uses
P43-->>- P2: return
P2->>+ P44: uses
P44-->>- P2: return
P2->>+ P45: uses
P45-->>- P2: return
P2->>+ P46: uses
P46-->>- P2: return
P2->>+ P47: uses
P47-->>- P2: return
P2->>+ P48: uses
P48-->>- P2: return
P2->>+ P49: uses
P49-->>- P2: return
P2->>+ P50: uses
P50-->>- P2: return
P2->>+ P51: uses
P51-->>- P2: return
P2->>+ P52: uses
P52-->>- P2: return
P2->>+ P53: uses
P53-->>- P2: return
P2->>+ P54: uses
P54-->>- P2: return
P2->>+ P55: uses
P55-->>- P2: return
P2->>+ P56: uses
P56-->>- P2: return
P2->>+ P57: uses
P57-->>- P2: return
P2->>+ P58: uses
P58-->>- P2: return
P2->>+ P59: uses
P59-->>- P2: return
P2->>+ P60: uses
P60-->>- P2: return
P2->>+ P61: uses
P61-->>- P2: return
P2->>+ P62: uses
P62-->>- P2: return
P2->>+ P63: uses
P63-->>- P2: return
P2->>+ P64: uses
P64-->>- P2: return
P2->>+ P65: uses
P65-->>- P2: return
P2->>+ P66: uses
P66-->>- P2: return
P2->>+ P67: uses
P67-->>- P2: return
P2->>+ P68: uses
P68-->>- P2: return
P2->>+ P69: uses
P69-->>- P2: return
P2->>+ P70: uses
P70-->>- P2: return
P2->>+ P71: uses
P71-->>- P2: return
P2->>+ P72: uses
P72-->>- P2: return
P2->>+ P73: uses
P73-->>- P2: return
P2->>+ P74: uses
P74-->>- P2: return
P2->>+ P75: uses
P75-->>- P2: return
P2->>+ P76: uses
P76-->>- P2: return
P2->>+ P77: uses
P77-->>- P2: return
P2->>+ P78: uses
P78-->>- P2: return
P2->>+ P79: uses
P79-->>- P2: return
P2->>+ P80: uses
P80-->>- P2: return
P2->>+ P81: uses
P81-->>- P2: return
P2->>+ P82: uses
P82-->>- P2: return
P2->>+ P83: uses
P83-->>- P2: return
P2->>+ P84: uses
P84-->>- P2: return
P2->>+ P85: uses
P85-->>- P2: return
P2->>+ P86: uses
P86-->>- P2: return
P2->>+ P87: uses
P87-->>- P2: return
P2->>+ P88: uses
P88-->>- P2: return
P2->>+ P89: uses
P89-->>- P2: return
P2->>+ P90: uses
P90-->>- P2: return
P2->>+ P91: uses
P91-->>- P2: return
P2->>+ P92: uses
P92-->>- P2: return
P2->>+ P93: uses
P93-->>- P2: return
P2->>+ P94: uses
P94-->>- P2: return
P2->>+ P95: uses
P95-->>- P2: return
P2->>+ P96: uses
P96-->>- P2: return
P1->>+ P0: uses
P0-->>- P1: return
P1->>+ P97: uses
P97-->>- P1: return
P1->>+ P98: uses
P98-->>- P1: return
P1->>+ P99: uses
P99-->>- P1: return
P1->>+ P100: uses
P100-->>- P1: return
P1->>+ P101: uses
P101-->>- P1: return
P1->>+ P102: uses
P102-->>- P1: return
P1->>+ P103: uses
P103-->>- P1: return
P1->>+ P104: uses
P104-->>- P1: return
P0->>+ P3: calls
P3-->>- P0: return
P0->>+ P4: uses
P4-->>- P0: return
P0->>+ P5: uses
P5-->>- P0: return
P0->>+ P6: uses
P6-->>- P0: return
P0->>+ P7: uses
P7-->>- P0: return
P0->>+ P8: uses
P8-->>- P0: return
P0->>+ P9: uses
P9-->>- P0: return
P0->>+ P10: uses
P10-->>- P0: return
P0->>+ P11: uses
P11-->>- P0: return
P0->>+ P12: uses
P12-->>- P0: return
P0->>+ P13: uses
P13-->>- P0: return
P0->>+ P14: uses
P14-->>- P0: return
P0->>+ P15: uses
P15-->>- P0: return
P0->>+ P16: uses
P16-->>- P0: return
P0->>+ P17: uses
P17-->>- P0: return
P0->>+ P18: uses
P18-->>- P0: return
P0->>+ P19: uses
P19-->>- P0: return
P0->>+ P20: uses
P20-->>- P0: return
P0->>+ P21: uses
P21-->>- P0: return
P0->>+ P22: uses
P22-->>- P0: return
P0->>+ P23: uses
P23-->>- P0: return
P0->>+ P24: uses
P24-->>- P0: return
P0->>+ P25: uses
P25-->>- P0: return
P0->>+ P26: uses
P26-->>- P0: return
P0->>+ P27: uses
P27-->>- P0: return
P0->>+ P28: uses
P28-->>- P0: return
P0->>+ P29: uses
P29-->>- P0: return
P0->>+ P30: uses
P30-->>- P0: return
P0->>+ P31: uses
P31-->>- P0: return
P0->>+ P32: uses
P32-->>- P0: return
P0->>+ P33: uses
P33-->>- P0: return
P0->>+ P34: uses
P34-->>- P0: return
P0->>+ P35: uses
P35-->>- P0: return
P0->>+ P36: uses
P36-->>- P0: return
P0->>+ P37: uses
P37-->>- P0: return
P0->>+ P38: uses
P38-->>- P0: return
P0->>+ P39: uses
P39-->>- P0: return
P0->>+ P40: uses
P40-->>- P0: return
P0->>+ P41: uses
P41-->>- P0: return
P0->>+ P42: uses
P42-->>- P0: return
P0->>+ P43: uses
P43-->>- P0: return
P0->>+ P44: uses
P44-->>- P0: return
P0->>+ P45: uses
P45-->>- P0: return
P0->>+ P46: uses
P46-->>- P0: return
P0->>+ P47: uses
P47-->>- P0: return
P0->>+ P48: uses
P48-->>- P0: return
P0->>+ P49: uses
P49-->>- P0: return
P0->>+ P50: uses
P50-->>- P0: return
P0->>+ P51: uses
P51-->>- P0: return
P0->>+ P52: uses
P52-->>- P0: return
P0->>+ P53: uses
P53-->>- P0: return
P0->>+ P54: uses
P54-->>- P0: return
P0->>+ P55: uses
P55-->>- P0: return
P0->>+ P56: uses
P56-->>- P0: return
P0->>+ P57: uses
P57-->>- P0: return
P0->>+ P58: uses
P58-->>- P0: return
P0->>+ P59: uses
P59-->>- P0: return
P0->>+ P60: uses
P60-->>- P0: return
P0->>+ P61: uses
P61-->>- P0: return
P0->>+ P62: uses
P62-->>- P0: return
P0->>+ P63: uses
P63-->>- P0: return
P0->>+ P64: uses
P64-->>- P0: return
P0->>+ P65: uses
P65-->>- P0: return
P0->>+ P66: uses
P66-->>- P0: return
P0->>+ P67: uses
P67-->>- P0: return
P0->>+ P68: uses
P68-->>- P0: return
P0->>+ P69: uses
P69-->>- P0: return
P0->>+ P70: uses
P70-->>- P0: return
P0->>+ P105: uses
P105-->>- P0: return
```
## Connections by Relation
### calls
- [[receive_edited_media()]] `INFERRED`
### contains
- [[player_user.py]] `EXTRACTED`
### method
- [[.__repr__()]] `EXTRACTED`
- [[.to_dict()]] `EXTRACTED`
### rationale_for
- [[Player user model for managing user codes and names globally. Attribute]] `EXTRACTED`
### uses
- [[Models package for digiserver-v2.]] `INFERRED`
- [[Admin blueprint for user management and system settings.]] `INFERRED`
- [[Decorator to require admin role for route access.]] `INFERRED`
- [[Display admin panel with system overview.]] `INFERRED`
- [[Create a new user account.]] `INFERRED`
- [[Change user role between user and admin.]] `INFERRED`
- [[Delete a user account.]] `INFERRED`
- [[Change application theme.]] `INFERRED`
- [[Upload custom logo for application.]] `INFERRED`
- [[Clear all server logs.]] `INFERRED`
- [[Display user management page.]] `INFERRED`
- [[Get system information as JSON.]] `INFERRED`
- [[Display leftover media files not assigned to any playlist.]] `INFERRED`
- [[Delete all leftover images that are not part of any playlist]] `INFERRED`
- [[Delete all leftover videos that are not part of any playlist]] `INFERRED`
- [[Delete a single leftover content file]] `INFERRED`
- [[Show system dependencies status.]] `INFERRED`
- [[Install LibreOffice for PPTX conversion.]] `INFERRED`
- [[Install Emoji Fonts for better UI display.]] `INFERRED`
- [[Logo customization page.]] `INFERRED`
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+231
View File
@@ -0,0 +1,231 @@
# Playlist
> God node · 33 connections · [/home/scheianu/digiserver-v2/app/models/playlist.py](file:///home/scheianu/digiserver-v2/app/models/playlist.py#L19)
## Call Trace Diagram
```mermaid
sequenceDiagram
participant P0 as Playlist
participant P1 as Content
participant P2 as Models package for digiserver-v2.
participant P3 as PlayerEdit
participant P4 as PlayerUser
participant P5 as HTTPSConfig
participant P6 as User
participant P7 as Player
participant P8 as ServerLog
participant P9 as Group
participant P10 as PlayerFeedback
participant P11 as upload_media()
participant P12 as log_action()
participant P13 as .increment_version()
participant P14 as process_presentation_file()
participant P15 as process_video_file_extended()
participant P16 as process_pdf_file()
participant P17 as process_image_file()
participant P18 as process_file_in_background()
participant P19 as upload_content()
participant P20 as add_weblink()
participant P21 as add_weblink_to_playlist()
participant P22 as Main Blueprint - Dashboard and Home Routes
participant P23 as Health check endpoint
participant P24 as Playlist model for managing content collections.
participant P25 as Playlist model representing a collection of content. Attributes:
participant P26 as String representation of Playlist.
participant P27 as Increment playlist version for sync detection.
participant P28 as Get content items ordered by position.
participant P29 as Get number of players assigned to this playlist.
participant P30 as Get number of content items in this playlist.
participant P31 as Calculate total duration of all content in seconds.
participant P32 as API blueprint for REST endpoints and player communication.
participant P33 as Rate limiting decorator. Args: max_requests: Maximum number of
participant P34 as Decorator to verify player authentication via auth code.
participant P35 as API health check endpoint.
participant P36 as Get server SSL certificate.
participant P37 as Authenticate a player and return auth code and configuration. Request J
participant P38 as Verify an auth code and return player information. Request JSON:
participant P39 as Get playlist using hostname and quickconnect code (Kivy player compatible).
participant P40 as Get playlist for a specific player. Requires player authentication via
participant P41 as Get current playlist version for a player. Lightweight endpoint for pla
participant P42 as Get cached playlist for a player based on assigned playlist.
participant P43 as Receive feedback/status updates from players (Kivy player compatible).
participant P44 as Get current status of a player (public endpoint for monitoring).
participant P45 as Get progress of a file upload.
participant P46 as Get system information and statistics.
participant P47 as List all content with basic information.
participant P48 as Get recent server logs. Query parameters: limit: Number of logs
participant P49 as Receive edited media from player. Expected multipart/form-data: - i
participant P50 as Test SSH connection to a remote host. Request JSON: hostname: T
participant P51 as Deploy player code to a remote host via SSH. Request JSON: host
participant P52 as Handle 404 errors in API.
participant P53 as Handle 405 errors in API.
participant P54 as Handle 500 errors in API.
participant P55 as create_playlist()
P0->>+ P1: uses
P1-->>- P0: return
P1->>+ P0: uses
P0-->>- P1: return
P1->>+ P2: uses
P2-->>- P1: return
P2->>+ P3: uses
P3-->>- P2: return
P2->>+ P4: uses
P4-->>- P2: return
P2->>+ P0: uses
P0-->>- P2: return
P2->>+ P5: uses
P5-->>- P2: return
P2->>+ P1: uses
P1-->>- P2: return
P2->>+ P6: uses
P6-->>- P2: return
P2->>+ P7: uses
P7-->>- P2: return
P2->>+ P8: uses
P8-->>- P2: return
P2->>+ P9: uses
P9-->>- P2: return
P2->>+ P10: uses
P10-->>- P2: return
P1->>+ P11: calls
P11-->>- P1: return
P11->>+ P12: calls
P12-->>- P11: return
P11->>+ P1: calls
P1-->>- P11: return
P11->>+ P13: calls
P13-->>- P11: return
P11->>+ P14: calls
P14-->>- P11: return
P11->>+ P15: calls
P15-->>- P11: return
P11->>+ P16: calls
P16-->>- P11: return
P11->>+ P17: calls
P17-->>- P11: return
P1->>+ P18: calls
P18-->>- P1: return
P1->>+ P19: calls
P19-->>- P1: return
P1->>+ P20: calls
P20-->>- P1: return
P1->>+ P21: calls
P21-->>- P1: return
P1->>+ P22: uses
P22-->>- P1: return
P1->>+ P23: uses
P23-->>- P1: return
P1->>+ P24: uses
P24-->>- P1: return
P1->>+ P25: uses
P25-->>- P1: return
P1->>+ P26: uses
P26-->>- P1: return
P1->>+ P27: uses
P27-->>- P1: return
P1->>+ P28: uses
P28-->>- P1: return
P1->>+ P29: uses
P29-->>- P1: return
P1->>+ P30: uses
P30-->>- P1: return
P1->>+ P31: uses
P31-->>- P1: return
P0->>+ P2: uses
P2-->>- P0: return
P0->>+ P32: uses
P32-->>- P0: return
P0->>+ P33: uses
P33-->>- P0: return
P0->>+ P34: uses
P34-->>- P0: return
P0->>+ P35: uses
P35-->>- P0: return
P0->>+ P36: uses
P36-->>- P0: return
P0->>+ P37: uses
P37-->>- P0: return
P0->>+ P38: uses
P38-->>- P0: return
P0->>+ P39: uses
P39-->>- P0: return
P0->>+ P40: uses
P40-->>- P0: return
P0->>+ P41: uses
P41-->>- P0: return
P0->>+ P42: uses
P42-->>- P0: return
P0->>+ P43: uses
P43-->>- P0: return
P0->>+ P44: uses
P44-->>- P0: return
P0->>+ P45: uses
P45-->>- P0: return
P0->>+ P46: uses
P46-->>- P0: return
P0->>+ P47: uses
P47-->>- P0: return
P0->>+ P48: uses
P48-->>- P0: return
P0->>+ P49: uses
P49-->>- P0: return
P0->>+ P50: uses
P50-->>- P0: return
P0->>+ P51: uses
P51-->>- P0: return
P0->>+ P52: uses
P52-->>- P0: return
P0->>+ P53: uses
P53-->>- P0: return
P0->>+ P54: uses
P54-->>- P0: return
P0->>+ P22: uses
P22-->>- P0: return
P0->>+ P23: uses
P23-->>- P0: return
P0->>+ P55: calls
P55-->>- P0: return
```
## Connections by Relation
### calls
- [[create_playlist()]] `INFERRED`
### contains
- [[playlist.py]] `EXTRACTED`
### method
- [[.increment_version()]] `EXTRACTED`
- [[.get_content_ordered()]] `EXTRACTED`
- [[.__repr__()]] `EXTRACTED`
### rationale_for
- [[Playlist model representing a collection of content. Attributes:]] `EXTRACTED`
### uses
- [[Content]] `INFERRED`
- [[Models package for digiserver-v2.]] `INFERRED`
- [[API blueprint for REST endpoints and player communication.]] `INFERRED`
- [[Rate limiting decorator. Args: max_requests: Maximum number of]] `INFERRED`
- [[Decorator to verify player authentication via auth code.]] `INFERRED`
- [[API health check endpoint.]] `INFERRED`
- [[Get server SSL certificate.]] `INFERRED`
- [[Authenticate a player and return auth code and configuration. Request J]] `INFERRED`
- [[Verify an auth code and return player information. Request JSON:]] `INFERRED`
- [[Get playlist using hostname and quickconnect code (Kivy player compatible).]] `INFERRED`
- [[Get playlist for a specific player. Requires player authentication via]] `INFERRED`
- [[Get current playlist version for a player. Lightweight endpoint for pla]] `INFERRED`
- [[Get cached playlist for a player based on assigned playlist.]] `INFERRED`
- [[Receive feedback/status updates from players (Kivy player compatible).]] `INFERRED`
- [[Get current status of a player (public endpoint for monitoring).]] `INFERRED`
- [[Get progress of a file upload.]] `INFERRED`
- [[Get system information and statistics.]] `INFERRED`
- [[List all content with basic information.]] `INFERRED`
- [[Get recent server logs. Query parameters: limit: Number of logs]] `INFERRED`
- [[Receive edited media from player. Expected multipart/form-data: - i]] `INFERRED`
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+402
View File
@@ -0,0 +1,402 @@
# User
> God node · 19 connections · [/home/scheianu/digiserver-v2/app/models/user.py](file:///home/scheianu/digiserver-v2/app/models/user.py#L10)
## Call Trace Diagram
```mermaid
sequenceDiagram
participant P0 as User
participant P1 as Models package for digiserver-v2.
participant P2 as PlayerEdit
participant P3 as receive_edited_media()
participant P4 as Admin blueprint for user management and system settings.
participant P5 as Decorator to require admin role for route access.
participant P6 as Display admin panel with system overview.
participant P7 as Create a new user account.
participant P8 as Change user role between user and admin.
participant P9 as Delete a user account.
participant P10 as Change application theme.
participant P11 as Upload custom logo for application.
participant P12 as Clear all server logs.
participant P13 as Display user management page.
participant P14 as Get system information as JSON.
participant P15 as Display leftover media files not assigned to any playlist.
participant P16 as Delete all leftover images that are not part of any playlist
participant P17 as Delete all leftover videos that are not part of any playlist
participant P18 as Delete a single leftover content file
participant P19 as Show system dependencies status.
participant P20 as Install LibreOffice for PPTX conversion.
participant P21 as Install Emoji Fonts for better UI display.
participant P22 as Logo customization page.
participant P23 as Upload login page logo.
participant P24 as Display and manage users that edit images on players.
participant P25 as Update editing user name.
participant P26 as Display HTTPS configuration management page.
participant P27 as Update HTTPS configuration.
participant P28 as Get current HTTPS configuration status as JSON.
participant P29 as Path to the persisted player-build settings (in the instance folder).
participant P30 as Display the 'Build player files for deployment' admin page.
participant P31 as Build/refresh the staged player code and/or write its base config.
participant P32 as API blueprint for REST endpoints and player communication.
participant P33 as Rate limiting decorator. Args: max_requests: Maximum number of
participant P34 as Decorator to verify player authentication via auth code.
participant P35 as API health check endpoint.
participant P36 as Get server SSL certificate.
participant P37 as Authenticate a player and return auth code and configuration. Request J
participant P38 as Verify an auth code and return player information. Request JSON:
participant P39 as Get playlist using hostname and quickconnect code (Kivy player compatible).
participant P40 as Get playlist for a specific player. Requires player authentication via
participant P41 as Get current playlist version for a player. Lightweight endpoint for pla
participant P42 as Get cached playlist for a player based on assigned playlist.
participant P43 as Receive feedback/status updates from players (Kivy player compatible).
participant P44 as Get current status of a player (public endpoint for monitoring).
participant P45 as Get progress of a file upload.
participant P46 as Get system information and statistics.
participant P47 as List all content with basic information.
participant P48 as Get recent server logs. Query parameters: limit: Number of logs
participant P49 as Receive edited media from player. Expected multipart/form-data: - i
participant P50 as Test SSH connection to a remote host. Request JSON: hostname: T
participant P51 as Deploy player code to a remote host via SSH. Request JSON: host
participant P52 as Handle 404 errors in API.
participant P53 as Handle 405 errors in API.
participant P54 as Handle 500 errors in API.
participant P55 as Players blueprint for player management and display.
participant P56 as Display list of all players.
participant P57 as Add a new player with optional SSH deployment.
participant P58 as Regenerate authentication code for a player.
participant P59 as Redirect to manage player page (combined view).
participant P60 as Manage player - edit credentials, assign playlist, view logs.
participant P61 as Display all edited media files from this player.
participant P62 as Display a tabular report of all edited media from this player.
participant P63 as Display player fullscreen view (no authentication required for players).
participant P64 as Get playlist for a player based on their assigned playlist. Args:
participant P65 as Legacy endpoint - Content reordering now handled in playlist management.
participant P66 as Delete multiple players at once.
participant P67 as Assign multiple players to a playlist.
participant P68 as Return deployment status for all players (used by polling JS).
participant P69 as Reorder items in player's playlist.
participant P70 as Remove content from player's playlist.
participant P71 as Content model for media files.
participant P72 as Main playlist management page.
participant P73 as View all media files in the library.
participant P74 as Delete a media file and remove it from all playlists.
participant P75 as Create a new playlist.
participant P76 as Manage content in a specific playlist.
participant P77 as Add content to playlist.
participant P78 as Create a web link content item from the Upload Media page. Optionally adds
participant P79 as Create a web link content item and add it to the playlist.
participant P80 as Remove content from playlist.
participant P81 as Remove multiple content items from playlist.
participant P82 as Reorder content in playlist.
participant P83 as Update content muted setting in playlist.
participant P84 as Update content edit_on_player_enabled setting in playlist.
participant P85 as Update content duration in playlist.
participant P86 as Display upload media page.
participant P87 as Process and optimize image files.
participant P88 as Process and optimize video files for Raspberry Pi playback.
participant P89 as Process PDF files by converting each page to PNG images.
participant P90 as Process large files (PDF, PPTX, Video) in background thread.
participant P91 as Process PowerPoint presentation files by converting slides to images.
participant P92 as Create a Full HD (1920x1080) image from PIL Image object, centered on white back
participant P93 as Resize image to exactly Full HD (1920x1080) maintaining aspect ratio with center
participant P94 as Optimize and resize image file to Full HD (1920x1080) maintaining aspect ratio.
participant P95 as Upload media files to library with type-specific processing.
participant P96 as Assign a player to a playlist.
participant P97 as PlayerUser
participant P98 as Playlist
participant P99 as HTTPSConfig
participant P100 as Content
participant P101 as Player
participant P102 as ServerLog
participant P103 as Group
participant P104 as PlayerFeedback
participant P105 as DigiServer v2 - Application Factory Modern Flask application with blueprint arch
participant P106 as Application factory pattern Args: config_name: Configuration en
participant P107 as Register application blueprints
participant P108 as Configure Flask-Login
participant P109 as Register error handlers
participant P110 as Register CLI commands
participant P111 as Register context processors for templates
participant P112 as Register custom Jinja2 template filters
participant P113 as create_user()
participant P114 as Portal SSO middleware for DigiServer v2. When the umbrella nginx verifies the p
participant P115 as Register the SSO before_request handler on the given Flask app.
participant P116 as register()
participant P117 as _get_or_create_user()
P0->>+ P1: uses
P1-->>- P0: return
P1->>+ P2: uses
P2-->>- P1: return
P2->>+ P1: uses
P1-->>- P2: return
P2->>+ P3: calls
P3-->>- P2: return
P2->>+ P4: uses
P4-->>- P2: return
P2->>+ P5: uses
P5-->>- P2: return
P2->>+ P6: uses
P6-->>- P2: return
P2->>+ P7: uses
P7-->>- P2: return
P2->>+ P8: uses
P8-->>- P2: return
P2->>+ P9: uses
P9-->>- P2: return
P2->>+ P10: uses
P10-->>- P2: return
P2->>+ P11: uses
P11-->>- P2: return
P2->>+ P12: uses
P12-->>- P2: return
P2->>+ P13: uses
P13-->>- P2: return
P2->>+ P14: uses
P14-->>- P2: return
P2->>+ P15: uses
P15-->>- P2: return
P2->>+ P16: uses
P16-->>- P2: return
P2->>+ P17: uses
P17-->>- P2: return
P2->>+ P18: uses
P18-->>- P2: return
P2->>+ P19: uses
P19-->>- P2: return
P2->>+ P20: uses
P20-->>- P2: return
P2->>+ P21: uses
P21-->>- P2: return
P2->>+ P22: uses
P22-->>- P2: return
P2->>+ P23: uses
P23-->>- P2: return
P2->>+ P24: uses
P24-->>- P2: return
P2->>+ P25: uses
P25-->>- P2: return
P2->>+ P26: uses
P26-->>- P2: return
P2->>+ P27: uses
P27-->>- P2: return
P2->>+ P28: uses
P28-->>- P2: return
P2->>+ P29: uses
P29-->>- P2: return
P2->>+ P30: uses
P30-->>- P2: return
P2->>+ P31: uses
P31-->>- P2: return
P2->>+ P32: uses
P32-->>- P2: return
P2->>+ P33: uses
P33-->>- P2: return
P2->>+ P34: uses
P34-->>- P2: return
P2->>+ P35: uses
P35-->>- P2: return
P2->>+ P36: uses
P36-->>- P2: return
P2->>+ P37: uses
P37-->>- P2: return
P2->>+ P38: uses
P38-->>- P2: return
P2->>+ P39: uses
P39-->>- P2: return
P2->>+ P40: uses
P40-->>- P2: return
P2->>+ P41: uses
P41-->>- P2: return
P2->>+ P42: uses
P42-->>- P2: return
P2->>+ P43: uses
P43-->>- P2: return
P2->>+ P44: uses
P44-->>- P2: return
P2->>+ P45: uses
P45-->>- P2: return
P2->>+ P46: uses
P46-->>- P2: return
P2->>+ P47: uses
P47-->>- P2: return
P2->>+ P48: uses
P48-->>- P2: return
P2->>+ P49: uses
P49-->>- P2: return
P2->>+ P50: uses
P50-->>- P2: return
P2->>+ P51: uses
P51-->>- P2: return
P2->>+ P52: uses
P52-->>- P2: return
P2->>+ P53: uses
P53-->>- P2: return
P2->>+ P54: uses
P54-->>- P2: return
P2->>+ P55: uses
P55-->>- P2: return
P2->>+ P56: uses
P56-->>- P2: return
P2->>+ P57: uses
P57-->>- P2: return
P2->>+ P58: uses
P58-->>- P2: return
P2->>+ P59: uses
P59-->>- P2: return
P2->>+ P60: uses
P60-->>- P2: return
P2->>+ P61: uses
P61-->>- P2: return
P2->>+ P62: uses
P62-->>- P2: return
P2->>+ P63: uses
P63-->>- P2: return
P2->>+ P64: uses
P64-->>- P2: return
P2->>+ P65: uses
P65-->>- P2: return
P2->>+ P66: uses
P66-->>- P2: return
P2->>+ P67: uses
P67-->>- P2: return
P2->>+ P68: uses
P68-->>- P2: return
P2->>+ P69: uses
P69-->>- P2: return
P2->>+ P70: uses
P70-->>- P2: return
P2->>+ P71: uses
P71-->>- P2: return
P2->>+ P72: uses
P72-->>- P2: return
P2->>+ P73: uses
P73-->>- P2: return
P2->>+ P74: uses
P74-->>- P2: return
P2->>+ P75: uses
P75-->>- P2: return
P2->>+ P76: uses
P76-->>- P2: return
P2->>+ P77: uses
P77-->>- P2: return
P2->>+ P78: uses
P78-->>- P2: return
P2->>+ P79: uses
P79-->>- P2: return
P2->>+ P80: uses
P80-->>- P2: return
P2->>+ P81: uses
P81-->>- P2: return
P2->>+ P82: uses
P82-->>- P2: return
P2->>+ P83: uses
P83-->>- P2: return
P2->>+ P84: uses
P84-->>- P2: return
P2->>+ P85: uses
P85-->>- P2: return
P2->>+ P86: uses
P86-->>- P2: return
P2->>+ P87: uses
P87-->>- P2: return
P2->>+ P88: uses
P88-->>- P2: return
P2->>+ P89: uses
P89-->>- P2: return
P2->>+ P90: uses
P90-->>- P2: return
P2->>+ P91: uses
P91-->>- P2: return
P2->>+ P92: uses
P92-->>- P2: return
P2->>+ P93: uses
P93-->>- P2: return
P2->>+ P94: uses
P94-->>- P2: return
P2->>+ P95: uses
P95-->>- P2: return
P2->>+ P96: uses
P96-->>- P2: return
P1->>+ P97: uses
P97-->>- P1: return
P1->>+ P98: uses
P98-->>- P1: return
P1->>+ P99: uses
P99-->>- P1: return
P1->>+ P100: uses
P100-->>- P1: return
P1->>+ P0: uses
P0-->>- P1: return
P1->>+ P101: uses
P101-->>- P1: return
P1->>+ P102: uses
P102-->>- P1: return
P1->>+ P103: uses
P103-->>- P1: return
P1->>+ P104: uses
P104-->>- P1: return
P0->>+ P105: uses
P105-->>- P0: return
P0->>+ P106: uses
P106-->>- P0: return
P0->>+ P107: uses
P107-->>- P0: return
P0->>+ P108: uses
P108-->>- P0: return
P0->>+ P109: uses
P109-->>- P0: return
P0->>+ P110: uses
P110-->>- P0: return
P0->>+ P111: uses
P111-->>- P0: return
P0->>+ P112: uses
P112-->>- P0: return
P0->>+ P113: calls
P113-->>- P0: return
P0->>+ P114: uses
P114-->>- P0: return
P0->>+ P115: uses
P115-->>- P0: return
P0->>+ P116: calls
P116-->>- P0: return
P0->>+ P117: calls
P117-->>- P0: return
```
## Connections by Relation
### calls
- [[create_user()]] `INFERRED`
- [[register()]] `INFERRED`
- [[_get_or_create_user()]] `INFERRED`
### contains
- [[user.py]] `EXTRACTED`
### inherits
- [[UserMixin]] `EXTRACTED`
### method
- [[.__repr__()]] `EXTRACTED`
- [[.update_last_login()]] `EXTRACTED`
### rationale_for
- [[User model for application authentication. Attributes: id: Prim]] `EXTRACTED`
### uses
- [[Models package for digiserver-v2.]] `INFERRED`
- [[DigiServer v2 - Application Factory Modern Flask application with blueprint arch]] `INFERRED`
- [[Application factory pattern Args: config_name: Configuration en]] `INFERRED`
- [[Register application blueprints]] `INFERRED`
- [[Configure Flask-Login]] `INFERRED`
- [[Register error handlers]] `INFERRED`
- [[Register CLI commands]] `INFERRED`
- [[Register context processors for templates]] `INFERRED`
- [[Register custom Jinja2 template filters]] `INFERRED`
- [[Portal SSO middleware for DigiServer v2. When the umbrella nginx verifies the p]] `INFERRED`
- [[Register the SSO before_request handler on the given Flask app.]] `INFERRED`
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+118
View File
@@ -0,0 +1,118 @@
# create_app()
> God node · 13 connections · [/home/scheianu/digiserver-v2/app/app.py](file:///home/scheianu/digiserver-v2/app/app.py#L17)
## Call Trace Diagram
```mermaid
sequenceDiagram
participant P0 as create_app()
participant P1 as ScriptNameFix
participant P2 as DigiServer v2 - Application Factory Modern Flask application with blueprint arch
participant P3 as User
participant P4 as DevelopmentConfig
participant P5 as ProductionConfig
participant P6 as TestingConfig
participant P7 as Application factory pattern Args: config_name: Configuration en
participant P8 as Register application blueprints
participant P9 as Configure Flask-Login
participant P10 as Register error handlers
participant P11 as Register CLI commands
participant P12 as Register context processors for templates
participant P13 as Register custom Jinja2 template filters
participant P14 as configure_login_manager()
participant P15 as register_blueprints()
participant P16 as register_error_handlers()
participant P17 as register_commands()
participant P18 as register_context_processors()
participant P19 as register_template_filters()
participant P20 as init_portal_sso()
participant P21 as test_edit_media_endpoint()
participant P22 as add_muted_column()
participant P23 as main()
P0->>+ P1: calls
P1-->>- P0: return
P1->>+ P0: calls
P0-->>- P1: return
P1->>+ P2: uses
P2-->>- P1: return
P2->>+ P3: uses
P3-->>- P2: return
P2->>+ P1: uses
P1-->>- P2: return
P2->>+ P4: uses
P4-->>- P2: return
P2->>+ P5: uses
P5-->>- P2: return
P2->>+ P6: uses
P6-->>- P2: return
P1->>+ P7: uses
P7-->>- P1: return
P7->>+ P3: uses
P3-->>- P7: return
P7->>+ P1: uses
P1-->>- P7: return
P7->>+ P4: uses
P4-->>- P7: return
P7->>+ P5: uses
P5-->>- P7: return
P7->>+ P6: uses
P6-->>- P7: return
P1->>+ P8: uses
P8-->>- P1: return
P1->>+ P9: uses
P9-->>- P1: return
P1->>+ P10: uses
P10-->>- P1: return
P1->>+ P11: uses
P11-->>- P1: return
P1->>+ P12: uses
P12-->>- P1: return
P1->>+ P13: uses
P13-->>- P1: return
P0->>+ P14: calls
P14-->>- P0: return
P0->>+ P15: calls
P15-->>- P0: return
P0->>+ P16: calls
P16-->>- P0: return
P0->>+ P17: calls
P17-->>- P0: return
P0->>+ P18: calls
P18-->>- P0: return
P0->>+ P19: calls
P19-->>- P0: return
P0->>+ P20: calls
P20-->>- P0: return
P0->>+ P21: calls
P21-->>- P0: return
P0->>+ P22: calls
P22-->>- P0: return
P0->>+ P23: calls
P23-->>- P0: return
```
## Connections by Relation
### calls
- [[ScriptNameFix]] `INFERRED`
- [[configure_login_manager()]] `EXTRACTED`
- [[register_blueprints()]] `EXTRACTED`
- [[register_error_handlers()]] `EXTRACTED`
- [[register_commands()]] `EXTRACTED`
- [[register_context_processors()]] `EXTRACTED`
- [[register_template_filters()]] `EXTRACTED`
- [[init_portal_sso()]] `INFERRED`
- [[test_edit_media_endpoint()]] `INFERRED`
- [[add_muted_column()]] `INFERRED`
- [[main()]] `INFERRED`
### contains
- [[app.py]] `EXTRACTED`
### rationale_for
- [[Application factory pattern Args: config_name: Configuration en]] `EXTRACTED`
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*
+163
View File
@@ -0,0 +1,163 @@
# Knowledge Graph Index
> Auto-generated by graphify. Start here — read community articles for context, then drill into god nodes for detail.
**631 nodes · 1162 edges · 41 communities**
---
## System Architecture Flowchart
```mermaid
flowchart TD
C0["Community 0 (90 nodes)"]
C1["Community 1 (80 nodes)"]
C2["Community 2 (68 nodes)"]
C3["Community 3 (62 nodes)"]
C4["Community 4 (55 nodes)"]
C5["Community 5 (54 nodes)"]
C6["Community 6 (51 nodes)"]
C7["Community 7 (42 nodes)"]
C8["Community 8 (24 nodes)"]
C9["Community 9 (21 nodes)"]
C10["Community 10 (20 nodes)"]
C11["Community 11 (19 nodes)"]
C12["Community 12 (8 nodes)"]
C13["Community 13 (4 nodes)"]
C14["Community 14 (2 nodes)"]
C15["Community 15 (2 nodes)"]
C16["Community 16 (2 nodes)"]
C17["Community 17 (2 nodes)"]
C18["Community 18 (2 nodes)"]
C19["Community 19 (2 nodes)"]
C20["Community 20 (1 nodes)"]
C21["Community 21 (1 nodes)"]
C22["Community 22 (1 nodes)"]
C23["Community 23 (1 nodes)"]
C24["Community 24 (1 nodes)"]
C25["Community 25 (1 nodes)"]
C26["Community 26 (1 nodes)"]
C27["Community 27 (1 nodes)"]
C28["Community 28 (1 nodes)"]
C29["Community 29 (1 nodes)"]
C30["Community 30 (1 nodes)"]
C31["Community 31 (1 nodes)"]
C32["Community 32 (1 nodes)"]
C33["Community 33 (1 nodes)"]
C34["Community 34 (1 nodes)"]
C35["Community 35 (1 nodes)"]
C36["Community 36 (1 nodes)"]
C37["Community 37 (1 nodes)"]
C38["Community 38 (1 nodes)"]
C39["Community 39 (1 nodes)"]
C40["Community 40 (1 nodes)"]
C1 -->|27 edges| C3
C2 -->|25 edges| C3
C2 -->|25 edges| C0
C3 -->|25 edges| C1
C1 -->|21 edges| C0
C6 -->|16 edges| C1
C6 -->|16 edges| C3
C3 -->|14 edges| C0
C6 -->|14 edges| C0
C5 -->|9 edges| C3
C2 -->|6 edges| C5
C1 -->|5 edges| C6
C9 -->|5 edges| C0
C3 -->|5 edges| C5
C1 -->|3 edges| C11
C7 -->|3 edges| C0
C5 -->|3 edges| C6
C11 -->|2 edges| C1
C0 -->|2 edges| C9
C2 -->|2 edges| C7
C7 -->|2 edges| C3
C5 -->|2 edges| C0
C0 -->|2 edges| C7
C1 -->|1 edges| C4
C1 -->|1 edges| C10
C11 -->|1 edges| C0
C11 -->|1 edges| C3
C9 -->|1 edges| C5
C5 -->|1 edges| C4
C5 -->|1 edges| C7
C5 -->|1 edges| C1
C3 -->|1 edges| C7
C3 -->|1 edges| C10
C6 -->|1 edges| C7
C7 -->|1 edges| C8
C6 -->|1 edges| C5
C6 -->|1 edges| C11
C6 -->|1 edges| C10
C7 -->|1 edges| C6
C7 -->|1 edges| C1
C0 -->|1 edges| C4
C10 -->|1 edges| C6
C10 -->|1 edges| C11
C0 -->|1 edges| C10
C5 -->|1 edges| C2
C3 -->|1 edges| C2
```
## Communities
(sorted by size, largest first)
- [[Community 0]] — 90 nodes
- [[Community 1]] — 80 nodes
- [[Community 2]] — 68 nodes
- [[Community 3]] — 62 nodes
- [[Community 4]] — 55 nodes
- [[Community 5]] — 54 nodes
- [[Community 6]] — 51 nodes
- [[Community 7]] — 42 nodes
- [[Community 8]] — 24 nodes
- [[Community 9]] — 21 nodes
- [[Community 10]] — 20 nodes
- [[Community 11]] — 19 nodes
- [[Community 12]] — 8 nodes
- [[Community 13]] — 4 nodes
- [[Community 14]] — 2 nodes
- [[Community 15]] — 2 nodes
- [[Community 16]] — 2 nodes
- [[Community 17]] — 2 nodes
- [[Community 18]] — 2 nodes
- [[Community 19]] — 2 nodes
- [[Community 20]] — 1 nodes
- [[Community 21]] — 1 nodes
- [[Community 22]] — 1 nodes
- [[Community 23]] — 1 nodes
- [[Community 24]] — 1 nodes
- [[Community 25]] — 1 nodes
- [[Community 26]] — 1 nodes
- [[Community 27]] — 1 nodes
- [[Community 28]] — 1 nodes
- [[Community 29]] — 1 nodes
- [[Community 30]] — 1 nodes
- [[Community 31]] — 1 nodes
- [[Community 32]] — 1 nodes
- [[Community 33]] — 1 nodes
- [[Community 34]] — 1 nodes
- [[Community 35]] — 1 nodes
- [[Community 36]] — 1 nodes
- [[Community 37]] — 1 nodes
- [[Community 38]] — 1 nodes
- [[Community 39]] — 1 nodes
- [[Community 40]] — 1 nodes
## God Nodes
(most connected concepts — the load-bearing abstractions)
- [[log_action()]] — 116 connections
- [[PlayerEdit]] — 99 connections
- [[PlayerUser]] — 74 connections
- [[Playlist]] — 33 connections
- [[CaddyConfigGenerator]] — 31 connections
- [[HTTPSConfig]] — 30 connections
- [[Content]] — 24 connections
- [[User]] — 19 connections
- [[create_app()]] — 13 connections
- [[Models package for digiserver-v2.]] — 13 connections
---
*Generated by [graphify](https://github.com/safishamsi/graphify)*
+443
View File
@@ -0,0 +1,443 @@
# log_action()
> God node · 116 connections · [/home/scheianu/digiserver-v2/app/utils/logger.py](file:///home/scheianu/digiserver-v2/app/utils/logger.py#L9)
## Call Trace Diagram
```mermaid
sequenceDiagram
participant P0 as log_action()
participant P1 as ServerLog
participant P2 as Models package for digiserver-v2.
participant P3 as PlayerEdit
participant P4 as PlayerUser
participant P5 as Playlist
participant P6 as HTTPSConfig
participant P7 as Content
participant P8 as User
participant P9 as Player
participant P10 as Group
participant P11 as PlayerFeedback
participant P12 as Logging utility for tracking system events.
participant P13 as Log an action to the database with specified level. Args: level
participant P14 as Get the most recent log entries. Args: limit: Maximum number of
participant P15 as Delete logs older than specified days. Args: days: Number of da
participant P16 as Log an info level message.
participant P17 as Log a warning level message.
participant P18 as Log an error level message.
participant P19 as add_player()
participant P20 as build_player_action()
participant P21 as upload_media()
participant P22 as list()
participant P23 as update_https_config()
participant P24 as process_file_in_background()
participant P25 as process_presentation_file()
participant P26 as receive_edited_media()
participant P27 as manage_player()
participant P28 as https_config_status()
participant P29 as upload_content()
participant P30 as add_weblink()
participant P31 as add_weblink_to_playlist()
participant P32 as process_video_file_extended()
participant P33 as process_pdf_file()
participant P34 as authenticate_player()
participant P35 as get_playlist_by_quickconnect()
participant P36 as receive_player_feedback()
participant P37 as process_video_file()
participant P38 as create_user()
participant P39 as https_config()
participant P40 as delete_media()
participant P41 as create_playlist()
participant P42 as add_content_to_playlist()
participant P43 as remove_content_from_playlist()
participant P44 as bulk_remove_from_playlist()
participant P45 as reorder_playlist_content()
participant P46 as update_playlist_content_muted()
participant P47 as update_playlist_content_edit_enabled()
participant P48 as update_playlist_content_duration()
participant P49 as process_image_file()
participant P50 as resize_image_to_fullhd()
participant P51 as optimize_image_to_fullhd()
participant P52 as get_player_playlist()
participant P53 as deploy_player()
participant P54 as player_fullscreen()
participant P55 as add_to_playlist()
participant P56 as remove_from_playlist()
participant P57 as reorder_playlist()
participant P58 as update_duration()
participant P59 as update_muted()
participant P60 as clear_playlist()
participant P61 as process_pdf_file()
participant P62 as background_player_deployment()
participant P63 as groups_list()
participant P64 as manage_group()
participant P65 as group_fullscreen()
participant P66 as group_stats()
participant P67 as clear_old_logs()
participant P68 as log_info()
participant P69 as log_warning()
participant P70 as log_error()
participant P71 as admin_panel()
participant P72 as change_user_role()
participant P73 as delete_user()
participant P74 as change_theme()
participant P75 as upload_logo()
participant P76 as clear_logs()
participant P77 as user_management()
participant P78 as system_info()
participant P79 as leftover_media()
participant P80 as install_libreoffice()
participant P81 as install_emoji_fonts()
participant P82 as upload_login_logo()
participant P83 as manage_editing_users()
participant P84 as update_editing_user()
participant P85 as content_list()
participant P86 as edit_content()
participant P87 as delete_content()
participant P88 as delete_by_filename()
participant P89 as bulk_delete_content()
participant P90 as preview_content()
participant P91 as download_content()
participant P92 as content_statistics()
participant P93 as check_duplicates()
participant P94 as content_groups_info()
participant P95 as assign_player_to_playlist()
participant P96 as get_playlist_version()
participant P97 as get_player_status()
participant P98 as get_upload_progress()
participant P99 as system_info()
participant P100 as list_content()
participant P101 as get_logs()
participant P102 as test_ssh_connection()
participant P103 as regenerate_auth_code()
participant P104 as edited_media()
participant P105 as edited_media_report()
participant P106 as bulk_delete_players()
participant P107 as bulk_assign_playlist()
participant P108 as deployment_status()
participant P109 as reorder_playlist()
participant P110 as remove_from_playlist()
participant P111 as assign_player_to_group()
participant P112 as bulk_assign_players_to_group()
participant P113 as save_uploaded_file()
participant P114 as delete_file()
participant P115 as create_group()
participant P116 as add_player_to_group()
participant P117 as remove_player_from_group()
participant P118 as add_content_to_group()
participant P119 as remove_content_from_group()
participant P120 as reorder_group_content()
participant P121 as reset_user_password()
participant P122 as upload_header_logo()
participant P123 as delete_editing_user()
participant P124 as delete_playlist()
participant P125 as edit_player()
participant P126 as delete_player()
participant P127 as login()
participant P128 as logout()
participant P129 as change_password()
participant P130 as edit_group()
participant P131 as delete_group()
P0->>+ P1: calls
P1-->>- P0: return
P1->>+ P0: calls
P0-->>- P1: return
P1->>+ P2: uses
P2-->>- P1: return
P2->>+ P3: uses
P3-->>- P2: return
P2->>+ P4: uses
P4-->>- P2: return
P2->>+ P5: uses
P5-->>- P2: return
P2->>+ P6: uses
P6-->>- P2: return
P2->>+ P7: uses
P7-->>- P2: return
P2->>+ P8: uses
P8-->>- P2: return
P2->>+ P9: uses
P9-->>- P2: return
P2->>+ P1: uses
P1-->>- P2: return
P2->>+ P10: uses
P10-->>- P2: return
P2->>+ P11: uses
P11-->>- P2: return
P1->>+ P12: uses
P12-->>- P1: return
P12->>+ P1: uses
P1-->>- P12: return
P1->>+ P13: uses
P13-->>- P1: return
P1->>+ P14: uses
P14-->>- P1: return
P1->>+ P15: uses
P15-->>- P1: return
P1->>+ P16: uses
P16-->>- P1: return
P1->>+ P17: uses
P17-->>- P1: return
P1->>+ P18: uses
P18-->>- P1: return
P0->>+ P19: calls
P19-->>- P0: return
P0->>+ P20: calls
P20-->>- P0: return
P0->>+ P21: calls
P21-->>- P0: return
P0->>+ P22: calls
P22-->>- P0: return
P0->>+ P23: calls
P23-->>- P0: return
P0->>+ P24: calls
P24-->>- P0: return
P0->>+ P25: calls
P25-->>- P0: return
P0->>+ P26: calls
P26-->>- P0: return
P0->>+ P27: calls
P27-->>- P0: return
P0->>+ P28: calls
P28-->>- P0: return
P0->>+ P29: calls
P29-->>- P0: return
P0->>+ P30: calls
P30-->>- P0: return
P0->>+ P31: calls
P31-->>- P0: return
P0->>+ P32: calls
P32-->>- P0: return
P0->>+ P33: calls
P33-->>- P0: return
P0->>+ P34: calls
P34-->>- P0: return
P0->>+ P35: calls
P35-->>- P0: return
P0->>+ P36: calls
P36-->>- P0: return
P0->>+ P37: calls
P37-->>- P0: return
P0->>+ P38: calls
P38-->>- P0: return
P0->>+ P39: calls
P39-->>- P0: return
P0->>+ P40: calls
P40-->>- P0: return
P0->>+ P41: calls
P41-->>- P0: return
P0->>+ P42: calls
P42-->>- P0: return
P0->>+ P43: calls
P43-->>- P0: return
P0->>+ P44: calls
P44-->>- P0: return
P0->>+ P45: calls
P45-->>- P0: return
P0->>+ P46: calls
P46-->>- P0: return
P0->>+ P47: calls
P47-->>- P0: return
P0->>+ P48: calls
P48-->>- P0: return
P0->>+ P49: calls
P49-->>- P0: return
P0->>+ P50: calls
P50-->>- P0: return
P0->>+ P51: calls
P51-->>- P0: return
P0->>+ P52: calls
P52-->>- P0: return
P0->>+ P53: calls
P53-->>- P0: return
P0->>+ P54: calls
P54-->>- P0: return
P0->>+ P55: calls
P55-->>- P0: return
P0->>+ P56: calls
P56-->>- P0: return
P0->>+ P57: calls
P57-->>- P0: return
P0->>+ P58: calls
P58-->>- P0: return
P0->>+ P59: calls
P59-->>- P0: return
P0->>+ P60: calls
P60-->>- P0: return
P0->>+ P61: calls
P61-->>- P0: return
P0->>+ P62: calls
P62-->>- P0: return
P0->>+ P63: calls
P63-->>- P0: return
P0->>+ P64: calls
P64-->>- P0: return
P0->>+ P65: calls
P65-->>- P0: return
P0->>+ P66: calls
P66-->>- P0: return
P0->>+ P67: calls
P67-->>- P0: return
P0->>+ P68: calls
P68-->>- P0: return
P0->>+ P69: calls
P69-->>- P0: return
P0->>+ P70: calls
P70-->>- P0: return
P0->>+ P71: calls
P71-->>- P0: return
P0->>+ P72: calls
P72-->>- P0: return
P0->>+ P73: calls
P73-->>- P0: return
P0->>+ P74: calls
P74-->>- P0: return
P0->>+ P75: calls
P75-->>- P0: return
P0->>+ P76: calls
P76-->>- P0: return
P0->>+ P77: calls
P77-->>- P0: return
P0->>+ P78: calls
P78-->>- P0: return
P0->>+ P79: calls
P79-->>- P0: return
P0->>+ P80: calls
P80-->>- P0: return
P0->>+ P81: calls
P81-->>- P0: return
P0->>+ P82: calls
P82-->>- P0: return
P0->>+ P83: calls
P83-->>- P0: return
P0->>+ P84: calls
P84-->>- P0: return
P0->>+ P85: calls
P85-->>- P0: return
P0->>+ P86: calls
P86-->>- P0: return
P0->>+ P87: calls
P87-->>- P0: return
P0->>+ P88: calls
P88-->>- P0: return
P0->>+ P89: calls
P89-->>- P0: return
P0->>+ P90: calls
P90-->>- P0: return
P0->>+ P91: calls
P91-->>- P0: return
P0->>+ P92: calls
P92-->>- P0: return
P0->>+ P93: calls
P93-->>- P0: return
P0->>+ P94: calls
P94-->>- P0: return
P0->>+ P95: calls
P95-->>- P0: return
P0->>+ P96: calls
P96-->>- P0: return
P0->>+ P97: calls
P97-->>- P0: return
P0->>+ P98: calls
P98-->>- P0: return
P0->>+ P99: calls
P99-->>- P0: return
P0->>+ P100: calls
P100-->>- P0: return
P0->>+ P101: calls
P101-->>- P0: return
P0->>+ P102: calls
P102-->>- P0: return
P0->>+ P103: calls
P103-->>- P0: return
P0->>+ P104: calls
P104-->>- P0: return
P0->>+ P105: calls
P105-->>- P0: return
P0->>+ P106: calls
P106-->>- P0: return
P0->>+ P107: calls
P107-->>- P0: return
P0->>+ P108: calls
P108-->>- P0: return
P0->>+ P109: calls
P109-->>- P0: return
P0->>+ P110: calls
P110-->>- P0: return
P0->>+ P111: calls
P111-->>- P0: return
P0->>+ P112: calls
P112-->>- P0: return
P0->>+ P113: calls
P113-->>- P0: return
P0->>+ P114: calls
P114-->>- P0: return
P0->>+ P115: calls
P115-->>- P0: return
P0->>+ P116: calls
P116-->>- P0: return
P0->>+ P117: calls
P117-->>- P0: return
P0->>+ P118: calls
P118-->>- P0: return
P0->>+ P119: calls
P119-->>- P0: return
P0->>+ P120: calls
P120-->>- P0: return
P0->>+ P121: calls
P121-->>- P0: return
P0->>+ P122: calls
P122-->>- P0: return
P0->>+ P123: calls
P123-->>- P0: return
P0->>+ P124: calls
P124-->>- P0: return
P0->>+ P125: calls
P125-->>- P0: return
P0->>+ P126: calls
P126-->>- P0: return
P0->>+ P127: calls
P127-->>- P0: return
P0->>+ P128: calls
P128-->>- P0: return
P0->>+ P129: calls
P129-->>- P0: return
P0->>+ P130: calls
P130-->>- P0: return
P0->>+ P131: calls
P131-->>- P0: return
```
## Connections by Relation
### calls
- [[ServerLog]] `INFERRED`
- [[add_player()]] `INFERRED`
- [[build_player_action()]] `INFERRED`
- [[upload_media()]] `INFERRED`
- [[list()]] `INFERRED`
- [[update_https_config()]] `INFERRED`
- [[process_file_in_background()]] `INFERRED`
- [[process_presentation_file()]] `INFERRED`
- [[receive_edited_media()]] `INFERRED`
- [[manage_player()]] `INFERRED`
- [[https_config_status()]] `INFERRED`
- [[upload_content()]] `INFERRED`
- [[add_weblink()]] `INFERRED`
- [[add_weblink_to_playlist()]] `INFERRED`
- [[process_video_file_extended()]] `INFERRED`
- [[process_pdf_file()]] `INFERRED`
- [[authenticate_player()]] `INFERRED`
- [[get_playlist_by_quickconnect()]] `INFERRED`
- [[receive_player_feedback()]] `INFERRED`
- [[process_video_file()]] `INFERRED`
### contains
- [[logger.py]] `EXTRACTED`
### rationale_for
- [[Log an action to the database with specified level. Args: level]] `EXTRACTED`
---
*Part of the graphify knowledge wiki. See [[index]] to navigate.*