import json import requests import easyappointments import datetime """ Features This is the main API for executing functions with data """ def check_date(date): try: datetime.datetime.strptime(date,"%Y-%m-%d") except: return False return True class API: def __init__(self): with open('data.json') as f: self.data = json.loads(f.read()) self.appointments = easyappointments.easyappointments(self.data['easyappointments']['token'], self.data['easyappointments']['url']) # Only refresh data when a change is made def update_data(self): with open('data.json','r') as f: self.data = json.loads(f.read()) def save(self): with open('data.json','w') as f: f.write(json.dumps(self.data,indent=2)) return True return False #Administration def is_admin(self,handle): #return bool pass def add_admin(self,handle): #return bool if self.is_admin(handle): return True else: self.data["admins"].append(handle) self.save() return True def remove_admin(self,handle): #return bool if self.is_admin(handle): i = self.data["admins"].index(handle) self.data["admins"].pop(i) self.save() return True else: return True #state management def get_user_state(self,handle): if handle not in self.data["users"]: self.data["users"][handle]={"state":[]} self.save() return self.data["users"][handle]["state"] def update_user_state(self,handle,state): self.update_data() current_state = self.get_user_state(handle) self.data["users"][handle]["state"] = state self.save() return True #FAQ def get_faq_string(self): faq = self.data["faq"] return faq["header"] + "".join( ["\n# "+q["question"]+"\n"+q["answer"]+"\n" for q in faq["questions"]] ) + "\n"+ faq["footer"] def get_faq_questions(self): self.update_data() questions = self.data['faq']['questions'] response = "" index = 0 for question in questions: response += f"[{index}]:{question['question']}\n" index += 1 return response def get_header(self): self.update_data() return self.data["faq"]["header"] def set_header(self,hdr): self.update_data() #return bool self.data["faq"]["header"] = hdr self.save() return True def get_questions(self): self.update_data() #return questions return self.data["faq"]["questions"] def add_question(self,qtn): self.update_data() #return bool self.data["faq"]["questions"].append(qtn) self.save() return True def remove_question(self,qtn_i): self.update_data() #return bool self.data["faq"]["questions"].pop(qtn_i) self.save() return True def update_question(self,qtn_i,qtn): self.update_data() #return bool self.data["faq"]["questions"][qtn_i]=qtn return True #Meetings def get_meetings(self,mxid): self.update_data() self.appointments.list_upcoming_appointments(mxid) pass def list_services(self): msg = "## Services:" for i in self.appointments.services: service = self.appointments.services[i] name = service['name'] price = str(service['price']) + service['currency'] description = service['description'] msg += f"\n### {name}\nPrice:{price}\n{description}" return msg def select_service(self): msg = "## Choose a service:" counter = 1 for i in self.appointments.services: service = self.appointments.services[i] name = f"#{counter}: " + service['name'] price = str(service['price']) + service['currency'] description = service['description'] msg += f"\n### {name}\nPrice:{price}\n{description}" counter += 1 msg += "\nPlease enter the # of the service:" return msg def select_provider(self): msg = "## Choose a provider:" counter = 1 for p in self.appointments.get_providers(): name = p['firstName']+" "+p['lastName'] msg += f"\n* #{counter}: {name}" counter += 1 msg += "\nPlease enter the # of the provider" return msg def select_times(self,service,provider,date): data = self.appointments.get_availabilities(service, provider, date) if data == False or check_date(date) == False: return False msg = f"## Choose a time for {date}:\n" counter = 1 for t in data: msg += f"{counter}){t} " counter +=1 msg +="\nPlease enter the # of time" return msg def request_meeting(self): self.update_data() pass def accept_meeting(self): self.update_data() pass if __name__ == '__main__': api = API() print("Storage loaded.\n",api.data['username'])