def handle_segment_results(request): if request.method == 'POST': if not request.stream: return '', 400 result = segment_result_pb2.SegmentResult() result.ParseFromString(request.stream.read()) result.id = get_id('segment_result') result.world_time = world_time() result.finish_time_str = datetime.datetime.now().strftime( "%Y-%m-%dT%H:%M:%SZ") result.f20 = 0 insert_protobuf_into_db('segment_result', result) return '{"id": %ld}' % result.id, 200 # request.method == GET # world_id = int(request.args.get('world_id')) player_id = request.args.get('player_id') # full = request.args.get('full') == 'true' # Require segment_id if not request.args.get('segment_id'): return '', 422 segment_id = int(request.args.get('segment_id')) & 0xffffffffffffffff # Windows client crashes at foot of Alpe du Zwift # if segments 2233445501 - 2233445521 (switchbacks) are returned by zoffline. # Overall climb segment (2233445522) isn't affected. if 2233445501 <= segment_id <= 2233445521: return '', 422 only_best = request.args.get('only-best') == 'true' from_date = request.args.get('from') to_date = request.args.get('to') results = segment_result_pb2.SegmentResults() results.world_id = 1 results.segment_id = segment_id cur = g.db.cursor() where_stmt = "WHERE segment_id = ?" where_args = [str(segment_id)] if player_id: where_stmt += " AND player_id = ?" where_args.append(player_id) if from_date: where_stmt += " AND strftime('%s', finish_time_str) > strftime('%s', ?)" where_args.append(from_date) if to_date: where_stmt += " AND strftime('%s', finish_time_str) < strftime('%s', ?)" where_args.append(to_date) if only_best: where_stmt += " ORDER BY elapsed_ms LIMIT 1" cur.execute("SELECT * FROM segment_result %s" % where_stmt, where_args) for row in cur.fetchall(): result = results.segment_results.add() row_to_protobuf(row, result, [ 'f3', 'f4', 'segment_id', 'event_subgroup_id', 'finish_time_str', 'f14', 'f17', 'f18' ]) return results.SerializeToString(), 200
def handle_segment_results(request): if request.method == 'POST': if not request.stream: return '', 400 result = segment_result_pb2.SegmentResult() result.ParseFromString(request.stream.read()) result.id = get_id('segment_result') result.world_time = int(time.time()) * 1000 result.finish_time_str = datetime.datetime.now().strftime( "%Y-%m-%dT%H:%M:%SZ") result.f20 = 0 insert_protobuf_into_db('segment_result', result) return '{"id": %ld}' % result.id, 200 # request.method == GET # world_id = int(request.args.get('world_id')) player_id = request.args.get('player_id') # full = request.args.get('full') == 'true' # Require segment_id if not request.args.get('segment_id'): return '', 422 segment_id = int(request.args.get('segment_id')) & 0xffffffffffffffff # only_best = request.args.get('only-best') == 'true' from_date = request.args.get('from') to_date = request.args.get('to') results = segment_result_pb2.SegmentResults() results.world_id = 1 results.segment_id = segment_id cur = g.db.cursor() where_stmt = "WHERE segment_id = ?" where_args = [str(segment_id)] if player_id: where_stmt += " AND player_id = ?" where_args.append(player_id) if from_date: where_stmt += " AND strftime('%s', finish_time_str) > strftime('%s', ?)" where_args.append(from_date) if to_date: where_stmt += " AND strftime('%s', finish_time_str) < strftime('%s', ?)" where_args.append(to_date) cur.execute("SELECT * FROM segment_result %s" % where_stmt, where_args) for row in cur.fetchall(): result = results.segment_results.add() row_to_protobuf(row, result) return results.SerializeToString(), 200