afshin-dini commited on
Commit
58c6219
·
1 Parent(s): b4451e2

Make data loader to ge data from csc url or from an uplaoded file

Browse files
Files changed (1) hide show
  1. 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