def add_post(house_name, user_id, content): pigeon_key = ndb.Key(Pigeon, user_id) house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key post_list = Post.query(Post.pigeon_key == pigeon_key, Post.house_key == house_key).fetch() if post_list: length = len(post_list) post = Post(pigeon_key=pigeon_key, house_key=house_key, content=content, number=length + 1, date_str='') post.put() date2str = str(post.date) str_list = date2str.split('.') post.date_str = str_list[0] post.put() return else: post = Post(pigeon_key=pigeon_key, house_key=house_key, content=content, number=1, date_str='') post.put() date2str = str(post.date) str_list = date2str.split('.') post.date_str = str_list[0] post.put() return
def remove_all_sub(house_name): house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key sub_list = Subscription.query(Subscription.house_key == house_key).fetch() for sub in sub_list: sub.key.delete() return
def approve_pull_request(house_name, user_id, date): pigeon_key = ndb.Key(Pigeon, user_id) house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key pr_list = PullRequest.query(PullRequest.pigeon_key == pigeon_key, PullRequest.house_key == house_key, PullRequest.date_str == date).fetch() if pr_list: pr = pr_list[0] if pr.mode == 'add': add_card(pr.house_key.get().name, pr.new_key, pr.new_value) pr.key.delete() return elif pr.mode == 'remove': remove_card(pr.house_key.get().name, pr.card_key.get().card_key) pr.key.delete() return elif pr.mode == 'key': edit_card_key(pr.house_key.get().name, pr.card_key.get().card_key, pr.new_key) pr.key.delete() return elif pr.mode == 'content': edit_card_content(pr.house_key.get().name, pr.card_key.get().card_key, pr.new_value) pr.key.delete() return else: return
def add_card(house_name, key, value): house_list = House.query(House.name == house_name).fetch() if house_list: card = Card(card_key=key, value=value) house = house_list[0] card.key = ndb.Key(Card, key, parent=house.key) card.put() return
def edit_card_content(house_name, card_key_str, new_card_content): house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key card_key = ndb.Key(Card, card_key_str, parent=house_key) card = card_key.get() card.value = new_card_content card.put() return
def card_exists(house_name, card_key_str): house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key card_key = ndb.Key(Card, card_key_str, parent=house_key) card = card_key.get() if card: return True else: return False
def get_category(category): house_list = House.query(House.category == category).fetch() return map( lambda s: { "house_name": s.name, "cover_url": s.cover_url, "num_of_subed": s.num_of_subed, "view": s.view }, house_list)
def edit_card_key(house_name, card_key_str, new_card_key): house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key card_key = ndb.Key(Card, card_key_str, parent=house_key) card = card_key.get() value = card.value remove_card(house_name, card_key_str) add_card(house_name, new_card_key, value) return
def is_subscribed(house_name, pigeon_id): pigeon_key = ndb.Key(Pigeon, pigeon_id) house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key sub_list = Subscription.query(Subscription.pigeon_key == pigeon_key, Subscription.house_key == house_key).fetch() if sub_list: return True else: return False
def get_all_house(): house_list = House.query().fetch() return map( lambda s: { "house_name": s.name, "cover_url": s.cover_url, "category": s.category, "view": s.view, "num_of_subed": s.num_of_subed }, house_list)
def get_self_house(pigeon_id): house_list = House.query(ancestor=ndb.Key(Pigeon, pigeon_id)).fetch() return map( lambda s: { "house_name": s.name, "cover_url": s.cover_url, "category": s.category, "view": s.view, "num_of_subed": s.num_of_subed }, house_list)
def get_num_per_day(user_id, house_name): pigeon_key = ndb.Key(Pigeon, user_id) house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key sub_list = Subscription.query(Subscription.pigeon_key == pigeon_key, Subscription.house_key == house_key).fetch() if sub_list: return sub_list[0].num_per_day else: return
def get_single_house_2(house_name): house_list = House.query(House.name == house_name).fetch() if house_list: house = house_list[0] house.view = house.view + 1 house.put() card_list = Card.query(ancestor=house.key).fetch() return map(lambda s: {str(s.card_key): str(s.value)}, card_list) else: return
def get_trending_view(): house_list = House.query().fetch() sorted_list = sorted(house_list, key=lambda h: h.view, reverse=True) return map( lambda s: { "house_name": s.name, "cover_url": s.cover_url, "category": s.category, "view": s.view }, sorted_list)
def get_single_house_info(house_name): house_list = House.query(House.name == house_name).fetch() if house_list: s = house_list[0] return { "house_name": s.name, "cover_url": s.cover_url, "category": s.category, "view": s.view, "num_of_subed": s.num_of_subed }
def get_trending_subscription(): house_list = House.query().fetch() sorted_list = sorted(house_list, key=lambda h: h.num_of_subed, reverse=True) return map( lambda s: { "house_name": s.name, "cover_url": s.cover_url, "category": s.category, "num_of_subed": s.num_of_subed }, sorted_list)
def set_schedule(user_id, house_name, num_per_day): pigeon_key = ndb.Key(Pigeon, user_id) house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key sub_list = Subscription.query(Subscription.pigeon_key == pigeon_key, Subscription.house_key == house_key).fetch() if sub_list: sub_list[0].num_per_day = num_per_day sub_list[0].put() return else: return
def get_learn_factor(user_id, house_name, card_key_str): pigeon_key = ndb.Key(Pigeon, user_id) house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key card_key = ndb.Key(Card, card_key_str, parent=house_key) progress_list = Progress.query(Progress.pigeon_key == pigeon_key, Progress.card_key == card_key).fetch() if progress_list: return progress_list[0].learn_factor else: _initailize_progress(pigeon_key, card_key) return 1
def resolve_issue(house_name, user_id, date): pigeon_key = ndb.Key(Pigeon, user_id) house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key issue_list = Issue.query(Issue.pigeon_key == pigeon_key, Issue.house_key == house_key, Issue.date_str == date).fetch() if issue_list: issue = issue_list[0] issue.key.delete() return else: return
def get_all_post(house_name): house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key post_list = Post.query(Post.house_key == house_key).fetch() post_list = sorted(post_list, key=lambda p: p.number) return map( lambda p: { "user_id": p.pigeon_key.get().pigeon_id, "house_name": p.house_key.get().name, "number": p.number, "date": p.date_str, "content": p.content, "avatar": p.pigeon_key.get().avatar }, post_list)
def show_all_issues(house_name): house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key issue_list = Issue.query(Issue.house_key == house_key).order( Issue.date).fetch() if issue_list: return map( lambda s: { "user_id": s.pigeon_key.get().pigeon_id, "content": s.comment, "date": s.date_str }, issue_list) else: return
def set_learn_factor(user_id, house_name, card_key_str, learn_factor): pigeon_key = ndb.Key(Pigeon, user_id) house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key card_key = ndb.Key(Card, card_key_str, parent=house_key) progress_list = Progress.query(Progress.pigeon_key == pigeon_key, Progress.card_key == card_key).fetch() if progress_list: progress = progress_list[0] progress.learn_factor = learn_factor progress.put() return else: return
def reject_pull_request(house_name, user_id, date): pigeon_key = ndb.Key(Pigeon, user_id) house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key pr_list = PullRequest.query(PullRequest.pigeon_key == pigeon_key, PullRequest.house_key == house_key, PullRequest.date_str == date).fetch() if pr_list: pr = pr_list[0] pr.key.delete() return else: return
def create_subscription(pigeon_id, house_name): pigeon_key = ndb.Key(Pigeon, pigeon_id) house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key subscription = Subscription(pigeon_key=pigeon_key, house_key=house_key, num_per_day=0) subscription.put() card_list = Card.query(ancestor=house_key).fetch() for card in card_list: _initailize_progress(pigeon_key, card.key) house = house_list[0] house.num_of_subed = house.num_of_subed + 1 house.put() return
def show_all_pull_request(house_name): house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key pr_list = PullRequest.query(PullRequest.house_key == house_key).order( PullRequest.date).fetch() if pr_list: #print pr_list return map( lambda s: { "user_id": s.pigeon_key.get().pigeon_id, "mode": s.mode, "newkey": s.new_key, "newcontent": s.new_value, "date": s.date_str, "card_key": s.card_key.id() }, pr_list) else: return
def delete_subscription(pigeon_id, house_name): pigeon_key = ndb.Key(Pigeon, pigeon_id) house_list = House.query(House.name == house_name).fetch() house = house_list[0] house.num_of_subed = house.num_of_subed - 1 house.put() house_key = house.key sublist = Subscription.query(Subscription.pigeon_key == pigeon_key, Subscription.house_key == house_key).fetch() if sublist: sub = sublist[0] sub.key.delete() card_list = _get_all_cards(house_name) for card in card_list: _delete_progress(pigeon_key, card.key) return else: return
def add_issue(user_id, house_name, card_key_str, content): pigeon_key = ndb.Key(Pigeon, user_id) house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key card_key = ndb.Key(Card, card_key_str, parent=house_key) issue = Issue(pigeon_key=pigeon_key, house_key=house_key, card_key=card_key, comment=content, date_str='') issue.put() date2str = str(issue.date) str_list = date2str.split('.') issue.date_str = str_list[0] issue.put() return
def send_pull_request(user_id, house_name, mode, card_key_str, new_key, new_value): pigeon_key = ndb.Key(Pigeon, user_id) house_list = House.query(House.name == house_name).fetch() house_key = house_list[0].key card_key = ndb.Key(Card, card_key_str, parent=house_key) pr = PullRequest(pigeon_key=pigeon_key, house_key=house_key, card_key=card_key, new_key=new_key, new_value=new_value, mode=mode, date_str='') pr.put() date2str = str(pr.date) str_list = date2str.split('.') pr.date_str = str_list[0] pr.put() return
def get(self): # CLEAR All query = Department.query() entries =query.fetch() entry_keys =[entry.key for entry in entries] ndb.delete_multi(entry_keys) query = House.query() entries =query.fetch() entry_keys =[entry.key for entry in entries] ndb.delete_multi(entry_keys) query = Class.query() entries =query.fetch() entry_keys =[entry.key for entry in entries] ndb.delete_multi(entry_keys) query = Student.query() entries =query.fetch() entry_keys =[entry.key for entry in entries] ndb.delete_multi(entry_keys) user = users.get_current_user() if user and users.is_current_user_admin(): # Create houses houses = ['Gryffindor', 'Hufflepuff', 'Ravenclaw', 'Slytherin'] for house in houses: House(house_name=house).put() # Create departments deps = [ {'code': 'CS', 'name': 'Computer Science'}, {'code': 'BA', 'name': 'Business Administration'}, {'code': 'PHY', 'name': 'Physics'}, {'code': 'MAT', 'name': 'Mathematics'}, {'code': 'DRA', 'name': 'Drama'}, {'code': 'ECE', 'name': 'Electrical Engineering'}, ] for dep in deps: Department(id = dep['code'], dept_name = dep['name']).put() # Create 40 classes for department, update depts classes_count = 40 for dept in deps: department_key = ndb.Key('Department', dept['code']) department_obj = department_key.get() for i in range(classes_count): class_full_name = "%s - Class %d" % (dept['name'] ,i) class_key = Class(id='%s-%d'%(dept['code'], i), class_full_name = class_full_name, department = department_key).put() department_obj.classes.append(class_key) department_obj.put() # Create students students_count = 1000 random.seed() all_classes = Class.query().fetch() all_houses = House.query().fetch() for i in range(students_count): house = random.choice(all_houses) house_key = house.key student_name = 'Student %d'% i student_year = random.randint(1,4) current_classes = random.sample(all_classes, 5) current_classes_keys = [el.key for el in current_classes] all_classes_keys = [el.key for el in all_classes] leftovers = set(all_classes_keys) - set(current_classes_keys) completed_classes_keys = random.sample(leftovers, 6*(student_year-1)) student_key = Student( student_name = student_name, student_year = student_year, current_classes = current_classes_keys, completed_classes = completed_classes_keys, house = house_key).put() house.students.append(student_key) for el in current_classes: el.students_enrolled.append(student_key) # save new status of houses and current classes for house in all_houses: house.put() for current_class in all_classes: current_class.put() elif user and not users.is_current_user_admin(): self.redirect(users.create_logout_url('/create_entries')) else: self.redirect(users.create_login_url('/create_entries'))
def _get_all_cards(house_name): house_list = House.query(House.name == house_name).fetch() if house_list: house = house_list[0] return Card.query(ancestor=house.key).fetch() return
def get(self): # CLEAR All query = Department.query() entries = query.fetch() entry_keys = [entry.key for entry in entries] ndb.delete_multi(entry_keys) query = House.query() entries = query.fetch() entry_keys = [entry.key for entry in entries] ndb.delete_multi(entry_keys) query = Class.query() entries = query.fetch() entry_keys = [entry.key for entry in entries] ndb.delete_multi(entry_keys) query = Student.query() entries = query.fetch() entry_keys = [entry.key for entry in entries] ndb.delete_multi(entry_keys) user = users.get_current_user() if user and users.is_current_user_admin(): # Create houses houses = ["Gryffindor", "Hufflepuff", "Ravenclaw", "Slytherin"] for house in houses: House(house_name=house).put() # Create departments deps = [ {"code": "CS", "name": "Computer Science"}, {"code": "BA", "name": "Business Administration"}, {"code": "PHY", "name": "Physics"}, {"code": "MAT", "name": "Mathematics"}, {"code": "DRA", "name": "Drama"}, {"code": "ECE", "name": "Electrical Engineering"}, ] for dep in deps: Department(id=dep["code"], dept_name=dep["name"]).put() # Create 40 classes for department, update depts classes_count = 40 for dept in deps: department_key = ndb.Key("Department", dept["code"]) department_obj = department_key.get() for i in range(classes_count): class_full_name = "%s - Class %d" % (dept["name"], i) department = department_key class_key = Class(id="%s-%d" % (dept["code"], i), class_full_name=class_full_name).put() department_obj.classes.append(class_key) department_obj.put() # Create students students_count = 1000 random.seed() all_classes = Class.query().fetch() all_houses = House.query().fetch() for i in range(students_count): house = random.choice(all_houses) house_key = house.key student_name = "Student %d" % i student_year = random.randint(1, 4) current_classes = random.sample(all_classes, 5) current_classes_keys = [el.key for el in current_classes] all_classes_keys = [el.key for el in all_classes] leftovers = set(all_classes_keys) - set(current_classes_keys) completed_classes_keys = random.sample(leftovers, 6 * (student_year - 1)) student_key = Student( student_name=student_name, student_year=student_year, current_classes=current_classes_keys, completed_classes=completed_classes_keys, house=house_key, ).put() house.students.append(student_key) for el in current_classes: el.students_enrolled.append(student_key) # save new status of houses and current classes for house in all_houses: house.put() for current_class in all_classes: current_class.put() elif user and not users.is_current_user_admin(): self.redirect(users.create_logout_url("/create_entries")) else: self.redirect(users.create_login_url("/create_entries"))
def house_exists(house_name): house_list = House.query(House.name == house_name).fetch() if (house_list): return True else: return False