Version 2.7.5: die Ordnerzeile sagt, was im Ordner liegt

This commit is contained in:
alientim committed 2026-09-12 00:30:34 +02:00
1 parent ad0195bab0
commit c639f4f507
7 files changed
+59 -6

No files matched your search

+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "tesm" name = "tesm"
version = "2.7.4" version = "2.7.5"
description = "TESM -- Verwaltung und Ueberwachung von PoE-Endgeraeten und Aruba-Switchen" description = "TESM -- Verwaltung und Ueberwachung von PoE-Endgeraeten und Aruba-Switchen"
requires-python = ">=3.11" requires-python = ">=3.11"
dependencies = [ dependencies = [
+26
View File
@@ -895,6 +895,31 @@ def _namen_aus_detail(detail: str) -> list[str]:
return [teil.strip() for teil in detail.split(marke, 1)[1].split(",") if teil.strip()] return [teil.strip() for teil in detail.split(marke, 1)[1].split(",") if teil.strip()]
#: Mehr als das zaehlt niemand mehr mit dem Auge -- und auf einer
#: Netzwerkfreigabe kostet jeder weitere Eintrag Zeit.
ZAEHLGRENZE = 500
def _inhalt_zaehlen(verzeichnis: Path) -> int:
"""Wie viele Eintraege liegen im Ordner? Begrenzt gezaehlt.
Gezeigt wird die Zahl an der Stelle, an der bei einer Datei die Groesse
steht -- dort stand bisher ein Gedankenstrich. Bei mehr als
``ZAEHLGRENZE`` bricht das Zaehlen ab: die Oberflaeche schreibt dann
"500+", und niemand wartet auf eine Freigabe mit 40.000 Dateien.
"""
anzahl = 0
try:
with os.scandir(verzeichnis) as eintraege:
for _ in eintraege:
anzahl += 1
if anzahl >= ZAEHLGRENZE:
break
except OSError:
return -1
return anzahl
def list_directory(mount: Mount, relative: str = "") -> dict[str, Any]: def list_directory(mount: Mount, relative: str = "") -> dict[str, Any]:
path = resolve_path(mount, relative) path = resolve_path(mount, relative)
if not path.is_dir(): if not path.is_dir():
@@ -916,6 +941,7 @@ def list_directory(mount: Mount, relative: str = "") -> dict[str, Any]:
), ),
} }
if entry.is_dir(): if entry.is_dir():
record["entries"] = _inhalt_zaehlen(entry)
directories.append(record) directories.append(record)
else: else:
record["previewable"] = entry.suffix.lower() in PREVIEW_MIME record["previewable"] = entry.suffix.lower() in PREVIEW_MIME
@@ -81,11 +81,24 @@
{% if current_user.has('fileshare.delete') %} {% if current_user.has('fileshare.delete') %}
<td><label class="check"><input type="checkbox" name="paths" value="{{ entry.relative }}"><span class="sr-only">auswählen</span></label></td> <td><label class="check"><input type="checkbox" name="paths" value="{{ entry.relative }}"><span class="sr-only">auswählen</span></label></td>
{% endif %} {% endif %}
<td> {# Symbol und Name in einer Zeile: der Zeilenumbruch dazwischen
liess den Ordner aussehen wie zwei halbe Zeilen. #}
<td class="file-cell">
{{ icon('folder', size=15) }} {{ icon('folder', size=15) }}
<a href="{{ url_for('fileshare.browse', share=token, path=entry.relative) }}">{{ entry.name }}</a> <a href="{{ url_for('fileshare.browse', share=token, path=entry.relative) }}">{{ entry.name }}</a>
</td> </td>
<td class="numeric faint">&ndash;</td> {# An der Stelle der Dateigrösse: wie viel liegt darin. #}
<td class="numeric faint fs-sm">
{%- if entry.entries is not defined or entry.entries < 0 -%}
&ndash;
{%- elif entry.entries >= 500 -%}
500+ Einträge
{%- elif entry.entries == 1 -%}
1 Eintrag
{%- else -%}
{{ entry.entries }} Einträge
{%- endif -%}
</td>
<td class="fs-sm">{{ entry.modified | dt }}</td> <td class="fs-sm">{{ entry.modified | dt }}</td>
<td class="actions"></td> <td class="actions"></td>
</tr> </tr>
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "tesm-core" name = "tesm-core"
version = "2.7.4" version = "2.7.5"
description = "Gemeinsames Anwendungsgeruest (Auth, RBAC, Navigation, Design-System, Migrationen) fuer TESM und TESM-Lizenzserver" description = "Gemeinsames Anwendungsgeruest (Auth, RBAC, Navigation, Design-System, Migrationen) fuer TESM und TESM-Lizenzserver"
requires-python = ">=3.11" requires-python = ">=3.11"
dependencies = [ dependencies = [
@@ -148,7 +148,7 @@ def create_base_app(
#: Wortmarke, ohne Zeile darunter; die Marke selbst zeigen beide #: Wortmarke, ohne Zeile darunter; die Marke selbst zeigen beide
#: Anwendungen. #: Anwendungen.
auth_tagline: str = "", auth_tagline: str = "",
app_version: str = "2.7.4", app_version: str = "2.7.5",
built_in_trusted_keys: tuple[str, ...] = (), built_in_trusted_keys: tuple[str, ...] = (),
enable_license: bool = True, enable_license: bool = True,
template_folder: str | None = None, template_folder: str | None = None,
@@ -1640,3 +1640,17 @@
display: none; display: none;
} }
} }
/* -- Dateiliste: Symbol und Name in einer Zeile -------------------------- */
/* Das Symbol ist ein Block-SVG; ohne diese Regel stand der Name darunter und
eine Ordnerzeile sah doppelt so hoch aus wie eine Dateizeile. */
.file-cell {
display: flex;
align-items: center;
gap: 6px;
}
.file-cell > svg {
flex: 0 0 auto;
}
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "tesm-licensing" name = "tesm-licensing"
version = "2.7.4" version = "2.7.5"
description = "Ed25519-basiertes Lizenz- und Aktivierungsprotokoll fuer TESM und TESM-Lizenzserver" description = "Ed25519-basiertes Lizenz- und Aktivierungsprotokoll fuer TESM und TESM-Lizenzserver"
requires-python = ">=3.11" requires-python = ">=3.11"
dependencies = ["cryptography>=42"] dependencies = ["cryptography>=42"]