Spaces:
Running
Running
File size: 6,788 Bytes
8334186 c7017cd 8334186 4285ee6 59f3816 8334186 8d03ab9 8334186 b92863b 8334186 256d47b 8334186 256d47b 8334186 5c00c6f 8334186 4285ee6 8334186 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
import os
import json
import requests
import time
from github import Github, GithubIntegration
import gradio as gr
app_id = '307916'
owner='duerrsimon'
repo_name='bioicons'
# with open('bot_key.pem','r') as cert_file:
# app_key = cert_file.read()
app_key = os.environ.get('GITHUB_TOKEN')
git_integration = GithubIntegration(
app_id,
app_key,
)
api = Github(
login_or_token=git_integration.get_access_token(
git_integration.get_repo_installation(owner, repo_name).id
).token
)
site = api.get_repo('duerrsimon/bioicons')
licenses = ['mit', 'cc-by-3.0', 'cc-0', 'cc-by-4.0', 'bsd', 'cc-by-sa-3.0', 'cc-by-sa-4.0']
categories = ["Machine_Learning", "Genetics", "Chemistry", "Scientific_graphs", "Cell_membrane", "Microbiology", "Oncology", "Molecular_modelling", "Intracellular_components", "Cell_types", "Cell_lines", "Plants_Algae", "Chemo-_and_Bioinformatics", "Cell_culture", "Tissues", "Computer_hardware", "Nucleic_acids", "General_items", "Safety_symbols", "Receptors_channels", "Human_physiology", "Animals", "Lab_apparatus", "Blood_Immunology", "Viruses", "Parasites"]
def create_branch(branch_name):
return site.create_git_ref(
'refs/heads/{branch_name}'.format(**locals()),
site.get_branch('main').commit.sha
)
def create_pull_request(branch_name, github_user):
if github_user!="":
message = f"submitted by: @{github_user}."
else:
message ="No github account provided."
return site.create_pull(
title="New icons submitted via web",
body= message,
base="main",
head=branch_name
)
def remove_special_chars(author):
author = author.replace(" ", "-")
author = author.replace(".", "-")
author = author.replace("(", "-")
author = author.replace(")", "-")
author = author.replace(":", "-")
author = author.replace(";", "-")
author = author.replace(",", "-")
author = author.replace("!", "-")
author = author.replace("?", "-")
author = author.replace("=", "-")
author = author.replace("+", "-")
author = author.replace("/", "-")
return author
def process_and_create_pull(icon_files,category, new_cateogry_check, new_category, license, creator_name, creator_url, copyright, github_user):
if copyright:
if new_cateogry_check:
category = remove_special_chars(new_category)
hash = '{0:010x}'.format(int(time.time() * 256))[:8]
branch_name = f"new-icons-{hash}"
create_branch(branch_name)
authors = requests.get("https://bioicons.com/icons/authors.json").json()
#remove whitespace and other special characters
author = remove_special_chars(creator_name)
if author not in authors.keys():
index_file = site.get_contents('static/icons/authors.json')
authors[author]=creator_url
updated_content = json.dumps(authors, indent=4)
site.update_file(
path='static/icons/authors.json',
message='Insert author',
content=updated_content,
sha=index_file.sha,
branch=branch_name
)
for file in icon_files:
#get file content from filesystem
with open(file.name, 'r') as fp:
file_content = fp.read()
filename = os.path.basename(file.name).replace(" ", "_")
site.create_file(
path=f'static/icons/{license}/{category}/{author}/{filename}',
message=f'create {filename}',
content=file_content,
branch=branch_name
)
pull = create_pull_request(branch_name, github_user)
return f"""<link href="https://cdnjs.cloudflare.com/ajax/libs/flowbite/1.6.4/flowbite.min.css" rel="stylesheet" />
<div class="flex p-4 mb-4 text-sm text-green-800 rounded-lg bg-green-200 " role="alert">
<span class="sr-only">Success</span>
<div>
<span class="font-medium">Thank you!</span> Your pull request for the submitted illustrations has been submitted on GitHub. You can track your submission on Github at <br> <a class="text-green-400 text-lg hover:underline" target="_blank" href="{pull.html_url}">{pull.html_url}</a>.
</div>
</div>
"""
else:
return """<link href="https://cdnjs.cloudflare.com/ajax/libs/flowbite/1.6.4/flowbite.min.css" rel="stylesheet" />
<div class="flex p-4 mb-4 text-sm text-red-800 rounded-lg bg-red-200 dark:bg-gray-800 dark:text-red-400" role="alert">
<svg aria-hidden="true" class="flex-shrink-0 inline w-5 h-5 mr-3" fill="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z" />
</svg>
<span class="sr-only">Info</span>
<div>
<span class="font-medium">Copyright error.</span> You need to certify that the illustrations have a suitable license and that copyright allows to share it on Bioicons.
</div>
</div>
"""
def shownewcategory(new_category, check):
if check:
return gr.Textbox.update(visible=True)
return gr.Textbox.update(visible=False)
with gr.Blocks() as demo:
with gr.Row():
creator_name = gr.Textbox(label="Creator")
creator_url = gr.Textbox(label="Creator URL", placeholder="Link to personal website,Twitter,Mastodon, GitHub")
github_user = gr.Textbox(label="Your GitHub Username", placeholder="GitHub username is used to communicate with you")
icon_files = gr.File(label="Icon files", file_types=["svg"], file_count="multiple")
with gr.Row():
with gr.Box():
category = gr.Dropdown(label="Category", choices=categories)
new_category_check = gr.Checkbox(info="New category?", label="Desired category not listed?")
new_category = gr.Textbox(label="New category", visible=False)
new_category_check.change(fn=shownewcategory, inputs=[new_category,new_category_check], outputs=new_category)
license = gr.Dropdown(label="License", choices=licenses)
copyright = gr.Checkbox(info="Copyright", label="I certify that I own the copyright of the submitted illustrations or have appropriately credited the original creator as required by the license of the illustration.")
btn = gr.Button(value="Submit illustrations")
output = gr.HTML(label="Output", value="")
btn.click(process_and_create_pull, inputs=[icon_files,category, new_category_check, new_category, license, creator_name, creator_url, copyright, github_user], outputs=output, api_name="bioicons-submit")
demo.launch()
|