from api.api_errors import BadRequestError from api.resources import AuthenticatedResource from flask import request from tracker import stream_collection, db def cell_to_value(cell): return cell.value def row_to_values(row): return [cell_to_value(c) for c in row] + [row[0].row] class SpyStreams(AuthenticatedResource): def get(self, sheet_name): if sheet_name == 'current': sheet_name = None return [ row_to_values(row) for row in stream_collection.get_tracks_from_named_sheet(sheet_name) ] def put(self, sheet_name): print("Recording stream", sheet_name, request.json) if sheet_name == 'current': sheet_name = None data = request.json for required_key in ['uri', 'as_of', 'streams', 'cell_row']: if required_key not in data: raise BadRequestError('{required_key} is required.') stream_collection.save_in_db( **{k: data[k] for k in data.keys() if k in ('as_of', 'streams', 'uri')}) stream_collection.record_stream(data['cell_row'], data['streams'], sheet_name) return '', 204 def post(self, sheet_name): if request.json.get('synchronise'): print("Synchronising sheet from db", sheet_name) if sheet_name == 'current': sheet_name = None as_of = request.json.get('as_of') or None stream_collection.record_db_state_in_sheet(sheet_name, as_of)