83 lines
2.6 KiB
Python
83 lines
2.6 KiB
Python
"""Direct test of widget mounting and data loading."""
|
|
|
|
import asyncio
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# Add src to path
|
|
sys.path.insert(0, str(Path(__file__).parent / "src"))
|
|
|
|
from jellycleanarr.config import settings
|
|
from jellycleanarr.api.client import JellyfinClient
|
|
from jellycleanarr.ui.widgets.user_stats import UserStatsWidget
|
|
from jellycleanarr.ui.widgets.stats_table import StatsTable
|
|
|
|
|
|
async def test_widget():
|
|
"""Test widget creation and data loading."""
|
|
print("Creating Jellyfin client...")
|
|
client = JellyfinClient(settings.jellyfin_address, settings.jellyfin_api_key)
|
|
|
|
try:
|
|
await client.test_connection()
|
|
print("[OK] Connected to Jellyfin")
|
|
|
|
# Create the widget
|
|
print("\nCreating UserStatsWidget...")
|
|
widget = UserStatsWidget(client)
|
|
|
|
# Manually call compose to create child widgets
|
|
print("Calling compose()...")
|
|
widgets = list(widget.compose())
|
|
print(f"[OK] Compose created {len(widgets)} widgets")
|
|
|
|
for i, w in enumerate(widgets):
|
|
print(f" Widget {i}: {type(w).__name__}")
|
|
if hasattr(w, 'compose'):
|
|
children = list(w.compose())
|
|
for j, child in enumerate(children):
|
|
print(f" Child {j}: {type(child).__name__} - id={getattr(child, 'id', 'no-id')}")
|
|
|
|
# Try to manually create and populate a table
|
|
print("\nManually creating StatsTable...")
|
|
table = StatsTable(
|
|
"Test Table",
|
|
columns=[
|
|
("User", 20),
|
|
("Plays", 12),
|
|
("Duration", 15),
|
|
("Items", 13),
|
|
],
|
|
id="test-table",
|
|
)
|
|
|
|
# Simulate on_mount
|
|
print("Simulating table on_mount (adding columns)...")
|
|
for col_name, col_width in table._columns_config:
|
|
table.add_column(col_name, width=col_width)
|
|
table._columns_added = True
|
|
print(f"[OK] Table has {len(table.columns)} columns")
|
|
|
|
# Add test data
|
|
print("Adding test rows...")
|
|
test_rows = [
|
|
["HRiggs", "346", "3h 9m", "153"],
|
|
["TV", "204", "5d 1h 16m", "115"],
|
|
]
|
|
table.update_data(test_rows)
|
|
print(f"[OK] Table has {table.row_count} rows")
|
|
|
|
print("\n=== Widget structure looks OK ===")
|
|
print("The issue might be in the async mounting order or Textual rendering.")
|
|
|
|
except Exception as e:
|
|
print(f"\nERROR: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
finally:
|
|
await client.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(test_widget())
|