schoology.py (2077B)
1 from config import ( 2 GROUP_ID, 3 SCHOOLOGY_DOMAIN, 4 SCHOOLOGY_API_KEY, 5 SCHOOLOGY_API_SECRET, 6 ) 7 from datetime import datetime 8 from models import Group, Event, Update, Discussion, Member 9 from schoolopy import Schoology, Auth 10 from database import database 11 import schedule 12 import time 13 from threading import Thread 14 15 16 auth = Auth( 17 SCHOOLOGY_API_KEY, 18 SCHOOLOGY_API_SECRET, 19 domain=SCHOOLOGY_DOMAIN, 20 ) 21 api = Schoology(auth) 22 api.limit = 64 23 24 group = Group(api.get_group(GROUP_ID).title, api.get_group(GROUP_ID).description) 25 group.projects = database.read() 26 27 28 def get_members(): 29 group.leaders = [] 30 group.members = [] 31 for enrolled in api.get_group_enrollments(GROUP_ID): 32 member = Member(enrolled.name_display) 33 if enrolled.admin == 1: 34 group.leaders.append(member) 35 else: 36 group.members.append(member) 37 38 39 def get_updates(): 40 group.updates = [] 41 for update in api.get_group_updates(GROUP_ID): 42 user = api.get_user(update.uid) 43 member = Member(user.name_display) 44 created = datetime.utcfromtimestamp(int(update.created)) 45 group.updates.append(Update(member, update.body, created)) 46 47 48 def get_events(): 49 group.events = [] 50 for event in api.get_group_events(GROUP_ID): 51 start = datetime.strptime(event.start, "%Y-%m-%d %H:%M:%S") 52 end = None 53 if event.has_end: 54 end = datetime.strptime(event.end, "%Y-%m-%d %H:%M:%S") 55 event = Event(event.id, event.title, event.description, start, end) 56 group.events.append(event) 57 58 59 def get_discussions(): 60 group.discussions = [] 61 for discussion in api.get_group_discussions(GROUP_ID): 62 group.discussions.append( 63 Discussion(discussion.id, discussion.title, discussion.body) 64 ) 65 66 67 def update(): 68 get_members() 69 get_updates() 70 get_events() 71 get_discussions() 72 73 74 update() 75 schedule.every().hour.do(update) 76 77 78 def run(): 79 while True: 80 schedule.run_pending() 81 time.sleep(1 * 60) 82 83 84 scheduler = Thread(target=run, daemon=True) 85 scheduler.start()