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