diff -r 3774706bfb80 -r c964d7e6556e tweetcast/server-gevent/tweetcast.py --- a/tweetcast/server-gevent/tweetcast.py Mon Dec 19 11:37:16 2011 +0100 +++ b/tweetcast/server-gevent/tweetcast.py Mon Dec 19 15:22:07 2011 +0100 @@ -16,8 +16,6 @@ Base = declarative_base() engine = create_engine(SQL_CONNECT) Session = sessionmaker(bind=engine) -data = [] -lastid = 0L class TweetSource(Base): __tablename__ = 'tweet_tweet_source' @@ -108,42 +106,45 @@ textids(tweetdict['retweeted_status']) return tweetdict -def refresh(): - global lastid, data - print "refreshing" - query = session.query(Tweet).order_by(asc(Tweet.id)).options(joinedload(Tweet.tweet_source)).filter(Tweet.id > lastid) - for tweet in query: - lastid = tweet.id - data.append(anyjson.serialize(tweet.jsondict())) - gevent.sleep(2.) - gevent.spawn(refresh) +class Tweetcast(): -def wsstart(): - global WEB_PORT - WSGIServer(('', WEB_PORT), webserver).serve_forever() + def __init__(self, port): + print "Starting server" + self.data = [] + self.lastid = 0L + self.session = Session() + self.refresh() + WSGIServer(('', port), self.webserver).serve_forever() + + def refresh(self): + print "refreshing" + query = self.session.query(Tweet).order_by(asc(Tweet.id)).options(joinedload(Tweet.tweet_source)).filter(Tweet.id > self.lastid) + for tweet in query: + self.lastid = tweet.id + self.data.append(anyjson.serialize(tweet.jsondict())) + print len(self.data), "tweets in memory" + self.lastrefresh = datetime.datetime.now() -def webserver(env, start_response): - if env['PATH_INFO'] == '/': - httpquery = parse_qs(env['QUERY_STRING']) - print "serving tweets to", env['REMOTE_ADDR'], httpquery - frompos = 0 - if "from" in httpquery: - frompos = int(httpquery["from"][0]) - result = '%s{"tweets" : [ %s ] }%s'%( - "%s("%httpquery["callback"][0] if "callback" in httpquery else "", - ",".join(data[frompos:]), - ")" if "callback" in httpquery else "" - ) - print "Sending response" - start_response('200 OK', [('Content-Type', 'application/javascript' if "callback" in httpquery else 'application/json' )]) - return [result] - else: - start_response('404 Not Found', [('Content-Type', 'text/html')]) - return ['