kreemyyyy commited on
Commit
4814b0a
·
verified ·
1 Parent(s): 0d205a7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +12 -15
app.py CHANGED
@@ -7,12 +7,12 @@ import os
7
  # 7-Day Schedule Converter with explicit iteration and header fill and download support
8
 
9
  def convert_schedule(file_path, direction):
10
- # 1. Load Excel sheet without header to inspect real headers
11
  raw = pd.read_excel(file_path, header=None)
12
- header1 = raw.iloc[0,1:].astype(object)
13
- header2 = raw.iloc[1,1:].astype(object)
14
 
15
- # Decide which header row to use: prefer fully populated second row
16
  if header2.notna().all() and not header2.str.startswith('Unnamed').any():
17
  days = header2.tolist()
18
  data_start = 2
@@ -28,7 +28,7 @@ def convert_schedule(file_path, direction):
28
  days.append(last)
29
  data_start = 1
30
 
31
- # 2. Load actual data with resolved day columns
32
  df = pd.read_excel(
33
  file_path,
34
  header=data_start,
@@ -37,12 +37,13 @@ def convert_schedule(file_path, direction):
37
  )
38
  df.columns = [str(day) for day in days]
39
 
40
- # 3. Retain exactly the original day columns
41
  day_cols = list(df.columns)
42
 
43
  # 4. Build assignment mapping via explicit iteration
44
  assignments = {}
45
  if direction == 'A to B':
 
46
  for model in df.index.astype(str):
47
  for day in day_cols:
48
  cell = df.at[model, day]
@@ -52,7 +53,6 @@ def convert_schedule(file_path, direction):
52
  continue
53
  assignments.setdefault(texter, {d: [] for d in day_cols})
54
  assignments[texter][day].append(model)
55
- # Create result DataFrame
56
  index = sorted(assignments.keys())
57
  result = pd.DataFrame(index=index, columns=day_cols)
58
  for texter, days_map in assignments.items():
@@ -60,6 +60,7 @@ def convert_schedule(file_path, direction):
60
  models = days_map.get(day, [])
61
  result.at[texter, day] = ', '.join(models) if models else 'OFF'
62
  else:
 
63
  for texter in df.index.astype(str):
64
  for day in day_cols:
65
  cell = df.at[texter, day]
@@ -76,24 +77,20 @@ def convert_schedule(file_path, direction):
76
  texters = days_map.get(day, [])
77
  result.at[model, day] = ', '.join(texters) if texters else 'OFF'
78
 
79
- # 5. Cleanup axis names
80
  result.index.name = None
81
  result.columns.name = None
82
 
83
- # 6. Save to Excel for download, ensuring directory exists
84
  os.makedirs('/mnt/data', exist_ok=True)
85
  output_filename = f"converted_{uuid.uuid4().hex}.xlsx"
86
- # Save under /mnt/data so HF Spaces can serve it
87
- output_path = os.path.join('/mnt/data', output_filename)
88
- output_filename = f"converted_{uuid.uuid4().hex}.xlsx"
89
- # Save under /mnt/data so HF Spaces can serve it
90
  output_path = os.path.join('/mnt/data', output_filename)
91
  result.to_excel(output_path, engine='openpyxl', index=True)
92
 
93
- # Return both DataFrame and download path
94
  return result, output_path
95
 
96
  # Gradio UI definition
 
97
  def main():
98
  iface = gr.Interface(
99
  fn=convert_schedule,
@@ -115,4 +112,4 @@ def main():
115
  iface.launch(server_name='0.0.0.0', server_port=7860)
116
 
117
  if __name__ == '__main__':
118
- main()
 
7
  # 7-Day Schedule Converter with explicit iteration and header fill and download support
8
 
9
  def convert_schedule(file_path, direction):
10
+ # 1. Load raw header rows to determine day labels
11
  raw = pd.read_excel(file_path, header=None)
12
+ header1 = raw.iloc[0, 1:].astype(object)
13
+ header2 = raw.iloc[1, 1:].astype(object)
14
 
15
+ # Decide which header row to use: prefer second if fully populated
16
  if header2.notna().all() and not header2.str.startswith('Unnamed').any():
17
  days = header2.tolist()
18
  data_start = 2
 
28
  days.append(last)
29
  data_start = 1
30
 
31
+ # 2. Load actual data using resolved day columns
32
  df = pd.read_excel(
33
  file_path,
34
  header=data_start,
 
37
  )
38
  df.columns = [str(day) for day in days]
39
 
40
+ # 3. Retain original day column order
41
  day_cols = list(df.columns)
42
 
43
  # 4. Build assignment mapping via explicit iteration
44
  assignments = {}
45
  if direction == 'A to B':
46
+ # Models in rows → Texters as rows
47
  for model in df.index.astype(str):
48
  for day in day_cols:
49
  cell = df.at[model, day]
 
53
  continue
54
  assignments.setdefault(texter, {d: [] for d in day_cols})
55
  assignments[texter][day].append(model)
 
56
  index = sorted(assignments.keys())
57
  result = pd.DataFrame(index=index, columns=day_cols)
58
  for texter, days_map in assignments.items():
 
60
  models = days_map.get(day, [])
61
  result.at[texter, day] = ', '.join(models) if models else 'OFF'
62
  else:
63
+ # Texters in rows → Models as rows
64
  for texter in df.index.astype(str):
65
  for day in day_cols:
66
  cell = df.at[texter, day]
 
77
  texters = days_map.get(day, [])
78
  result.at[model, day] = ', '.join(texters) if texters else 'OFF'
79
 
80
+ # 5. Cleanup axis names
81
  result.index.name = None
82
  result.columns.name = None
83
 
84
+ # 6. Save to Excel for download
85
  os.makedirs('/mnt/data', exist_ok=True)
86
  output_filename = f"converted_{uuid.uuid4().hex}.xlsx"
 
 
 
 
87
  output_path = os.path.join('/mnt/data', output_filename)
88
  result.to_excel(output_path, engine='openpyxl', index=True)
89
 
 
90
  return result, output_path
91
 
92
  # Gradio UI definition
93
+
94
  def main():
95
  iface = gr.Interface(
96
  fn=convert_schedule,
 
112
  iface.launch(server_name='0.0.0.0', server_port=7860)
113
 
114
  if __name__ == '__main__':
115
+ main()