add category to top 20 files

This commit is contained in:
lelo 2025-05-29 09:22:30 +00:00
parent 1c9fe28fc1
commit 7c8fd33b69
4 changed files with 63 additions and 47 deletions

View File

@ -4,6 +4,7 @@ from datetime import datetime, timedelta, timezone
import geoip2.database import geoip2.database
from auth import require_secret from auth import require_secret
from collections import defaultdict from collections import defaultdict
import pandas as pd
import json import json
import os import os
import auth import auth
@ -389,6 +390,16 @@ def dashboard():
cursor = log_db.execute(query, params_for_filter) cursor = log_db.execute(query, params_for_filter)
rows = cursor.fetchall() rows = cursor.fetchall()
# Convert rows to a list of dictionaries and add category
rows = [
{
'rel_path': rel_path,
'access_count': access_count,
'category': hf.extract_structure_from_string(rel_path)[0]
}
for rel_path, access_count in rows
]
# 2. Distinct device trend # 2. Distinct device trend
# We'll group by hour if "today", by day if "7days"/"30days", by month if "365days" # We'll group by hour if "today", by day if "7days"/"30days", by month if "365days"
if session['timeframe'] == 'last24hours': if session['timeframe'] == 'last24hours':
@ -588,9 +599,6 @@ def dashboard():
location_data.sort(key=lambda x: x['count'], reverse=True) location_data.sort(key=lambda x: x['count'], reverse=True)
location_data = location_data[:20] location_data = location_data[:20]
# Convert the top-files rows to a list of dictionaries
rows = [dict(rel_path=r[0], access_count=r[1]) for r in rows]
title_short = app_config.get('TITLE_SHORT', 'Default Title') title_short = app_config.get('TITLE_SHORT', 'Default Title')
title_long = app_config.get('TITLE_LONG' , 'Default Title') title_long = app_config.get('TITLE_LONG' , 'Default Title')
@ -614,7 +622,6 @@ def dashboard():
def export_to_excel(): def export_to_excel():
"""Export search_db to an Excel file and store it locally.""" """Export search_db to an Excel file and store it locally."""
import pandas as pd
# Query all data from the search_db # Query all data from the search_db
query = "SELECT * FROM files" query = "SELECT * FROM files"

View File

@ -1,5 +1,6 @@
from datetime import datetime from datetime import datetime
import re import re
import os
def extract_date_from_string(string_with_date): def extract_date_from_string(string_with_date):
# grab X.Y.Z where X,Y,Z are 14 digits # grab X.Y.Z where X,Y,Z are 14 digits
@ -44,3 +45,48 @@ def extract_date_from_string(string_with_date):
return dt.strftime('%Y-%m-%d') return dt.strftime('%Y-%m-%d')
except ValueError: except ValueError:
return None return None
def extract_structure_from_string(input_string):
# extract category and titel from filename
filename_ext = os.path.splitext(input_string)[0]
left_side, right_side = filename_ext.split('-', 1) if '-' in filename_ext else (filename_ext, None)
try:
int(left_side.strip())
# first part is only a number
previous_right_side = right_side
left_side, right_side = previous_right_side.split('-', 1) if '-' in previous_right_side else (previous_right_side, None)
except:
# first part not a number
pass
if 'predig' in left_side.lower():
category = 'Predigt'
elif 'wort' in left_side.lower() or 'einladung' in left_side.lower():
category = 'Vorwort'
elif 'chor' in left_side.lower():
category = 'Chor'
elif 'orchester' in left_side.lower():
category = 'Orchester'
elif 'gruppenlied' in left_side.lower() or 'jugendlied' in left_side.lower():
category = 'Gruppenlied'
elif 'gemeinsam' in left_side.lower() or 'gesang' in left_side.lower() or 'lied' in left_side.lower():
category = 'Gemeinsamer Gesang'
elif 'gedicht' in left_side.lower():
category = 'Gedicht'
elif 'instrumental' in left_side.lower() or 'musikstück' in left_side.lower():
category = 'Instrumental'
else:
category = None
if right_side:
titel, name = right_side.split('-', 1) if '-' in right_side else (right_side, None)
if category == 'Predigt' or category == 'Vorwort' or category == 'Gedicht':
if not name: # kein Titel, nur Name
name = titel
titel = None
else:
titel = None
name = None
return category, titel, name

View File

@ -110,13 +110,13 @@ def updatefileindex():
# Retrieve the hit count for this file. # Retrieve the hit count for this file.
hit_count = get_hit_count(relative_path) hit_count = get_hit_count(relative_path)
category, titel, name, performance_date, site = None, None, None, None, None
# Determine the site # Determine the site
if foldername == 'Gottesdienste Speyer': if foldername == 'Gottesdienste Speyer':
site = 'Speyer' site = 'Speyer'
elif foldername == 'Gottesdienste Schwegenheim': elif foldername == 'Gottesdienste Schwegenheim':
site = 'Schwegenheim' site = 'Schwegenheim'
else:
site = None
# Check for a corresponding transcript file in a sibling "Transkription" folder. # Check for a corresponding transcript file in a sibling "Transkription" folder.
parent_dir = os.path.dirname(entry_path) parent_dir = os.path.dirname(entry_path)
@ -130,46 +130,7 @@ def updatefileindex():
except Exception: except Exception:
transcript = None transcript = None
# extract category and titel from filename category, titel, name = hf.extract_structure_from_string(entry.name)
filename_ext = os.path.splitext(entry.name)[0]
left_side, right_side = filename_ext.split('-', 1) if '-' in filename_ext else (filename_ext, None)
try:
int(left_side.strip())
# first part is only a number
previous_right_side = right_side
left_side, right_side = previous_right_side.split('-', 1) if '-' in previous_right_side else (previous_right_side, None)
except:
# first part not a number
pass
if 'predig' in left_side.lower():
category = 'Predigt'
elif 'wort' in left_side.lower() or 'einladung' in left_side.lower():
category = 'Vorwort'
elif 'chor' in left_side.lower():
category = 'Chor'
elif 'orchester' in left_side.lower():
category = 'Orchester'
elif 'gruppenlied' in left_side.lower() or 'jugendlied' in left_side.lower():
category = 'Gruppenlied'
elif 'gemeinsam' in left_side.lower() or 'gesang' in left_side.lower() or 'lied' in left_side.lower():
category = 'Gemeinsamer Gesang'
elif 'gedicht' in left_side.lower():
category = 'Gedicht'
elif 'instrumental' in left_side.lower() or 'musikstück' in left_side.lower():
category = 'Instrumental'
else:
category = None
if right_side:
titel, name = right_side.split('-', 1) if '-' in right_side else (right_side, None)
if category == 'Predigt' or category == 'Vorwort' or category == 'Gedicht':
if not name: # kein Titel, nur Name
name = titel
titel = None
else:
titel = None
name = None
performance_date = hf.extract_date_from_string(relative_path) performance_date = hf.extract_date_from_string(relative_path)

View File

@ -222,6 +222,7 @@
<tr> <tr>
<th>File Path</th> <th>File Path</th>
<th>Access Count</th> <th>Access Count</th>
<th>Kategorie</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -229,6 +230,7 @@
<tr> <tr>
<td>{{ row.rel_path }}</td> <td>{{ row.rel_path }}</td>
<td>{{ row.access_count }}</td> <td>{{ row.access_count }}</td>
<td>{{ row.category }}</td>
</tr> </tr>
{% else %} {% else %}
<tr> <tr>