Exemplo n.º 1
0
def load_data():
    module = request.get_json()

    if 'group' in module:
        try:
            gt = 'group'
            lb = module['label']
        except (KeyError, ValueError):
            h = hash(frozenset(int(i) for i in module['group']))
            gt = 'hgrp'
            lb = '%05d' % (h % 100000)

        rd.sadd('{}s'.format(gt), lb)
        rd.sadd('%s:%s' % (gt, lb), *module['group'])

        return json.jsonify({
            'status': 'ok',
        })

    if not Module.query.get(module['code']):
        db.session.add(Module(**module))

    sections = []

    for cn, section in module['sections'].items():
        try:
            cn = int(cn)
        except ValueError:
            continue

        sct = Section.query.get(cn)

        if not sct:
            db.session.add(Section(**{
                'class_no': cn,
                'name': section['name'],
                'mod_code': module['code']
            }))
            db.session.commit()
        else:
            sct.last_updated = datetime.now()
            Lesson.query.filter_by(class_no=cn).delete()

        sections.append(section['name'])

        for i in section['schedule']:
            d = get_int(i['d'])
            dts = tuple(datetime(*(d+get_int(i[l]))) for l in 'se')
            db.session.add(Lesson(**{
                'dts': dts,
                'class_no': cn,
                'location': i['l'],
                'component': i['c'],
            }))

        db.session.commit()

    return json.jsonify({
        'status': 'ok',
    })
Exemplo n.º 2
0
def _cache_user_posts(id: IntLike):
    key = Keys.user_statuses.format(id)
    sql = "select id from statuses where user_id=:UID order by id"
    result = db.engine.execute(text(sql), UID=id)
    statuses_ids = [row[0] for row in result]
    statuses_ids.append(-1)
    rd.sadd(key, *statuses_ids)
    rd.expire(key, Keys.user_statuses_expire)
Exemplo n.º 3
0
def _cache_liked_users(id: IntLike):
    key = KEYS.status_liked_users.format(id)
    sql = 'select user_id from status_likes where status_id=:SID'
    result = db.engine.execute(text(sql), SID=id)
    liked_user_ids = [row[0] for row in result]
    liked_user_ids.append(-1)
    rd.sadd(key, *liked_user_ids)
    rd.expire(key, KEYS.status_liked_users_expire)
Exemplo n.º 4
0
def _cache_account_subscribers(id: IntLike):
    key = KEYS.official_account_subscribers.format(id)
    sql = """
    select users_id from subscriptions
    where official_account_id=:OID
    """
    result = db.engine.execute(text(sql), OID=id)
    subscriber_ids = [row[0] for row in result]
    subscriber_ids.append(-1)
    rd.sadd(key, *subscriber_ids)
    rd.expire(key, KEYS.official_account_subscribers_expire)
Exemplo n.º 5
0
def _cache_followers(id: IntLike):
    key = Keys.user_followers.format(id)
    sql = "select follower_id from user_follows where followed_id=:UID"
    result = db.engine.execute(text(sql), UID=id)
    follower_ids = [row[0] for row in result]
    """
    As redis does not support empty set, but we
    still need to know whether an empty set is cached,
    so we need a placeholder element(use self's id is good)
    """
    follower_ids.append(id)
    rd.sadd(key, *follower_ids)
    rd.expire(key, Keys.user_followers_expire)
Exemplo n.º 6
0
def load_data():

    module = request.get_json()
    if not Module.query.get(module['code']):
        db.session.add(
            Module(**{'code': module['code'], 'title': module['title']})
        )

    sections = []
    grp_sect = []

    for cn, section in module['sections'].items():
        cn = int(cn)
        sct = Section.query.get(cn)

        if not sct:
            db.session.add(Section(**{
                'class_no': cn,
                'name': section['name'],
                'mod_code': module['code']
            }))
            db.session.commit()
        else:
            sct.last_updated = datetime.now()
            Lesson.query.filter_by(class_no=cn).delete()

        sections.append(section['name'])
        grp_sect.append(cn)

        sn = 0
        for i in section['schedule']:
            d = tuple(int(n) for n in reversed(i['d'].split('.')))
            dts = [datetime(*(d+tuple(map(int,i[l].split('.'))))) for l in 'se']
            db.session.add(Lesson(**{
                'class_no': cn, 'sn': sn, 'dts': dts,
                'location': i['l'], 'component':i['c'],
            }))
            sn += 1

        db.session.commit()

    gtime = int(time())
    rd.sadd('tgrps', gtime)
    rd.sadd('tgrp:%s'%gtime, *grp_sect)

    return json.jsonify({
        'status': 'ok', 'loaded': (module['code'], ', '.join(sections))
    })
Exemplo n.º 7
0
def groupadd(name, members):
    """Add to group"""
    rd.sadd('groups', name)
    if len(members) == 1 and ':' in members[0]:
        members = tuple(rd.smembers(members[0]))
    rd.sadd('group:%s'%name, *members)