コード例 #1
0
 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
コード例 #2
0
ファイル: default_client_api.py プロジェクト: sndnv/stasis
    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()
コード例 #3
0
ファイル: rpi.py プロジェクト: WheelsOnRoll/RPi
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)
コード例 #4
0
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)