コード例 #1
0
ファイル: vote.py プロジェクト: gkamer8/stcm-platform-v1
def decisions():
    if request.method == 'POST':
        auth_token = request.headers['Authentication']
        resp = decode_auth_token(auth_token)
        if not isinstance(resp, str):
            db = get_db()
        else:
            return json.dumps({'error': resp})

        try:
            date = request.json['date']
        except:
            date = 0

        decisions = db.execute(
            'SELECT id, description, title, userid, passed, date FROM decisions WHERE date >= ?',
            (date, ))

        to_return = []
        for row in decisions:
            to_add = {
                'id': row[0],
                'description': row[1],
                'title': row[2],
                'userid': row[3],
                'passed': row[4],
                'date': row[5]
            }
            to_return.append(to_add)

        return json.dumps({'data': to_return})

    return json.dumps({'error': 'must use POST'})
コード例 #2
0
ファイル: vote.py プロジェクト: gkamer8/stcm-platform-v1
def create():
    if request.method == 'POST':
        auth_token = request.headers['Authentication']
        resp = decode_auth_token(auth_token)
        if not isinstance(resp, str):
            db = get_db()
            user = db.execute('SELECT * FROM user WHERE id = ?',
                              (resp, )).fetchone()
        else:
            return json.dumps({'error': resp})

        description = request.json['description']
        title = request.json['title']

        error = None
        if not description:
            error = 'Description is required.'
        elif not title:
            error = 'Title is required.'

        if error is None:
            db.execute(
                'INSERT INTO decisions (description, date, title, passed, userid) VALUES (?, ?, ?, ?, ?)',
                (description, int(time.time()), title, 0, user['id']))
            db.commit()
            return json.dumps({'message': 'success'})

        return json.dumps({'error': error})

    return json.dumps({'error': 'must use POST'})
コード例 #3
0
def account():
    auth_token = request.headers['Authentication']
    resp = decode_auth_token(auth_token)
    if isinstance(resp, str):
        return json.dumps({'error':resp})

    tdclient = TDAPIClient()
    to_return = tdclient.get_account()

    return json.dumps({'data': to_return})
コード例 #4
0
ファイル: vote.py プロジェクト: gkamer8/stcm-platform-v1
def cast():
    if request.method == 'POST':

        auth_token = request.headers['Authentication']
        resp = decode_auth_token(auth_token)
        if not isinstance(resp, str):
            db = get_db()
            user = db.execute('SELECT * FROM user WHERE id = ?',
                              (resp, )).fetchone()
        else:
            return json.dumps({'error': resp})

        decisionid = request.json['decisionid']
        forvote = request.json['for']

        db = get_db()
        error = None

        if not isinstance(decisionid, int):
            error = 'Decicion id is required.'
        elif not isinstance(forvote, int):
            error = 'For vote is required.'
        elif db.execute(
                'SELECT id FROM votes WHERE userid = ? AND decisionid = ?',
            (user['id'], decisionid)).fetchone() is not None:
            db.execute(
                'UPDATE votes SET (for) VALUES (?,) WHERE decisionid = ? AND userid = ?',
                (forvote, decisionid, user['id']))
            db.commit()
            return json.dumps({'message': 'success'})

        if error is None:
            db.execute(
                'INSERT INTO votes (decisionid, for, userid, date) VALUES (?, ?, ?, ?)',
                (decisionid, forvote, user['id'], int(time.time())))
            db.commit()

            # Check if passed
            usersfor = db.execute(
                'SELECT stake FROM user WHERE id IN (SELECT userid FROM votes WHERE for != 0 AND decisionid = ?)',
                (decisionid, ))
            cumstakefor = 0
            for row in usersfor:
                cumstakefor += row[0]
                if cumstakefor > (2 / 3):
                    db.execute('UPDATE decisions SET passed = 1 WHERE id = ?',
                               (decisionid, ))
                    db.commit()

            return json.dumps({'message': 'success'})

        return json.dumps({'error': error})

    return json.dumps({'error': 'request must be post'})
コード例 #5
0
def positions():
    auth_token = request.headers['Authentication']
    resp = decode_auth_token(auth_token)
    if isinstance(resp, str):
        return json.dumps({'error':resp})

    tdclient = TDAPIClient()
    positions = tdclient.get_positions()['positions']

    to_return = []
    for pos in positions:
        to_return.append(pos)

    return json.dumps({'data': to_return})
コード例 #6
0
def check_user_session(request_):
    auth_header = request_.headers.get('Authorization')

    if auth_header is None:
        raise Exception(
            'You must indicate Authorization token. The auth token is missing')

    auth_token = auth_header.split(" ")[1]

    user_payload = decode_auth_token(auth_token)

    user = User.query.get(user_payload['sub'])
    if not user:
        raise Exception('Username not found')

    return user
コード例 #7
0
ファイル: vote.py プロジェクト: gkamer8/stcm-platform-v1
def votes():
    if request.method == 'POST':
        auth_token = request.headers['Authentication']
        resp = decode_auth_token(auth_token)
        if not isinstance(resp, str):
            db = get_db()
            user = db.execute('SELECT * FROM user WHERE id = ?',
                              (resp, )).fetchone()
        else:
            return json.dumps({'error': resp})

        # Takes: optionally list of decisionids, optionally allusers=False
        try:
            decisions = request.json['decisions']
        except:
            decisions = None

        try:
            allusers = request.json['allusers']
        except:
            allusers = False

            # result_set = c.execute('SELECT * FROM distro WHERE id IN (%s)' %
            #         ','.join('?'*len(desired_ids)), desired_ids)

        if decisions is not None:
            if not isinstance(decisions, list) or len(decisions) == 0:
                return json.dumps({'error': 'must supply valid decision list'})
            if not isinstance(decisions[0], int):
                return json.dumps({'error': 'must supply valid decision ids'})

        if allusers and decisions is not None:
            thevotes = db.execute(
                'SELECT id, userid, for, date, decisionid FROM votes WHERE decisionid IN (%s) ORDER BY date DESC'
                % ','.join('?' * len(decisions)), decisions)
        elif allusers and decisions is None:
            thevotes = db.execute(
                'SELECT id, userid, for, date, decisionid FROM votes ORDER BY date DESC'
            )
        elif decisions is not None:
            desis = [user['id']].extend(decisions)
            thevotes = db.execute(
                'SELECT id, userid, for, date, decisionid FROM votes WHERE userid = ? AND decisionid IN (%s) ORDER BY date DESC'
                % ','.join('?' * len(decisions)), desis)
        else:
            thevotes = db.execute(
                'SELECT id, userid, for, date, decisionid FROM votes WHERE userid = ? ORDER BY date DESC',
                (user['id'], ))

        to_return = {}
        for row in thevotes:
            to_add = {
                'id': row[0],
                'userid': row[1],
                'for': row[2],
                'date': row[3],
                'decisionid': row[4]
            }
            to_return[row[4]] = to_add

        return json.dumps({'data': to_return})

    return json.dumps({'error': 'must use POST'})