openfree commited on
Commit
76c18cb
·
verified ·
1 Parent(s): 30a0ede

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +73 -63
app.py CHANGED
@@ -668,13 +668,13 @@ with gr.Blocks(css_paths=["app.css"], theme=theme) as demo:
668
  <p>설명을 입력하면 웹 기반 HTML5, JavaScript, CSS 게임을 생성합니다. 직관적인 인터페이스로 쉽게 게임을 만들고, 실시간으로 미리보기를 확인하세요.</p>
669
  </div>
670
 
671
- <!-- 배포 결과 박스 - 헤더 바로 아래 위치 -->
672
- <div id="deploy-banner" style="display:none;" class="deploy-banner">
673
  <div class="deploy-banner-content">
674
  <div class="deploy-banner-icon">🚀</div>
675
  <div class="deploy-banner-info">
676
- <div id="deploy-banner-title" class="deploy-banner-title">배포 상태</div>
677
- <div id="deploy-banner-message" class="deploy-banner-message"></div>
678
  </div>
679
  <div id="deploy-banner-url-container" class="deploy-banner-url-container" style="display:none;">
680
  <a id="deploy-banner-url" href="#" target="_blank" class="deploy-banner-url"></a>
@@ -826,8 +826,8 @@ with gr.Blocks(css_paths=["app.css"], theme=theme) as demo:
826
  });
827
  }
828
 
829
- // 배포 배너 표시 함수
830
- function showDeployBanner(type, title, message, url) {
831
  const banner = document.getElementById('deploy-banner');
832
  const bannerTitle = document.getElementById('deploy-banner-title');
833
  const bannerMessage = document.getElementById('deploy-banner-message');
@@ -845,8 +845,6 @@ with gr.Blocks(css_paths=["app.css"], theme=theme) as demo:
845
  } else {
846
  bannerUrlContainer.style.display = 'none';
847
  }
848
-
849
- banner.style.display = 'block';
850
  }
851
  </script>
852
  """)
@@ -1074,21 +1072,25 @@ with gr.Blocks(css_paths=["app.css"], theme=theme) as demo:
1074
  except Exception as e:
1075
  return {"status": "error", "message": f"배포 중 오류 발생: {str(e)}"}
1076
 
1077
- # handle_deploy
1078
  def handle_deploy(code, deploy_status):
1079
  if not code:
1080
- js_code = """
1081
- <script>
1082
- showDeployBanner('error', '⚠️ 배포 실패', '배포할 코드가 없습니다. 먼저 게임 코드를 생성해주세요.');
1083
- document.getElementById('deploy-result-box').innerHTML = `
1084
- <div class="deploy-error">
1085
- <div class="error-icon">⚠️</div>
1086
- <div class="error-message">배포할 코드가 없습니다.</div>
 
 
1087
  </div>
1088
- `;
 
 
1089
  </script>
1090
  """
1091
- return js_code, {
1092
  "is_deployed": False,
1093
  "status": "error",
1094
  "message": "배포할 코드가 없습니다.",
@@ -1096,40 +1098,47 @@ with gr.Blocks(css_paths=["app.css"], theme=theme) as demo:
1096
  }
1097
 
1098
  try:
1099
- loading_js = """
1100
- <script>
1101
- showDeployBanner('loading', '🔄 배포 진행 중', 'Vercel에 게임을 배포하고 있습니다. 잠시만 기다려주세요.');
1102
- document.getElementById('deploy-result-box').innerHTML = `
1103
- <div class="deploy-loading">
1104
- <div class="loading-spinner"></div>
1105
- <div class="loading-message">Vercel에 배포 중입니다...</div>
 
 
1106
  </div>
1107
- `;
 
 
1108
  </script>
1109
  """
1110
- yield loading_js, deploy_status
1111
 
1112
  clean_code = remove_code_block(code)
1113
  result = deploy_to_vercel(clean_code)
1114
 
1115
  if result.get("status") == "success":
1116
  url = result.get("url")
1117
- success_js = f"""
1118
- <script>
1119
- showDeployBanner('success', '✅ 배포 완료!', '게임이 성공적으로 Vercel에 배포되었습니다.', '{url}');
1120
- document.getElementById('deploy-result-box').innerHTML = `
1121
- <div class="deploy-success">
1122
- <div class="success-icon">✅</div>
1123
- <div class="success-message">배포 완료!</div>
1124
- <div class="url-box">
1125
- <a href="{url}" target="_blank">{url}</a>
1126
- <button class="copy-btn" onclick="navigator.clipboard.writeText('{url}')">복사</button>
 
1127
  </div>
1128
  </div>
1129
- `;
 
 
1130
  </script>
