z230
This commit is contained in:
142
82 Reporting.py
Normal file
142
82 Reporting.py
Normal file
@@ -0,0 +1,142 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import pymysql
|
||||
import pandas as pd
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
# ==============================
|
||||
# ⚙ KONFIGURACE
|
||||
# ==============================
|
||||
|
||||
DB_CONFIG = {
|
||||
"host": "192.168.1.76",
|
||||
"port": 3307,
|
||||
"user": "root",
|
||||
"password": "Vlado9674+",
|
||||
"database": "torrents",
|
||||
"charset": "utf8mb4"
|
||||
}
|
||||
|
||||
# Cílová složka (používám 'r' před řetězcem pro bezpečné načtení zpětných lomítek)
|
||||
OUTPUT_DIR = r"u:\Dropbox\!!!Days\Downloads Z230"
|
||||
FILE_NAME = f"Torrents_Report_{datetime.now():%Y-%m-%d}.xlsx"
|
||||
|
||||
# Spojíme cestu a název souboru
|
||||
FULL_OUTPUT_PATH = os.path.join(OUTPUT_DIR, FILE_NAME)
|
||||
|
||||
|
||||
# ==============================
|
||||
# 📥 NAČTENÍ DAT
|
||||
# ==============================
|
||||
|
||||
def get_data():
|
||||
print("⏳ Připojuji se k databázi a stahuji data...")
|
||||
conn = pymysql.connect(**DB_CONFIG)
|
||||
|
||||
query = """
|
||||
SELECT
|
||||
id,
|
||||
category,
|
||||
title_visible AS 'Název',
|
||||
size_pretty AS 'Velikost',
|
||||
added_datetime AS 'Přidáno do DB',
|
||||
qb_state AS 'Stav v QB',
|
||||
qb_progress AS 'Postup (%)',
|
||||
qb_savepath AS 'Cesta na disku',
|
||||
qb_completed_datetime AS 'Dokončeno',
|
||||
qb_last_update AS 'Poslední info'
|
||||
FROM torrents
|
||||
ORDER BY added_datetime DESC
|
||||
"""
|
||||
|
||||
df = pd.read_sql(query, conn)
|
||||
conn.close()
|
||||
return df
|
||||
|
||||
|
||||
# ==============================
|
||||
# 🎨 FORMÁTOVÁNÍ EXCELU
|
||||
# ==============================
|
||||
|
||||
def auto_adjust_columns(writer, df, sheet_name):
|
||||
"""Pomocná funkce pro automatické rozšíření sloupců v Excelu"""
|
||||
worksheet = writer.sheets[sheet_name]
|
||||
for idx, col in enumerate(df.columns):
|
||||
max_len = max(
|
||||
df[col].astype(str).map(len).max(),
|
||||
len(str(col))
|
||||
) + 2
|
||||
if max_len > 60: max_len = 60
|
||||
worksheet.set_column(idx, idx, max_len)
|
||||
|
||||
|
||||
# ==============================
|
||||
# 🚀 HLAVNÍ LOGIKA
|
||||
# ==============================
|
||||
|
||||
def generate_report():
|
||||
# 1. Kontrola cesty
|
||||
if not os.path.exists(OUTPUT_DIR):
|
||||
print(f"❌ CHYBA: Cílová složka neexistuje nebo není dostupná: {OUTPUT_DIR}")
|
||||
print(" Ujistěte se, že je disk U: připojen.")
|
||||
return
|
||||
|
||||
df = get_data()
|
||||
print(f"✅ Načteno {len(df)} záznamů.")
|
||||
|
||||
# 2. ÚPRAVA DAT
|
||||
df['Postup (%)'] = df['Postup (%)'].fillna(0).astype(float).round(1)
|
||||
|
||||
# 3. FILTROVÁNÍ
|
||||
# A) DEAD
|
||||
mask_dead = df['Stav v QB'].isin(['dead', 'invalid'])
|
||||
df_dead = df[mask_dead].copy()
|
||||
|
||||
# B) COMPLETED
|
||||
mask_completed = (
|
||||
(df['Stav v QB'] == 'completed') |
|
||||
(df['Postup (%)'] >= 100)
|
||||
) & (~mask_dead)
|
||||
df_completed = df[mask_completed].copy()
|
||||
|
||||
# C) ACTIVE / QUEUED
|
||||
mask_active = (~mask_dead) & (~mask_completed)
|
||||
df_active = df[mask_active].copy()
|
||||
|
||||
# Seřazení
|
||||
df_active = df_active.sort_values(by=['Postup (%)', 'Přidáno do DB'], ascending=[False, False])
|
||||
df_completed = df_completed.sort_values(by='Dokončeno', ascending=False)
|
||||
df_dead = df_dead.sort_values(by='Poslední info', ascending=False)
|
||||
|
||||
# 4. EXPORT
|
||||
print(f"💾 Ukládám do: {FULL_OUTPUT_PATH}")
|
||||
|
||||
try:
|
||||
with pd.ExcelWriter(FULL_OUTPUT_PATH, engine='xlsxwriter') as writer:
|
||||
|
||||
# List 1: Ke stažení
|
||||
df_active.to_excel(writer, sheet_name='Ke stažení', index=False)
|
||||
auto_adjust_columns(writer, df_active, 'Ke stažení')
|
||||
|
||||
# List 2: Hotovo
|
||||
df_completed.to_excel(writer, sheet_name='Hotovo', index=False)
|
||||
auto_adjust_columns(writer, df_completed, 'Hotovo')
|
||||
|
||||
# List 3: Dead
|
||||
df_dead.to_excel(writer, sheet_name='Smazáno (Dead)', index=False)
|
||||
auto_adjust_columns(writer, df_dead, 'Smazáno (Dead)')
|
||||
|
||||
# List 4: Vše
|
||||
df.to_excel(writer, sheet_name='Kompletní DB', index=False)
|
||||
auto_adjust_columns(writer, df, 'Kompletní DB')
|
||||
|
||||
print("🎉 Hotovo! Report byl úspěšně uložen na disk U:")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Chyba při zápisu souboru: {e}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
generate_report()
|
||||
Reference in New Issue
Block a user