|
import pandas as pd |
|
import io |
|
import logging |
|
from typing import List |
|
from .schemas import KeyIssue |
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
def key_issues_to_dataframe(key_issues: List[KeyIssue]) -> pd.DataFrame: |
|
"""Converts a list of KeyIssue objects into a Pandas DataFrame.""" |
|
if not key_issues: |
|
return pd.DataFrame() |
|
|
|
data = [ki.model_dump() for ki in key_issues] |
|
df = pd.DataFrame(data) |
|
|
|
|
|
return df |
|
|
|
def dataframe_to_excel_bytes(df: pd.DataFrame) -> bytes: |
|
"""Converts a Pandas DataFrame to Excel format in memory (bytes).""" |
|
logger.info("Generating Excel file from DataFrame...") |
|
output = io.BytesIO() |
|
try: |
|
|
|
with pd.ExcelWriter(output, engine='openpyxl') as writer: |
|
df.to_excel(writer, index=False, sheet_name='Key Issues') |
|
excel_data = output.getvalue() |
|
logger.info("Excel file generated successfully.") |
|
return excel_data |
|
except Exception as e: |
|
logger.error(f"Failed to generate Excel file: {e}", exc_info=True) |
|
raise RuntimeError("Failed to create Excel output.") from e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|