Spaces:
Running
Running
Commit ·
58c6219
1
Parent(s): b4451e2
Make data loader to ge data from csc url or from an uplaoded file
Browse files- src/ai_dashboard/loader.py +25 -0
src/ai_dashboard/loader.py
CHANGED
|
@@ -2,6 +2,8 @@
|
|
| 2 |
|
| 3 |
from typing import Any
|
| 4 |
import logging
|
|
|
|
|
|
|
| 5 |
|
| 6 |
import pandas as pd
|
| 7 |
|
|
@@ -19,6 +21,9 @@ class DataLoader:
|
|
| 19 |
def load_csv(self) -> Any:
|
| 20 |
"""Load data from the specified path/url."""
|
| 21 |
logger.debug("Loading data from: %s", self.data_path)
|
|
|
|
|
|
|
|
|
|
| 22 |
try:
|
| 23 |
data = pd.read_csv(self.data_path)
|
| 24 |
return data
|
|
@@ -35,3 +40,23 @@ class DataLoader:
|
|
| 35 |
except Exception as err: # pylint: disable=W0718
|
| 36 |
logger.error("Failed to load data from %s: %s", self.data_path, err)
|
| 37 |
raise err
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
| 3 |
from typing import Any
|
| 4 |
import logging
|
| 5 |
+
import base64
|
| 6 |
+
import io
|
| 7 |
|
| 8 |
import pandas as pd
|
| 9 |
|
|
|
|
| 21 |
def load_csv(self) -> Any:
|
| 22 |
"""Load data from the specified path/url."""
|
| 23 |
logger.debug("Loading data from: %s", self.data_path)
|
| 24 |
+
if not self.data_path or self.data_path.strip() == "":
|
| 25 |
+
logger.info("No data_path provided. Waiting for user upload/URL...")
|
| 26 |
+
return None
|
| 27 |
try:
|
| 28 |
data = pd.read_csv(self.data_path)
|
| 29 |
return data
|
|
|
|
| 40 |
except Exception as err: # pylint: disable=W0718
|
| 41 |
logger.error("Failed to load data from %s: %s", self.data_path, err)
|
| 42 |
raise err
|
| 43 |
+
|
| 44 |
+
def load_from_url(self, url: str) -> Any:
|
| 45 |
+
"""Load CSV from a direct URL."""
|
| 46 |
+
try:
|
| 47 |
+
df = pd.read_csv(url)
|
| 48 |
+
return df
|
| 49 |
+
except Exception as err:
|
| 50 |
+
logger.error("Failed to load CSV from URL %s: %s", url, err)
|
| 51 |
+
raise err
|
| 52 |
+
|
| 53 |
+
def load_uploaded_csv(self, uploaded_contents: str) -> Any:
|
| 54 |
+
"""Load CSV from uploaded file contents (Dash Upload)."""
|
| 55 |
+
try:
|
| 56 |
+
_, content_string = uploaded_contents.split(",")
|
| 57 |
+
decoded = base64.b64decode(content_string)
|
| 58 |
+
df = pd.read_csv(io.StringIO(decoded.decode("utf-8")))
|
| 59 |
+
return df
|
| 60 |
+
except Exception as err:
|
| 61 |
+
logger.error("Failed to load uploaded CSV: %s", err)
|
| 62 |
+
raise err
|