def iter_sse_stream(cls, resp, yield_sse_elts=False): client = SSEClient(resp) for event in client.events(): data = cls._event_to_dict(event) if yield_sse_elts: yield {'data': data, 'event': event, 'client': client} else: yield data if event.event == 'end': client.close() break
def operation_follow(self, operation): response = self.get_stream( url='/operations/{}/follow'.format(operation)) client = SSEClient(event_source=response) try: for event in client.events(): if event.data: progress = loads(event.data) yield progress if 'completed' in progress and progress['completed']: return finally: client.close()
class CycleController: """ Class for Cycle Controller """ PHASE_RED = 0 PHASE_YELLOW = 1 PHASE_GREEN = 2 PHASE_ORANGE = 3 def __init__(self, id, name): self.id = id self.name = name self.rfid = None self.ride_id = None self.source = None self.set_phase(CycleController.PHASE_RED) def with_requests(self, url): """Get a streaming response for the given event feed using requests.""" data = { 'id': self.id 'ride_id': self.ride } return requests.get(url = url, data = data, stream=True) def set_phase(self, phase): p = ["Red", "Yellow", "Green", "Orange"] print("Phase : {0}".format(p[phase])) self.phase = phase setLED(phase) # TODO: Store the object to a file # for later restoration. def init_source(self): response = self.with_requests(events_url + '/events') self.source = EventSource(response) def listen(self): global server_url, event_url self.init_source() print "Listening to events" for event in self.source.events(): print("Got event {0}".format(event.event)) if event.event == 'user_request': response = json.loads(event.data) print response self.rfid = response["rfid"] self.ride_id = response["ride_id"] self.set_phase(CycleController.PHASE_YELLOW) self.source.close() self.source = None self.init_ride() elif event.event == 'post_ride': response = json.loads(event.data) # If user wants to continue if response["status"] == 'continue': self.set_phase(CycleController.PHASE_YELLOW) self.source.close() self.source = None self.init_ride() elif response["status"] == 'timeout' or \ response["status"] == 'stop': self.set_phase(CycleController.PHASE_RED) print "Listening to events" def init_ride(self): # TODO: Start & Wait for RFID # If timeout , go to red phase. # ... Read2.start() user_rfid = Read2.get_rfid() # Get this from RFID print user_rfid, self.rfid, user_rfid == self.rfid if int(user_rfid) == int(self.rfid): # print("Getting rfid") # user_rfid = "F100" # Get this from RFID # _ = raw_input("Insert RFID?") # if user_rfid == self.rfid: # Tell server to start ride print("Ride Accepted") data = { 'status': 'Accepted', 'ride_id': self.ride_id, 'cycle_id': self.id, } try: r = requests.post( url=server_url + '/startride', data=data) response = json.loads(r.text) if response["status"] == 'success': # TODO: Open the lock print("Open Lock") self.set_phase(CycleController.PHASE_GREEN) thread.start_new_thread(motor.spin1, ()) self.ride() else: print("Failed response") self.set_phase(CycleController.PHASE_RED) except Exception as e: # TODO: Handle network error print("Network Error") print e self.set_phase(CycleController.PHASE_RED) else: # Tell server to reject ride print("Ride rejected") data = { 'status': 'Rejected', 'message': 'Invalid Card', 'ride_id': self.ride_id, 'cycle_id': self.id } try: r = requests.post( url=server_url + '/startride', data=data) except Exception as e: # TODO: Handle network error print("Network Error") print(e) Read2.wait() Read2.stop() self.set_phase(CycleController.PHASE_RED) def ride(self): # Wait for RFID to be removed print("Waiting for rfid to be removed") Read2.wait() Read2.stop() print("RFID removed") # _rem = raw_input("remove?") # Tell server to reject ride data = { 'ride_id': self.ride_id, 'cycle_id': self.id } thread.start_new_thread(motor.spin2, ()) # r = requests.post(url= server_url + '/stopride', data=data) rq.add(data) self.set_phase(CycleController.PHASE_RED)
class CycleController: """ Class for Cycle Controller """ PHASE_RED = 0 PHASE_YELLOW = 1 PHASE_GREEN = 2 PHASE_ORANGE = 3 def __init__(self, id, name): self.id = id self.name = name self.rfid = None self.ride_id = None self.source = None self.set_phase(CycleController.PHASE_RED) def with_requests(self, url): """Get a streaming response for the given event feed using requests.""" data = {'id': self.id} return requests.get(url=url, data=data, stream=True) def set_phase(self, phase): p = ["Red", "Yellow", "Green", "Orange"] print("Phase : {0}".format(p[phase])) self.phase = phase # TODO: Store the object to a file # for later restoration. def init_source(self): response = self.with_requests(events_url + '/events') self.source = EventSource(response) def listen(self): global server_url, event_url self.init_source() for event in self.source.events(): print("Got event {0}".format(event.event)) if event.event == 'user_request': response = json.loads(event.data) self.rfid = response["rfid"] self.ride_id = response["ride_id"] self.set_phase(CycleController.PHASE_YELLOW) self.source.close() self.source = None self.init_ride() break elif event.event == 'post_ride': response = json.loads(event.data) # If user wants to continue if response["status"] == 'continue': self.set_phase(CycleController.PHASE_YELLOW) elif response["status"] == 'timeout' or \ response["status"] == 'stop': self.set_phase(CycleController.PHASE_RED) def init_ride(self): # TODO: Start & Wait for RFID # If timeout , go to red phase. # ... print("Getting rfid") user_rfid = 123 # Get this from RFID if user_rfid == self.rfid: # Tell server to start ride print("Ride Accepted") data = { 'status': 'Accepted', 'ride_id': self.ride_id, 'cycle': self.id, } try: r = requests.post(url=server_url + '/startride', data=data) response = json.loads(r.text) if response["status"] == 'success': # TODO: Open the lock print("Open Lock") self.set_phase(CycleController.PHASE_GREEN) self.ride() else: print("Failed response") self.set_phase(CycleController.PHASE_RED) except: # TODO: Handle network error print("Network Error") self.set_phase(CycleController.PHASE_RED) else: # Tell server to reject ride print("Ride rejected") data = { 'status': 'Rejected', 'message': 'Invalid Card', 'ride_id': self.ride_id, 'cycle': self.id } try: r = requests.post(url=server_url + '/startride', data=data) except: # TODO: Handle network error print("Network Error") self.set_phase(CycleController.PHASE_RED) def ride(self): # Wait for RFID to be removed print("Waiting for rfid to be removed") _rem = raw_input("remove?") # Tell server to reject ride data = {'status': 'Stop', 'ride_id': self.ride_id, 'cycle': self.id} try: r = requests.post(url=server_url + '/stopride', data=data) except: # TODO: Handle network error # Store the ride_id and rfid in special file # and send them later to server. print("Network Error") self.set_phase(CycleController.PHASE_RED)