Files
ske087 46602f1933 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.
2026-09-11 12:18:34 +03:00

17 KiB

Graph Report - /home/scheianu/digiserver-v2 (2026-08-16)

Corpus Check

  • 49 files · ~210,805 words
  • Verdict: corpus is large enough that graph structure adds value.

Summary

  • 631 nodes · 1162 edges · 41 communities detected
  • Extraction: 56% EXTRACTED · 44% INFERRED · 0% AMBIGUOUS · INFERRED: 512 edges (avg confidence: 0.62)
  • Token cost: 0 input · 0 output

Community Hubs (Navigation)

God Nodes (most connected - your core abstractions)

  1. log_action() - 116 edges
  2. PlayerEdit - 99 edges
  3. PlayerUser - 74 edges
  4. Playlist - 33 edges
  5. CaddyConfigGenerator - 31 edges
  6. HTTPSConfig - 30 edges
  7. Content - 24 edges
  8. User - 19 edges
  9. create_app() - 13 edges
  10. Models package for digiserver-v2. - 13 edges

Surprising Connections (you probably didn't know these)

  • reset_user_password() --calls--> log_action() [INFERRED] /home/scheianu/digiserver-v2/app/blueprints/admin.py → /home/scheianu/digiserver-v2/app/utils/logger.py
  • upload_header_logo() --calls--> log_action() [INFERRED] /home/scheianu/digiserver-v2/app/blueprints/admin.py → /home/scheianu/digiserver-v2/app/utils/logger.py
  • delete_editing_user() --calls--> log_action() [INFERRED] /home/scheianu/digiserver-v2/app/blueprints/admin.py → /home/scheianu/digiserver-v2/app/utils/logger.py
  • delete_playlist() --calls--> log_action() [INFERRED] /home/scheianu/digiserver-v2/app/blueprints/content.py → /home/scheianu/digiserver-v2/app/utils/logger.py
  • Main playlist management page. --uses--> PlayerEdit [INFERRED] /home/scheianu/digiserver-v2/app/blueprints/content.py → /home/scheianu/digiserver-v2/app/models/player_edit.py

Communities

Community 0 - "Community 0"

Cohesion: 0.03 Nodes (80): change_password(), login(), logout(), Authentication Blueprint - Login, Logout, Register, register(), add_content_to_group(), add_player_to_group(), delete_group() (+72 more)

Community 1 - "Community 1"

Cohesion: 0.04 Nodes (72): Add player_user table for user code mappings., admin_panel(), admin_required(), build_player(), change_theme(), change_user_role(), clear_logs(), create_user() (+64 more)

Community 2 - "Community 2"

Cohesion: 0.04 Nodes (61): add_content_to_playlist(), add_weblink(), add_weblink_to_playlist(), assign_player_to_playlist(), bulk_remove_from_playlist(), content_list(), create_fullhd_image(), delete_playlist() (+53 more)

Community 3 - "Community 3"

Cohesion: 0.06 Nodes (57): api_not_found(), authenticate_player(), deploy_player(), get_cached_playlist(), get_logs(), get_player_playlist(), get_player_status(), get_playlist_by_quickconnect() (+49 more)

Community 4 - "Community 4"

Cohesion: 0.07 Nodes (42): add_muted_column(), Add muted column to playlist_content association table., configure_login_manager(), create_app(), DigiServer v2 - Application Factory Modern Flask application with blueprint arch, Configure Flask-Login, Register error handlers, Register CLI commands (+34 more)

Community 5 - "Community 5"

Cohesion: 0.04 Nodes (27): Content, Content model for media files., String representation of Content., Check if content is an image., Check if content is a video., Content model representing media files for display. Attributes:, Check if content is a PDF., Check if content is a web link (URL) rather than an uploaded file. (+19 more)

Community 6 - "Community 6"

Cohesion: 0.05 Nodes (45): Add https_config table for HTTPS configuration management., Write Caddyfile to disk. Args: caddyfile_content: C, Reload Caddy configuration without restart. Note: Caddy monitor, Generate a complete Caddyfile. Behaviour: - HTTPS disabled / no, Write Caddyfile to disk. The default path is /etc/caddy/Caddyfile — the, Push the current Caddyfile to Caddy via its admin API (/load). Caddy ap, HTTPSConfig, String representation of HTTPSConfig. (+37 more)

Community 7 - "Community 7"

Cohesion: 0.06 Nodes (26): create_group(), delete_media(), Delete a media file and remove it from all playlists., Group, Group model for organizing players and content., Group model for organizing players with shared content. Attributes:, String representation of Group., Add a player to this group. Args: player: Player in (+18 more)

Community 8 - "Community 8"

Cohesion: 0.23 Nodes (23): check_database_integrity(), Colors, get_player_auth_code(), get_sample_content(), main(), print_error(), print_info(), print_section() (+15 more)

Community 9 - "Community 9"

Cohesion: 0.11 Nodes (20): Get upload progress for a specific upload., upload_content(), upload_progress_status(), clear_upload_progress(), delete_file(), get_file_size(), get_upload_progress(), process_pdf_file() (+12 more)

Community 10 - "Community 10"

Cohesion: 0.12 Nodes (18): background_player_deployment(), Background task execution for long-running operations., Run a function in a background thread, with a Flask app context pushed., Deploy player code to host in background. Args: hostname: SSH h, run_background_task(), deploy_player_to_host(), generate_app_config(), generate_player_config() (+10 more)

Community 11 - "Community 11"

Cohesion: 0.15 Nodes (18): build_player_action(), Build/refresh the staged player code and/or write its base config., build_player_files(), get_player_server_settings(), get_short_head(), load_build_settings(), make_build_record(), Utilities for building/staging the player files on the server. Admins use the " (+10 more)

Community 12 - "Community 12"

Cohesion: 0.29 Nodes (7): cleanup_libreoffice_processes(), pptx_to_pdf_libreoffice(), PowerPoint to PDF converter using LibreOffice., Clean up any hanging LibreOffice processes., Convert PPTX to PDF using LibreOffice for highest quality. This functio, Validate if file is a valid PowerPoint file. Args: filepath: Pa, validate_pptx_file()

Community 13 - "Community 13"

Cohesion: 0.5 Nodes (3): migrate(), Migration: Add edit_on_player_enabled column to playlist_content table., Add edit_on_player_enabled column to playlist_content.

Community 14 - "Community 14"

Cohesion: 1.0 Nodes (1): Migrate player_user table to remove player_id and make user_code unique globally

Community 15 - "Community 15"

Cohesion: 1.0 Nodes (1): Add original_filename column to content table. This preserves the pristine uplo

Community 16 - "Community 16"

Cohesion: 1.0 Nodes (1): Add url column to content table for weblink support.

Community 17 - "Community 17"

Cohesion: 1.0 Nodes (1): Add deployment tracking columns to player table.

Community 18 - "Community 18"

Cohesion: 1.0 Nodes (1): Add email field to https_config table.

Community 19 - "Community 19"

Cohesion: 1.0 Nodes (1): Flask extensions initialization Centralized extension management for the applica

Community 20 - "Community 20"

Cohesion: 1.0 Nodes (1): Check if feedback indicates an error.

Community 21 - "Community 21"

Cohesion: 1.0 Nodes (1): Get age of feedback in seconds.

Community 22 - "Community 22"

Cohesion: 1.0 Nodes (1): Get most recent feedback for a player. Args: player

Community 23 - "Community 23"

Cohesion: 1.0 Nodes (1): Get the current HTTPS configuration. Returns: HTTPS

Community 24 - "Community 24"

Cohesion: 1.0 Nodes (1): Create or update HTTPS configuration. Args: https_e

Community 25 - "Community 25"

Cohesion: 1.0 Nodes (1): Check if user has admin role.

Community 26 - "Community 26"

Cohesion: 1.0 Nodes (1): Check if player is online (seen in last 5 minutes).

Community 27 - "Community 27"

Cohesion: 1.0 Nodes (1): Authenticate a player by hostname and password or quickconnect code.

Community 28 - "Community 28"

Cohesion: 1.0 Nodes (1): Create an info level log entry. Args: message: Log

Community 29 - "Community 29"

Cohesion: 1.0 Nodes (1): Create a warning level log entry. Args: message: Lo

Community 30 - "Community 30"

Cohesion: 1.0 Nodes (1): Create an error level log entry. Args: message: Log

Community 31 - "Community 31"

Cohesion: 1.0 Nodes (1): Get number of content items in this group.

Community 32 - "Community 32"

Cohesion: 1.0 Nodes (1): Get file size in megabytes.

Community 33 - "Community 33"

Cohesion: 1.0 Nodes (1): Get number of groups containing this content.

Community 34 - "Community 34"

Cohesion: 1.0 Nodes (1): Name of the original (unedited) file for display purposes.

Community 35 - "Community 35"

Cohesion: 1.0 Nodes (1): Path (relative to uploads/) where the original unedited file lives. Whe

Community 36 - "Community 36"

Cohesion: 1.0 Nodes (1): Path (relative to uploads/) of the current/latest version to display.

Community 37 - "Community 37"

Cohesion: 1.0 Nodes (1): Whether this content has been edited on a player.

Community 38 - "Community 38"

Cohesion: 1.0 Nodes (1): Display name of the original (unedited) file.

Community 39 - "Community 39"

Cohesion: 1.0 Nodes (1): uploads/-relative path of the pristine original file. After a player ed

Community 40 - "Community 40"

Cohesion: 1.0 Nodes (0):

Knowledge Gaps

  • 178 isolated node(s): Migrate player_user table to remove player_id and make user_code unique globally, Add original_filename column to content table. This preserves the pristine uplo, Add url column to content table for weblink support., Add deployment tracking columns to player table., Add email field to https_config table. (+173 more) These have ≤1 connection - possible missing edges or undocumented components.
  • Thin community Community 14 (2 nodes): migrate_player_user_global.py, Migrate player_user table to remove player_id and make user_code unique globally Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 15 (2 nodes): Add original_filename column to content table. This preserves the pristine uplo, add_original_filename_to_content.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 16 (2 nodes): Add url column to content table for weblink support., add_url_to_content.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 17 (2 nodes): Add deployment tracking columns to player table., add_deployment_fields_to_player.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 18 (2 nodes): Add email field to https_config table., add_email_to_https_config.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 19 (2 nodes): Flask extensions initialization Centralized extension management for the applica, extensions.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 20 (1 nodes): Check if feedback indicates an error. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 21 (1 nodes): Get age of feedback in seconds. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 22 (1 nodes): Get most recent feedback for a player. Args: player Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 23 (1 nodes): Get the current HTTPS configuration. Returns: HTTPS Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 24 (1 nodes): Create or update HTTPS configuration. Args: https_e Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 25 (1 nodes): Check if user has admin role. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 26 (1 nodes): Check if player is online (seen in last 5 minutes). Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 27 (1 nodes): Authenticate a player by hostname and password or quickconnect code. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 28 (1 nodes): Create an info level log entry. Args: message: Log Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 29 (1 nodes): Create a warning level log entry. Args: message: Lo Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 30 (1 nodes): Create an error level log entry. Args: message: Log Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 31 (1 nodes): Get number of content items in this group. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 32 (1 nodes): Get file size in megabytes. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 33 (1 nodes): Get number of groups containing this content. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 34 (1 nodes): Name of the original (unedited) file for display purposes. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 35 (1 nodes): Path (relative to uploads/) where the original unedited file lives. Whe Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 36 (1 nodes): Path (relative to uploads/) of the current/latest version to display. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 37 (1 nodes): Whether this content has been edited on a player. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 38 (1 nodes): Display name of the original (unedited) file. Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 39 (1 nodes): uploads/-relative path of the pristine original file. After a player ed Too small to be a meaningful cluster - may be noise or needs more connections extracted.
  • Thin community Community 40 (1 nodes): check_fix_player.py Too small to be a meaningful cluster - may be noise or needs more connections extracted.