feat: upload certificate pdf to dataset (#4)
Browse files- feat: upload certificate pdf to dataset (c3e2b8d9f9647217794ff4debca4ce9f9f18ae48)
app.py
CHANGED
@@ -11,13 +11,14 @@ import os
|
|
11 |
import sys
|
12 |
import pandas as pd
|
13 |
import json
|
|
|
14 |
|
15 |
api = HfApi()
|
16 |
HF_TOKEN = os.environ.get("HF_TOKEN")
|
17 |
|
18 |
# Public dataset repo containing the pdfs of already certified users
|
19 |
-
DATASET_REPO_URL = "https://huggingface.co/datasets/
|
20 |
-
CERTIFIED_USERS_FILENAME = "
|
21 |
|
22 |
ORGANIZATION = "pseudolab"
|
23 |
|
@@ -101,10 +102,10 @@ def generate_certificate(certificate_template, first_name, last_name, hf_usernam
|
|
101 |
d.text((538, 419), name, fill=(87,87,87), anchor="mm", font=name_font)
|
102 |
|
103 |
# Debug line id
|
104 |
-
#d.line(((
|
105 |
|
106 |
# Date of certification
|
107 |
-
d.text((
|
108 |
|
109 |
pdf = im.convert('RGB')
|
110 |
pdf.save('certificate.pdf')
|
@@ -112,27 +113,65 @@ def generate_certificate(certificate_template, first_name, last_name, hf_usernam
|
|
112 |
return im, "./certificate.pdf"
|
113 |
|
114 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
def add_certified_user(hf_username, first_name, last_name, certificate_type):
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
repo.git_pull()
|
123 |
|
124 |
-
|
125 |
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
history =
|
130 |
-
|
131 |
-
|
132 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
|
134 |
-
|
135 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
|
137 |
|
138 |
def create_certificate(passed, certificate_type, hf_username, first_name, last_name):
|
@@ -149,7 +188,7 @@ def create_certificate(passed, certificate_type, hf_username, first_name, last_n
|
|
149 |
# Generate a certificate of
|
150 |
certificate, pdf = generate_certificate("./certificate-excellence.png", first_name, last_name, hf_username)
|
151 |
# Add this user to our database
|
152 |
-
|
153 |
# Add a message
|
154 |
message = """
|
155 |
Congratulations, you successfully completed the 2023 Hackathon π! \n
|
@@ -161,7 +200,7 @@ def create_certificate(passed, certificate_type, hf_username, first_name, last_n
|
|
161 |
# Generate a certificate of completion
|
162 |
certificate, pdf = generate_certificate("./certificate-completion.png", first_name, last_name, hf_username)
|
163 |
# Add this user to our database
|
164 |
-
|
165 |
# Add a message
|
166 |
message = """
|
167 |
Congratulations, you successfully completed the 2023 Hackathon π! \n
|
@@ -177,7 +216,7 @@ def create_certificate(passed, certificate_type, hf_username, first_name, last_n
|
|
177 |
# Add a message
|
178 |
message = """
|
179 |
You didn't pass the minimum of one contribution to get a certificate of completion.
|
180 |
-
For more information about the certification process, refer to the
|
181 |
If the results here differ from your contributions, make sure you moved your space to the pseudolab organization.
|
182 |
"""
|
183 |
return certificate, message, pdf
|
@@ -200,11 +239,11 @@ with gr.Blocks() as demo:
|
|
200 |
# Get your 2023 Hackathon Certificate π
|
201 |
The certification process is completely free:
|
202 |
- To get a *certificate of completion*: you need to **contribute to at least one model, dataset, or space**.
|
203 |
-
- To get a *certificate of excellence*: you need to **contribute to models, datasets, and spaces**.
|
204 |
|
205 |
For more information about the certification process [check the hackathon page on certification](https://pseudo-lab.github.io/huggingface-hackathon23/submit.html#certification).
|
206 |
|
207 |
-
Don't hesitate to share your certificate on Twitter (tag me [@wonhseo](https://twitter.com/wonhseo) and [@huggingface](https://twitter.com/huggingface)) and on LinkedIn.
|
208 |
""")
|
209 |
|
210 |
hf_username = gr.Textbox(placeholder="wseo", label="Your Hugging Face Username (case sensitive)")
|
|
|
11 |
import sys
|
12 |
import pandas as pd
|
13 |
import json
|
14 |
+
import shutil
|
15 |
|
16 |
api = HfApi()
|
17 |
HF_TOKEN = os.environ.get("HF_TOKEN")
|
18 |
|
19 |
# Public dataset repo containing the pdfs of already certified users
|
20 |
+
DATASET_REPO_URL = f"https://wseo:{HF_TOKEN}@huggingface.co/datasets/pseudolab/huggingface-krew-hackathon2023"
|
21 |
+
CERTIFIED_USERS_FILENAME = "certified.csv"
|
22 |
|
23 |
ORGANIZATION = "pseudolab"
|
24 |
|
|
|
102 |
d.text((538, 419), name, fill=(87,87,87), anchor="mm", font=name_font)
|
103 |
|
104 |
# Debug line id
|
105 |
+
#d.line(((815, 0), (815, 1400)), "gray")
|
106 |
|
107 |
# Date of certification
|
108 |
+
d.text((815, 327), f"HKH23-{hf_username}", fill=(117,117,117), font=username_font)
|
109 |
|
110 |
pdf = im.convert('RGB')
|
111 |
pdf.save('certificate.pdf')
|
|
|
113 |
return im, "./certificate.pdf"
|
114 |
|
115 |
|
116 |
+
def create_initial_csv(path):
|
117 |
+
"""Create an initial CSV file with headers if it doesn't exist."""
|
118 |
+
# Define the headers for our CSV file
|
119 |
+
headers = ['hf_username', 'first_name', 'last_name', 'certificate_type', 'datetime', 'pdf_path']
|
120 |
+
# Create a new DataFrame with no data and these headers
|
121 |
+
df = pd.DataFrame(columns=headers)
|
122 |
+
# Save the DataFrame to a CSV file
|
123 |
+
df.to_csv(path, index=False)
|
124 |
+
|
125 |
+
|
126 |
def add_certified_user(hf_username, first_name, last_name, certificate_type):
|
127 |
+
"""
|
128 |
+
Add the certified user to the dataset and include their certificate PDF.
|
129 |
+
"""
|
130 |
+
print("ADD CERTIFIED USER")
|
131 |
+
repo = Repository(local_dir="data", clone_from=DATASET_REPO_URL)
|
132 |
+
repo.git_pull()
|
|
|
133 |
|
134 |
+
csv_full_path = os.path.join("data", CERTIFIED_USERS_FILENAME)
|
135 |
|
136 |
+
if not os.path.isfile(csv_full_path):
|
137 |
+
create_initial_csv(csv_full_path)
|
138 |
+
|
139 |
+
history = pd.read_csv(csv_full_path)
|
140 |
+
|
141 |
+
# Check if this hf_username is already in our dataset:
|
142 |
+
check = history.loc[history['hf_username'] == hf_username]
|
143 |
+
if not check.empty:
|
144 |
+
history = history.drop(labels=check.index[0], axis=0)
|
145 |
+
|
146 |
+
pdfs_repo_path = os.path.join("data", "pdfs")
|
147 |
+
|
148 |
+
# Copy the PDF from its current location to the target directory in the repository
|
149 |
+
pdf_repo_filename = f"{hf_username}.pdf" # Create a specific name for the PDF file
|
150 |
+
pdf_repo_path_full = os.path.join(pdfs_repo_path, pdf_repo_filename)
|
151 |
+
|
152 |
+
# Create the pdfs directory if it doesn't exist
|
153 |
+
os.makedirs(pdfs_repo_path, exist_ok=True)
|
154 |
|
155 |
+
shutil.copy('./certificate.pdf', pdf_repo_path_full) # Copy the file
|
156 |
+
|
157 |
+
# Now, add a new entry to your CSV for this user and their PDF
|
158 |
+
new_row = pd.DataFrame({
|
159 |
+
'hf_username': hf_username,
|
160 |
+
'first_name': first_name,
|
161 |
+
'last_name': last_name,
|
162 |
+
'certificate_type': certificate_type,
|
163 |
+
'datetime': time.time(), # This captures the current time
|
164 |
+
'pdf_path': pdf_repo_path_full[5:] # This is the relative path to the PDF within the repo
|
165 |
+
}, index=[0])
|
166 |
+
|
167 |
+
history = pd.concat([new_row, history[:]]).reset_index(drop=True)
|
168 |
+
|
169 |
+
# Save the updated CSV
|
170 |
+
history.to_csv(os.path.join("data", CERTIFIED_USERS_FILENAME), index=False)
|
171 |
+
|
172 |
+
# Add the PDF and CSV changes to the repo and push
|
173 |
+
repo.git_add()
|
174 |
+
repo.push_to_hub(commit_message="Update certified users list and add PDF")
|
175 |
|
176 |
|
177 |
def create_certificate(passed, certificate_type, hf_username, first_name, last_name):
|
|
|
188 |
# Generate a certificate of
|
189 |
certificate, pdf = generate_certificate("./certificate-excellence.png", first_name, last_name, hf_username)
|
190 |
# Add this user to our database
|
191 |
+
add_certified_user(hf_username, first_name, last_name, certificate_type)
|
192 |
# Add a message
|
193 |
message = """
|
194 |
Congratulations, you successfully completed the 2023 Hackathon π! \n
|
|
|
200 |
# Generate a certificate of completion
|
201 |
certificate, pdf = generate_certificate("./certificate-completion.png", first_name, last_name, hf_username)
|
202 |
# Add this user to our database
|
203 |
+
add_certified_user(hf_username, first_name, last_name, certificate_type)
|
204 |
# Add a message
|
205 |
message = """
|
206 |
Congratulations, you successfully completed the 2023 Hackathon π! \n
|
|
|
216 |
# Add a message
|
217 |
message = """
|
218 |
You didn't pass the minimum of one contribution to get a certificate of completion.
|
219 |
+
For more information about the certification process, refer to the hackathon page.
|
220 |
If the results here differ from your contributions, make sure you moved your space to the pseudolab organization.
|
221 |
"""
|
222 |
return certificate, message, pdf
|
|
|
239 |
# Get your 2023 Hackathon Certificate π
|
240 |
The certification process is completely free:
|
241 |
- To get a *certificate of completion*: you need to **contribute to at least one model, dataset, or space**.
|
242 |
+
- To get a *certificate of excellence*: you need to **contribute to models, datasets, and spaces**. *(Yes, all three!)*
|
243 |
|
244 |
For more information about the certification process [check the hackathon page on certification](https://pseudo-lab.github.io/huggingface-hackathon23/submit.html#certification).
|
245 |
|
246 |
+
Don't hesitate to share your certificate on Twitter (tag me [@wonhseo](https://twitter.com/wonhseo), [@pseudolab](https://twitter.com/pseudolab), and [@huggingface](https://twitter.com/huggingface)) and on LinkedIn.
|
247 |
""")
|
248 |
|
249 |
hf_username = gr.Textbox(placeholder="wseo", label="Your Hugging Face Username (case sensitive)")
|