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'})
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'})
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})
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'})
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})
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
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'})