import requests import html import markdown import yaml import os class Utils(): def __init__(self): self.base_url = "https://www.aicrowd.com/api/v1/challenges" self.api_key = os.getenv("AICROWD_API_KEY") self.headers = {'Authorization': 'Token token="' + self.api_key +'"', 'Content-Type': 'application/json'} with open("aicrowd.yaml", "r") as f: self.challenge = yaml.safe_load(f)['challenge_name'] with open("README.md", "r") as f: self.content = f.read() self.convert() def convert(self): self.content = markdown.markdown(self.content) self.content = self.content.replace("\"","'") self.content = self.content.replace("h1","h2") html.unescape(self.content) def create_challenge(self): payload = { "challenge": self.challenge.upper(), "status_cd": "draft", "tagline": "Assemble The Puzzle Pieces", "perpetual_challenge": False, "answer_file_s3_key": None, "slug": "cptcha-identify-the-captcha", "submission_license": "", "api_required": False, "media_on_leaderboard": False, "online_grading": True, "description": self.content, "evaluation": None, "rules": None, "prizes": None, "resources": None, "submission_instructions": None, "subissions_page": True, "license": "", "dataset_description": None, "show_leaderboard": True, "grader_identifier": "AIcrowd_GRADER_POOL", "online_submissions": True, "grader_logs": False, "require_registration": False, "grading_history": False, "post_challenge_submissions": True, "submissions_downloadable": False, "dataset_note": None, "discussions_visible": True, "latest_submission": False, "other_scores_fieldnames": "", "teams_allowed": True, "max_team_participants": 5, "team_freeze_seconds_before_end": 604800, "hidden_challenge": False, "team_freeze_time": None, "score_title": "", "score_secondary_title": "", "primary_sort_order_cd": "", "secondary_sort_order_cd": "", "challenges_organizers_attributes": [{"organizer_id": 9, "challenge_id": 1}], "category_challenges_attributes": [{"category_id": "8"}], } return requests.post(self.base_url, json=payload, headers=self.headers) def update_challenge(self): payload = {"description": self.content} request_url = f"{self.base_url}/{self.challenge}" response = requests.patch(request_url, json=payload, headers=self.headers) return response def update_or_create(self): response = self.update_challenge() if response.status_code == 404: response = self.create_challenge() return response if __name__ == "__main__": utils = Utils() print(utils.update_or_create().text)