soiz1 commited on
Commit
319b167
·
verified ·
1 Parent(s): d1f5c23

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -12
app.py CHANGED
@@ -29,29 +29,54 @@ def extract_from_readme(readme_path):
29
  def clone_and_create(profile: gr.OAuthProfile, token: gr.OAuthToken,
30
  repo_url, repo_type, private, space_sdk, sdk_version,
31
  space_id, space_title, space_description):
32
- folder = str(uuid.uuid4()) # Create a unique folder name
33
- Repo.clone_from(repo_url, folder) # Clone the git repository
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
  hf_api = HfApi(token=token.token)
36
 
37
- # Auto-fill info by extracting from README.md
38
  title_from_readme, desc_from_readme, port_from_readme = extract_from_readme(os.path.join(folder, "README.md"))
39
 
40
- # Determine final repo ID, title, description
41
  final_id = slugify(space_id) if space_id else slugify(repo_url.split("/")[-1])
42
  final_title = space_title or title_from_readme or final_id
43
  final_description = space_description or desc_from_readme
44
  repo_visibility = "private" if private else "public"
45
 
46
- # Create Hugging Face repo
47
  if repo_type == "space":
48
- hf_api.create_repo(
49
  repo_id=f"{profile.username}/{final_id}",
50
  repo_type="space",
51
  space_sdk=space_sdk,
52
- space_sdk_version=sdk_version if sdk_version else None,
53
- private=private
54
  )
 
 
 
 
 
55
  else:
56
  hf_api.create_repo(
57
  repo_id=f"{profile.username}/{final_id}",
@@ -59,7 +84,7 @@ def clone_and_create(profile: gr.OAuthProfile, token: gr.OAuthToken,
59
  private=private
60
  )
61
 
62
- # Append missing info to README.md if needed
63
  readme_path = os.path.join(folder, "README.md")
64
  with open(readme_path, "a", encoding="utf-8") as f:
65
  if space_title and not title_from_readme:
@@ -69,15 +94,17 @@ def clone_and_create(profile: gr.OAuthProfile, token: gr.OAuthToken,
69
  if port_from_readme:
70
  f.write(f"\napp_port: {port_from_readme}")
71
 
72
- # Upload folder contents to the Hugging Face repo
73
  hf_api.upload_folder(
74
  folder_path=folder,
75
  repo_id=f"{profile.username}/{final_id}",
76
  repo_type=repo_type
77
  )
78
 
79
- # Return URL to created Hugging Face repo
80
- return f"https://huggingface.co/{repo_type + 's' if repo_type != 'model' else 'models'}/{profile.username}/{final_id}"
 
 
81
 
82
  # Define Gradio UI
83
  with gr.Blocks() as demo:
 
29
  def clone_and_create(profile: gr.OAuthProfile, token: gr.OAuthToken,
30
  repo_url, repo_type, private, space_sdk, sdk_version,
31
  space_id, space_title, space_description):
32
+
33
+ # README.md から情報を抽出する関数
34
+ def extract_from_readme(readme_path):
35
+ import re
36
+ title = None
37
+ description = None
38
+ port = None
39
+ if os.path.exists(readme_path):
40
+ with open(readme_path, encoding="utf-8") as f:
41
+ content = f.read()
42
+ match_title = re.search(r'title:\s*(.*)', content)
43
+ match_desc = re.search(r'short_description:\s*(.*)', content)
44
+ match_port = re.search(r'app_port:\s*(\d+)', content)
45
+ if match_title:
46
+ title = match_title.group(1).strip()
47
+ if match_desc:
48
+ description = match_desc.group(1).strip()
49
+ if match_port:
50
+ port = match_port.group(1).strip()
51
+ return title, description, port
52
+
53
+ folder = str(uuid.uuid4()) # ユニークなフォルダ名作成
54
+ Repo.clone_from(repo_url, folder) # Gitリポジトリをクローン
55
 
56
  hf_api = HfApi(token=token.token)
57
 
58
+ # README.md から自動情報取得
59
  title_from_readme, desc_from_readme, port_from_readme = extract_from_readme(os.path.join(folder, "README.md"))
60
 
61
+ # 最終的なID, タイトル, 説明を決定
62
  final_id = slugify(space_id) if space_id else slugify(repo_url.split("/")[-1])
63
  final_title = space_title or title_from_readme or final_id
64
  final_description = space_description or desc_from_readme
65
  repo_visibility = "private" if private else "public"
66
 
67
+ # リポジトリ作成時の引数設定
68
  if repo_type == "space":
69
+ create_kwargs = dict(
70
  repo_id=f"{profile.username}/{final_id}",
71
  repo_type="space",
72
  space_sdk=space_sdk,
73
+ private=private,
 
74
  )
75
+ # gradio, streamlit の場合のみバージョンを渡す
76
+ if space_sdk in ["gradio", "streamlit"] and sdk_version:
77
+ create_kwargs["space_sdk_version"] = sdk_version
78
+
79
+ hf_api.create_repo(**create_kwargs)
80
  else:
81
  hf_api.create_repo(
82
  repo_id=f"{profile.username}/{final_id}",
 
84
  private=private
85
  )
86
 
87
+ # README.md に不足情報を追記
88
  readme_path = os.path.join(folder, "README.md")
89
  with open(readme_path, "a", encoding="utf-8") as f:
90
  if space_title and not title_from_readme:
 
94
  if port_from_readme:
95
  f.write(f"\napp_port: {port_from_readme}")
96
 
97
+ # フォルダ内容をHugging Faceにアップロード
98
  hf_api.upload_folder(
99
  folder_path=folder,
100
  repo_id=f"{profile.username}/{final_id}",
101
  repo_type=repo_type
102
  )
103
 
104
+ # 作成したURLを返す
105
+ base_url = "spaces" if repo_type == "space" else (repo_type + "s" if repo_type != "model" else "models")
106
+ return f"https://huggingface.co/{base_url}/{profile.username}/{final_id}"
107
+
108
 
109
  # Define Gradio UI
110
  with gr.Blocks() as demo: