Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -81,22 +81,20 @@ def _drive_service_from_env():
|
|
| 81 |
|
| 82 |
|
| 83 |
def _normalize_folder_id(raw_id: str) -> Optional[str]:
|
| 84 |
-
"""Accept a bare ID or a full
|
| 85 |
if not raw_id:
|
| 86 |
return None
|
| 87 |
-
|
| 88 |
-
#
|
| 89 |
-
m = re.search(r"/folders/([A-Za-z0-9_-]+)",
|
| 90 |
if m:
|
| 91 |
-
|
| 92 |
-
#
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
#
|
| 97 |
-
if re.fullmatch(r"[A-Za-z0-9_-]{20,}",
|
| 98 |
-
return raw_id
|
| 99 |
-
return None
|
| 100 |
|
| 101 |
|
| 102 |
def _upload_to_drive(local_path: str, service, folder_id: Optional[str] = None,
|
|
@@ -154,7 +152,7 @@ def generate_and_upload(points_text: str, title: str,
|
|
| 154 |
f"\nDebug: {err}")
|
| 155 |
return local_png, msg
|
| 156 |
|
| 157 |
-
# 3) folder id(UI 覆蓋 Secret,並支援整個 URL
|
| 158 |
folder_id_env = os.environ.get("DRIVE_FOLDER_ID", "").strip()
|
| 159 |
raw_folder = (drive_folder_id_input or folder_id_env or "").strip()
|
| 160 |
folder_id = _normalize_folder_id(raw_folder)
|
|
@@ -306,19 +304,4 @@ with gr.Blocks(title="Map → Google Drive Uploader") as demo:
|
|
| 306 |
list_btn = gr.Button("📄 列出資料夾內容")
|
| 307 |
|
| 308 |
with gr.Column():
|
| 309 |
-
out_image =
|
| 310 |
-
out_msg = gr.Markdown(label="Result / Link")
|
| 311 |
-
cfg_out = gr.Markdown(label="Debug")
|
| 312 |
-
list_out = gr.Markdown(label="Folder Listing")
|
| 313 |
-
|
| 314 |
-
run_btn.click(
|
| 315 |
-
fn=generate_and_upload,
|
| 316 |
-
inputs=[points_in, title_in, min_lon_in, max_lon_in, min_lat_in, max_lat_in,
|
| 317 |
-
folder_id_in, make_public_in],
|
| 318 |
-
outputs=[out_image, out_msg],
|
| 319 |
-
)
|
| 320 |
-
cfg_btn.click(fn=check_config, inputs=None, outputs=cfg_out)
|
| 321 |
-
list_btn.click(fn=list_folder_contents, inputs=folder_id_in, outputs=list_out)
|
| 322 |
-
|
| 323 |
-
if __name__ == "__main__":
|
| 324 |
-
demo.launch()
|
|
|
|
| 81 |
|
| 82 |
|
| 83 |
def _normalize_folder_id(raw_id: str) -> Optional[str]:
|
| 84 |
+
"""Accept a bare ID or a full Drive URL; return clean folder ID."""
|
| 85 |
if not raw_id:
|
| 86 |
return None
|
| 87 |
+
raw = raw_id.strip()
|
| 88 |
+
# from full URL
|
| 89 |
+
m = re.search(r"/folders/([A-Za-z0-9_-]+)", raw)
|
| 90 |
if m:
|
| 91 |
+
raw = m.group(1)
|
| 92 |
+
# drop query string
|
| 93 |
+
raw = raw.split("?")[0]
|
| 94 |
+
# drop常見結尾符號(避免誤貼 '...-dRo.' 或全形符號)
|
| 95 |
+
raw = raw.rstrip(" .。;;,,』」)」)】]}")
|
| 96 |
+
# validate
|
| 97 |
+
return raw if re.fullmatch(r"[A-Za-z0-9_-]{20,}", raw) else None
|
|
|
|
|
|
|
| 98 |
|
| 99 |
|
| 100 |
def _upload_to_drive(local_path: str, service, folder_id: Optional[str] = None,
|
|
|
|
| 152 |
f"\nDebug: {err}")
|
| 153 |
return local_png, msg
|
| 154 |
|
| 155 |
+
# 3) folder id(UI 覆蓋 Secret,並支援整個 URL 自動萃取 + 去尾端符號)
|
| 156 |
folder_id_env = os.environ.get("DRIVE_FOLDER_ID", "").strip()
|
| 157 |
raw_folder = (drive_folder_id_input or folder_id_env or "").strip()
|
| 158 |
folder_id = _normalize_folder_id(raw_folder)
|
|
|
|
| 304 |
list_btn = gr.Button("📄 列出資料夾內容")
|
| 305 |
|
| 306 |
with gr.Column():
|
| 307 |
+
out_image =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|