예제 #1
0
파일: stream.py 프로젝트: bluele/Twister
    def _read_loop(self, resp):
        logger.debug("_read_loop init")
        # retry limit for http connecting
        http_count = 0
        while self.running:
            if resp.isclosed():
                break
            logger.debug("_readloop start(%s)" % str(resp.status))
            # read length
            data = ''
            while True:
                try:
                    c = resp.read(1)
                    if c == '\n':
                        http_count = 0
                        break
                    data += c
                except SSLError, exception:
                    logger.info("(%s retry:%d):%s" %
                                ("_read_loop", http_count, str(exception)))
                    http_count += 1
                    if http_count > self.http_retry:
                        logger.error("over retry max")
                        raise NoResponse("break loop")

            data = data.strip()

            # read data and pass into listener
            if self.listener.on_data(data) is False:
                self.running = False
예제 #2
0
파일: stream.py 프로젝트: bluele/Twister
    def _read_loop(self, resp):
        logger.debug("_read_loop init")
        # retry limit for http connecting
        http_count = 0
        while self.running:
            if resp.isclosed():
                break
            logger.debug("_readloop start(%s)" % str(resp.status))
            # read length
            data = ''
            while True:
                try:
                    c = resp.read(1)
                    if c == '\n':
                        http_count = 0
                        break
                    data += c
                except SSLError, exception:
                    logger.info("(%s retry:%d):%s" % ("_read_loop", http_count, str(exception)))
                    http_count += 1
                    if http_count > self.http_retry:
                        logger.error("over retry max")
                        raise NoResponse("break loop")
                    
            data = data.strip()

            # read data and pass into listener
            if self.listener.on_data(data) is False:
                self.running = False
예제 #3
0
 def dispatch(self, status):
     for k, q in self.queue_list.items():
         try:
             q.put(status, block=True, timeout=None)
             logger.debug("put %s" % str(k))
         except Exception, err:
             logger.debug("%s" % err)
             continue
예제 #4
0
파일: handler.py 프로젝트: bluele/Twister
 def dispatch(self, status):
     for k, q in self.queue_list.items():
         try:
             q.put(status, block=True, timeout=None)
             logger.debug("put %s" % str(k))
         except Exception, err:
             logger.debug("%s" % err)
             continue
예제 #5
0
파일: handler.py 프로젝트: bluele/Twister
 def worker(self):
     while True:
         try:
             logger.debug("wait..")
             status = self.evqueue.get(block=True, timeout=None)
             logger.debug("get by %s" % (status.author.screen_name,))
             self.dispatch(status)
         except TwisterError, err:
             logger.error(err)
         except Exception, err:
             logger.error(err)
예제 #6
0
 def worker(self):
     while True:
         try:
             logger.debug("wait..")
             status = self.evqueue.get(block=True, timeout=None)
             logger.debug("get by %s" % (status.author.screen_name, ))
             self.dispatch(status)
         except TwisterError, err:
             logger.error(err)
         except Exception, err:
             logger.error(err)
예제 #7
0
파일: handler.py 프로젝트: bluele/Twister
 def handle(self):
     logger.debug("connect by %s" % str(self.client_address))
     self.queue_list[self.client_address] = Queue.Queue()
     while True:
         try:
             status = self.queue_list[self.client_address].get(block=True, timeout=None)
             self.request.send(to_utf8(status.text))
         except Exception, err:
             # エラー発生で切断
             logger.error(err)
             # can do on finish?
             del self.queue_list[self.client_address]
             break
예제 #8
0
 def handle(self):
     logger.debug("connect by %s" % str(self.client_address))
     self.queue_list[self.client_address] = Queue.Queue()
     while True:
         try:
             status = self.queue_list[self.client_address].get(block=True,
                                                               timeout=None)
             self.request.send(to_utf8(status.text))
         except Exception, err:
             # エラー発生で切断
             logger.error(err)
             # can do on finish?
             del self.queue_list[self.client_address]
             break
예제 #9
0
파일: handler.py 프로젝트: bluele/Twister
 def add_user(self, name, user):
     try:
         if not (isinstance(user, list) or isinstance(user, tuple)):
             if not isinstance(user, dict):
                 user = [user]
             else:
                 raise TypeError("'user' should specify str or list or tuple.")
         self.events[self.get_event_index(name)] += list(user)
     except NotFoundEvent:
         raise
     except TypeError:
         raise
     except:
         raise TwisterError("(Fatal Error) ev_remove.")
     else:
         logger.debug("Remove event '%s'" % self.events[name]) 
