Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
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
Beispiel #7
0
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)
Beispiel #8
0
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
Beispiel #9
0
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
Beispiel #10
0
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)
Beispiel #11
0
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)
Beispiel #12
0
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
Beispiel #13
0
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
Beispiel #14
0
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)
Beispiel #15
0
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
        }
Beispiel #16
0
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)
Beispiel #17
0
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
Beispiel #18
0
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
Beispiel #19
0
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
Beispiel #20
0
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)
Beispiel #21
0
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
Beispiel #22
0
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
Beispiel #23
0
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
Beispiel #24
0
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
Beispiel #25
0
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
Beispiel #26
0
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
Beispiel #27
0
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
Beispiel #28
0
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
Beispiel #29
0
    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'))
Beispiel #30
0
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
Beispiel #31
0
    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"))
Beispiel #32
0
def house_exists(house_name):
    house_list = House.query(House.name == house_name).fetch()
    if (house_list):
        return True
    else:
        return False