Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- src/streamlit_app.py +13 -10
src/streamlit_app.py
CHANGED
|
@@ -2,9 +2,10 @@ import streamlit as st
|
|
| 2 |
import pandas as pd
|
| 3 |
import json
|
| 4 |
from datetime import datetime
|
|
|
|
|
|
|
| 5 |
import io
|
| 6 |
import os
|
| 7 |
-
from zoneinfo import ZoneInfo # Importa ZoneInfo da zoneinfo
|
| 8 |
|
| 9 |
# --- Inizializzazione Session State ---
|
| 10 |
if 'file_uploader_key' not in st.session_state:
|
|
@@ -41,7 +42,9 @@ st.markdown(
|
|
| 41 |
)
|
| 42 |
|
| 43 |
# Definizione del fuso orario per l'Italia (Europe/Rome gestisce automaticamente DST)
|
| 44 |
-
|
|
|
|
|
|
|
| 45 |
|
| 46 |
# Funzione di conversione
|
| 47 |
def convert_json_to_excel_data(json_file_content: str):
|
|
@@ -61,13 +64,12 @@ def convert_json_to_excel_data(json_file_content: str):
|
|
| 61 |
order_date_formatted = None
|
| 62 |
if order_date_str:
|
| 63 |
try:
|
| 64 |
-
# 1. Parsa la stringa ISO
|
| 65 |
-
|
|
|
|
| 66 |
|
| 67 |
-
# 2.
|
| 68 |
-
|
| 69 |
-
# Se non ha informazioni sul fuso orario, assumi UTC (per casi senza 'Z')
|
| 70 |
-
dt_object_utc = dt_object_utc.replace(tzinfo=ZoneInfo("UTC"))
|
| 71 |
|
| 72 |
# 3. Converti al fuso orario italiano
|
| 73 |
dt_object_italy = dt_object_utc.astimezone(ITALY_TIMEZONE)
|
|
@@ -77,6 +79,9 @@ def convert_json_to_excel_data(json_file_content: str):
|
|
| 77 |
except ValueError:
|
| 78 |
order_date_formatted = order_date_str
|
| 79 |
st.warning(f"Attenzione: Impossibile parsare la data '{order_date_str}' per un file. Verrà usata la stringa originale.")
|
|
|
|
|
|
|
|
|
|
| 80 |
|
| 81 |
details = order_info.get('details', [])
|
| 82 |
|
|
@@ -87,10 +92,8 @@ def convert_json_to_excel_data(json_file_content: str):
|
|
| 87 |
if cancel_pos_oda_val is None or \
|
| 88 |
(isinstance(cancel_pos_oda_val, bool) and not cancel_pos_oda_val) or \
|
| 89 |
(isinstance(cancel_pos_oda_val, str) and cancel_pos_oda_val.lower() == 'false'):
|
| 90 |
-
# Se è None, False (booleano), o "false" (stringa)
|
| 91 |
positions_status_value = 'CREATED'
|
| 92 |
else:
|
| 93 |
-
# Altrimenti (True, "true", o qualsiasi altro valore non falso)
|
| 94 |
positions_status_value = 'CANCELLED'
|
| 95 |
|
| 96 |
row = {
|
|
|
|
| 2 |
import pandas as pd
|
| 3 |
import json
|
| 4 |
from datetime import datetime
|
| 5 |
+
# Rimuovi: from zoneinfo import ZoneInfo
|
| 6 |
+
import pytz # Importa pytz
|
| 7 |
import io
|
| 8 |
import os
|
|
|
|
| 9 |
|
| 10 |
# --- Inizializzazione Session State ---
|
| 11 |
if 'file_uploader_key' not in st.session_state:
|
|
|
|
| 42 |
)
|
| 43 |
|
| 44 |
# Definizione del fuso orario per l'Italia (Europe/Rome gestisce automaticamente DST)
|
| 45 |
+
# Utilizzo pytz
|
| 46 |
+
ITALY_TIMEZONE = pytz.timezone("Europe/Rome")
|
| 47 |
+
UTC_TIMEZONE = pytz.utc # Definiamo anche UTC per chiarezza
|
| 48 |
|
| 49 |
# Funzione di conversione
|
| 50 |
def convert_json_to_excel_data(json_file_content: str):
|
|
|
|
| 64 |
order_date_formatted = None
|
| 65 |
if order_date_str:
|
| 66 |
try:
|
| 67 |
+
# 1. Parsa la stringa ISO. fromisoformat è smart ma non sempre rende l'oggetto timezone-aware
|
| 68 |
+
# In questo caso, il '.000Z' finale indica UTC, quindi lo marchiamo come tale.
|
| 69 |
+
dt_object_naive = datetime.fromisoformat(order_date_str.replace('Z', '')) # Rimuovi 'Z' per parsing fromisoformat base
|
| 70 |
|
| 71 |
+
# 2. Rendi l'oggetto datetime consapevole del fuso orario UTC
|
| 72 |
+
dt_object_utc = UTC_TIMEZONE.localize(dt_object_naive)
|
|
|
|
|
|
|
| 73 |
|
| 74 |
# 3. Converti al fuso orario italiano
|
| 75 |
dt_object_italy = dt_object_utc.astimezone(ITALY_TIMEZONE)
|
|
|
|
| 79 |
except ValueError:
|
| 80 |
order_date_formatted = order_date_str
|
| 81 |
st.warning(f"Attenzione: Impossibile parsare la data '{order_date_str}' per un file. Verrà usata la stringa originale.")
|
| 82 |
+
except Exception as tz_error: # Cattura anche errori di fuso orario
|
| 83 |
+
st.warning(f"Attenzione: Errore nella conversione del fuso orario per '{order_date_str}': {tz_error}. Verrà usata la stringa originale.")
|
| 84 |
+
order_date_formatted = order_date_str
|
| 85 |
|
| 86 |
details = order_info.get('details', [])
|
| 87 |
|
|
|
|
| 92 |
if cancel_pos_oda_val is None or \
|
| 93 |
(isinstance(cancel_pos_oda_val, bool) and not cancel_pos_oda_val) or \
|
| 94 |
(isinstance(cancel_pos_oda_val, str) and cancel_pos_oda_val.lower() == 'false'):
|
|
|
|
| 95 |
positions_status_value = 'CREATED'
|
| 96 |
else:
|
|
|
|
| 97 |
positions_status_value = 'CANCELLED'
|
| 98 |
|
| 99 |
row = {
|