예제 #10
0
 def add_user(self, name, user):
     try:
         if not (isinstance(user, list) or isinstance(user, tuple)):
             if not isinstance(user, dict):
                 user = [user]
             else:
                 raise TypeError(
                     "'user' should specify str or list or tuple.")
         self.events[self.get_event_index(name)] += list(user)
     except NotFoundEvent:
         raise
     except TypeError:
         raise
     except:
         raise TwisterError("(Fatal Error) ev_remove.")
     else:
         logger.debug("Remove event '%s'" % self.events[name])
예제 #11
0
파일: stream.py 프로젝트: bluele/Twister
    def _run(self):
        # Authenticate
        url = "%s://%s%s" % (self.scheme, self.host, self.url)

        # Connect and process the stream
        error_counter = 0
        conn = None
        exception = None

        logger.debug(u"run streaming server.")
        while self.running:
            # quit if error count greater than retry count
            if self.retry_count is not None and error_counter > self.retry_count:
                break
            try:
                if self.scheme == "http":
                    conn = httplib.HTTPConnection(self.host)
                else:
                    conn = httplib.HTTPSConnection(self.host)
                self.auth.apply_auth(url, 'POST', self.headers,
                                     self.parameters)
                conn.connect()
                conn.sock.settimeout(self.timeout)
                conn.request('POST', self.url, self.body, headers=self.headers)
                logger.debug(u"wait response.")
                resp = conn.getresponse()
                logger.debug(u"connect response: %s" % str(resp))
                if resp.status != 200:
                    if self.listener.on_error(resp.status) is False:
                        break
                    error_counter += 1
                    logger.error("response status: error(%s)",
                                 (str(resp.status), ))
                    sleep(self.retry_time)
                else:
                    error_counter = 0
                    logger.info("response status: ok(%s)",
                                (str(resp.status), ))
                    self._read_loop(resp)

            except socket.error, err:
                self.listener.on_socket_error(err)

            except socket.gaierror, err:
                self.listener.on_socket_error(err)
예제 #12
0
파일: stream.py 프로젝트: bluele/Twister
    def _run(self):
        # Authenticate
        url = "%s://%s%s" % (self.scheme, self.host, self.url)

        # Connect and process the stream
        error_counter = 0
        conn = None
        exception = None
        
        logger.debug(u"run streaming server.")
        while self.running:
            # quit if error count greater than retry count
            if self.retry_count is not None and error_counter > self.retry_count:
                break
            try:
                if self.scheme == "http":
                    conn = httplib.HTTPConnection(self.host)
                else:
                    conn = httplib.HTTPSConnection(self.host)
                self.auth.apply_auth(url, 'POST', self.headers, self.parameters)
                conn.connect()
                conn.sock.settimeout(self.timeout)
                conn.request('POST', self.url, self.body, headers=self.headers)
                logger.debug(u"wait response.")
                resp = conn.getresponse()
                logger.debug(u"connect response: %s" % str(resp))
                if resp.status != 200:
                    if self.listener.on_error(resp.status) is False:
                        break
                    error_counter += 1
                    logger.error("response status: error(%s)", (str(resp.status),))
                    sleep(self.retry_time)
                else:
                    error_counter = 0
                    logger.info("response status: ok(%s)", (str(resp.status),))
                    self._read_loop(resp)
                    
            except socket.error, err:
                self.listener.on_socket_error(err)
                    
            except socket.gaierror, err:
                self.listener.on_socket_error(err)
예제 #13
0
파일: handler.py 프로젝트: bluele/Twister
 def call(self, status):
     logger.debug("callback")
     logger.debug(status.text)
     self.dispatch(status)
예제 #14
0
파일: handler.py 프로젝트: bluele/Twister
 def call(self, status):
     if self.is_processed(status):
         logger.debug("put %s" % (status.text,))
         self.evqueue.put(status, block=True, timeout=None)
예제 #15
0
 def start_server(self):
     logger.debug("start server.")
     self.server.serve_forever()
예제 #16
0
 def call(self, status):
     logger.debug("callback")
     logger.debug(status.text)
     self.dispatch(status)
예제 #17
0
파일: handler.py 프로젝트: bluele/Twister
 def start_server(self):
     logger.debug("start server.")
     self.server.serve_forever()
     
     
     
예제 #18
0
파일: server.py 프로젝트: bluele/Twister
 def on_limit(self, track):
     """Called when a limitation notice arrvies"""
     logger.debug("[limit]")
     return
예제 #19
0
파일: server.py 프로젝트: bluele/Twister
 def on_limit(self, track):
     """Called when a limitation notice arrvies"""
     logger.debug("[limit]")
     return
예제 #20
0
 def call(self, status):
     if self.is_processed(status):
         logger.debug("put %s" % (status.text, ))
         self.evqueue.put(status, block=True, timeout=None)