pquintero commited on
Commit
e0516fa
·
1 Parent(s): 84fdef4

validate username

Browse files
Files changed (2) hide show
  1. submit.py +3 -1
  2. validation.py +56 -0
submit.py CHANGED
@@ -8,7 +8,7 @@ from datetime import datetime
8
  import uuid
9
 
10
  from constants import API, SUBMISSIONS_REPO
11
- from validation import validate_csv_file
12
 
13
 
14
  def make_submission(
@@ -19,6 +19,8 @@ def make_submission(
19
  if user_state is None:
20
  raise gr.Error("You must submit your username to submit a file.")
21
 
 
 
22
  if submitted_file is None:
23
  raise gr.Error("Please upload a CSV file before submitting.")
24
 
 
8
  import uuid
9
 
10
  from constants import API, SUBMISSIONS_REPO
11
+ from validation import validate_csv_file, validate_username
12
 
13
 
14
  def make_submission(
 
19
  if user_state is None:
20
  raise gr.Error("You must submit your username to submit a file.")
21
 
22
+ validate_username(user_state)
23
+
24
  if submitted_file is None:
25
  raise gr.Error("Please upload a CSV file before submitting.")
26
 
validation.py CHANGED
@@ -1,6 +1,7 @@
1
  import pandas as pd
2
  import io
3
  import gradio as gr
 
4
  from constants import (
5
  REQUIRED_COLUMNS,
6
  ASSAY_LIST,
@@ -10,6 +11,61 @@ from constants import (
10
  )
11
 
12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  def validate_csv_can_be_read(file_content: str) -> pd.DataFrame:
14
  """
15
  Validate that the CSV file can be read and parsed.
 
1
  import pandas as pd
2
  import io
3
  import gradio as gr
4
+ import requests
5
  from constants import (
6
  REQUIRED_COLUMNS,
7
  ASSAY_LIST,
 
11
  )
12
 
13
 
14
+ def validate_username(username: str) -> bool:
15
+ """
16
+ Validate that the username corresponds to a real Hugging Face profile.
17
+ Just check https://huggingface.co/username exists.
18
+
19
+ Parameters
20
+ ----------
21
+ username: str
22
+ The username to validate
23
+
24
+ Returns
25
+ -------
26
+ bool
27
+ True if the username is valid and profile exists, False otherwise
28
+
29
+ Raises
30
+ ------
31
+ gr.Error: If username is invalid or profile doesn't exist
32
+ """
33
+ username = username.strip()
34
+
35
+ # Check if the Hugging Face profile exists
36
+ profile_url = f"https://huggingface.co/{username}"
37
+
38
+ try:
39
+ response = requests.get(profile_url, timeout=10)
40
+
41
+ if response.status_code == 200:
42
+ # Additional check: make sure it's actually a user profile page
43
+ # and not some other page that happens to exist
44
+ if "profile" in response.text.lower() or "models" in response.text.lower():
45
+ return True
46
+ else:
47
+ raise gr.Error(
48
+ f"❌ '{username}' does not appear to be a valid Hugging Face user profile"
49
+ )
50
+ elif response.status_code == 404:
51
+ raise gr.Error(
52
+ f"❌ Hugging Face user '{username}' does not exist. Please check the username or create an account at https://huggingface.co"
53
+ )
54
+ else:
55
+ raise gr.Error(
56
+ f"❌ Unable to verify username '{username}'. Please try again later."
57
+ )
58
+
59
+ except requests.exceptions.Timeout:
60
+ raise gr.Error("❌ Timeout while checking username. Please try again.")
61
+ except requests.exceptions.ConnectionError:
62
+ raise gr.Error(
63
+ "❌ Unable to connect to Hugging Face. Please check your internet connection."
64
+ )
65
+ except requests.exceptions.RequestException as e:
66
+ raise gr.Error(f"❌ Error validating username: {str(e)}")
67
+
68
+
69
  def validate_csv_can_be_read(file_content: str) -> pd.DataFrame:
70
  """
71
  Validate that the CSV file can be read and parsed.