1131
  """
1132
- return success_js, {
1133
  "is_deployed": True,
1134
  "status": "success",
1135
  "url": url,
@@ -1137,18 +1146,21 @@ with gr.Blocks(css_paths=["app.css"], theme=theme) as demo:
1137
  }
1138
  else:
1139
  error_msg = result.get("message", "알 수 없는 오류")
1140
- error_js = f"""
1141
- <script>
1142
- showDeployBanner('error', '⚠️ 배포 실패', '{error_msg}');
1143
- document.getElementById('deploy-result-box').innerHTML = `
1144
- <div class="deploy-error">
1145
- <div class="error-icon">⚠️</div>
1146
- <div class="error-message">배포 실패: {error_msg}</div>
 
1147
  </div>
1148
- `;
 
 
1149
  </script>
1150
  """
1151
- return error_js, {
1152
  "is_deployed": False,
1153
  "status": "error",
1154
  "message": error_msg,
@@ -1157,18 +1169,21 @@ with gr.Blocks(css_paths=["app.css"], theme=theme) as demo:
1157
 
1158
  except Exception as e:
1159
  error_msg = str(e)
1160
- exception_js = f"""
1161
- <script>
1162
- showDeployBanner('error', '⚠️ 시스템 오류', '{error_msg}');
1163
- document.getElementById('deploy-result-box').innerHTML = `
1164
- <div class="deploy-error">
1165
- <div class="error-icon">⚠️</div>
1166
- <div class="error-message">시스템 오류: {error_msg}</div>
 
1167
  </div>
1168
- `;
 
 
1169
  </script>
1170
  """
1171
- return exception_js, {
1172
  "is_deployed": False,
1173
  "status": "error",
1174
  "message": error_msg,
@@ -1182,15 +1197,10 @@ with gr.Blocks(css_paths=["app.css"], theme=theme) as demo:
1182
  outputs=[deploy_result_container, deploy_status]
1183
  )
1184
 
1185
-
1186
- # ------------------------
1187
- # 8) 실제 실행
1188
- # ------------------------
1189
-
1190
  if __name__ == "__main__":
1191
  try:
1192
  demo_instance = Demo()
1193
  demo.queue(default_concurrency_limit=20).launch(ssr_mode=False)
1194
  except Exception as e:
1195
  print(f"Initialization error: {e}")
1196
- raise
 
668
  <p>설명을 입력하면 웹 기반 HTML5, JavaScript, CSS 게임을 생성합니다. 직관적인 인터페이스로 쉽게 게임을 만들고, 실시간으로 미리보기를 확인하세요.</p>
669
  </div>
670
 
671
+ <!-- 배포 결과 배너 - 헤더 바로 아래 위치, display:none 제거 -->
672
+ <div id="deploy-banner" class="deploy-banner">
673
  <div class="deploy-banner-content">
674
  <div class="deploy-banner-icon">🚀</div>
675
  <div class="deploy-banner-info">
676
+ <div id="deploy-banner-title" class="deploy-banner-title">배포 준비됨</div>
677
+ <div id="deploy-banner-message" class="deploy-banner-message">배포 버튼을 클릭하여 게임을 배포하세요.</div>
678
  </div>
679
  <div id="deploy-banner-url-container" class="deploy-banner-url-container" style="display:none;">
680
  <a id="deploy-banner-url" href="#" target="_blank" class="deploy-banner-url"></a>
 
826
  });
827
  }
828
 
829
+ // 배포 배너 업데이트 함수
830
+ function updateDeployBanner(type, title, message, url) {
831
  const banner = document.getElementById('deploy-banner');
832
  const bannerTitle = document.getElementById('deploy-banner-title');
833
  const bannerMessage = document.getElementById('deploy-banner-message');
 
845
  } else {
846
  bannerUrlContainer.style.display = 'none';
847
  }
 
 
848
  }
849
  </script>
850
  """)
 
1072
  except Exception as e:
1073
  return {"status": "error", "message": f"배포 중 오류 발생: {str(e)}"}
1074
 
1075
+ # handle_deploy 함수 수정 - JavaScript 스크립트 대신 HTML을 직접 반환하고 DOM 업데이트
1076
  def handle_deploy(code, deploy_status):
1077
  if not code:
1078
+ # HTML 직접 반환 - JavaScript 없이 결과 표시
1079
+ result_html = """
1080
+ <div class="deploy-section">
1081
+ <div class="deploy-header">📤 배포 결과</div>
1082
+ <div id="deploy-result-box" class="deploy-result-box">
1083
+ <div class="deploy-error">
1084
+ <div class="error-icon">⚠️</div>
1085
+ <div class="error-message">배포할 코드가 없습니다.</div>
1086
+ </div>
1087
  </div>
1088
+ </div>
1089
+ <script>
1090
+ updateDeployBanner('error', '⚠️ 배포 실패', '배포할 코드가 없습니다. 먼저 게임 코드를 생성해주세요.');
1091
  </script>
1092
  """
1093
+ return result_html, {
1094
  "is_deployed": False,
1095
  "status": "error",
1096
  "message": "배포할 코드가 없습니다.",
 
1098
  }
1099
 
1100
  try:
1101
+ # 로딩 상태 표시
1102
+ loading_html = """
1103
+ <div class="deploy-section">
1104
+ <div class="deploy-header">📤 배포 결과</div>
1105
+ <div id="deploy-result-box" class="deploy-result-box">
1106
+ <div class="deploy-loading">
1107
+ <div class="loading-spinner"></div>
1108
+ <div class="loading-message">Vercel에 배포 중입니다...</div>
1109
+ </div>
1110
  </div>
1111
+ </div>
1112
+ <script>
1113
+ updateDeployBanner('loading', '🔄 배포 진행 중', 'Vercel에 게임을 배포하고 있습니다. 잠시만 기다려주세요.');
1114
  </script>
1115
  """
1116
+ yield loading_html, deploy_status
1117
 
1118
  clean_code = remove_code_block(code)
1119
  result = deploy_to_vercel(clean_code)
1120
 
1121
  if result.get("status") == "success":
1122
  url = result.get("url")
1123
+ success_html = f"""
1124
+ <div class="deploy-section">
1125
+ <div class="deploy-header">📤 배포 결과</div>
1126
+ <div id="deploy-result-box" class="deploy-result-box">
1127
+ <div class="deploy-success">
1128
+ <div class="success-icon">✅</div>
1129
+ <div class="success-message">배포 완료!</div>
1130
+ <div class="url-box">
1131
+ <a href="{url}" target="_blank">{url}</a>
1132
+ <button class="copy-btn" onclick="navigator.clipboard.writeText('{url}')">복사</button>
1133
+ </div>
1134
  </div>
1135
  </div>
1136
+ </div>
1137
+ <script>
1138
+ updateDeployBanner('success', '✅ 배포 완료!', '게임이 성공적으로 Vercel에 배포되었습니다.', '{url}');
1139
  </script>
1140
  """
1141
+ return success_html, {
1142
  "is_deployed": True,
1143
  "status": "success",
1144
  "url": url,
 
1146
  }
1147
  else:
1148
  error_msg = result.get("message", "알 수 없는 오류")
1149
+ error_html = f"""
1150
+ <div class="deploy-section">
1151
+ <div class="deploy-header">📤 배포 결과</div>
1152
+ <div id="deploy-result-box" class="deploy-result-box">
1153
+ <div class="deploy-error">
1154
+ <div class="error-icon">⚠️</div>
1155
+ <div class="error-message">배포 실패: {error_msg}</div>
1156
+ </div>
1157
  </div>
1158
+ </div>
1159
+ <script>
1160
+ updateDeployBanner('error', '⚠️ 배포 실패', '{error_msg}');
1161
  </script>
1162
  """
1163
+ return error_html, {
1164
  "is_deployed": False,
1165
  "status": "error",
1166
  "message": error_msg,
 
1169
 
1170
  except Exception as e:
1171
  error_msg = str(e)
1172
+ exception_html = f"""
1173
+ <div class="deploy-section">
1174
+ <div class="deploy-header">📤 배포 결과</div>
1175
+ <div id="deploy-result-box" class="deploy-result-box">
1176
+ <div class="deploy-error">
1177
+ <div class="error-icon">⚠️</div>
1178
+ <div class="error-message">시스템 오류: {error_msg}</div>
1179
+ </div>
1180
  </div>
1181
+ </div>
1182
+ <script>
1183
+ updateDeployBanner('error', '⚠️ 시스템 오류', '{error_msg}');
1184
  </script>
1185
  """
1186
+ return exception_html, {
1187
  "is_deployed": False,
1188
  "status": "error",
1189
  "message": error_msg,
 
1197
  outputs=[deploy_result_container, deploy_status]
1198
  )
1199
 
 
 
 
 
 
1200
  if __name__ == "__main__":
1201
  try:
1202
  demo_instance = Demo()
1203
  demo.queue(default_concurrency_limit=20).launch(ssr_mode=False)
1204
  except Exception as e:
1205
  print(f"Initialization error: {e}")
1206
+ raise