tweetcast/gevent/server/tweetcast.py
changeset 410 bf5cf5a9e737
parent 409 f7ceddf99d6d
parent 406 86b62b98fea7
child 411 0471e6eb8a1b
child 412 97c082990f8d
--- a/tweetcast/gevent/server/tweetcast.py	Wed Dec 07 19:28:46 2011 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,212 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-from gevent import monkey; monkey.patch_all()
-# Importer d'abord, sinon exception
-import anyjson, gevent, psycopg2
-from sqlalchemy import (Boolean, Column, BigInteger, Integer, String, 
-    ForeignKey, DateTime, create_engine, desc, func)
-from sqlalchemy.orm import backref, relationship, sessionmaker
-from sqlalchemy.ext.declarative import declarative_base
-from gevent.pywsgi import WSGIServer
-from urlparse import parse_qs
-
-annotation_keywords = {
-    "positive" : '++',
-    "negative" : '--',
-    "reference" : '==',
-    "question" : '??'
-}
-
-Base = declarative_base()
-engine = create_engine('postgresql://postgres:doiteshimashite@localhost/tweet_live')
-Session = sessionmaker(bind=engine)
-
-class EntityType(Base):
-    __tablename__ = "tweet_entity_type"
-    id = Column(Integer, primary_key=True, autoincrement=True)
-    label = Column(String)
-
-class Entity(Base):
-    __tablename__ = "tweet_entity"
-    id = Column(Integer, primary_key=True)
-    tweet_id = Column(BigInteger, ForeignKey('tweet_tweet.id'))
-    type = Column(String)
-    entity_type_id = Column(Integer, ForeignKey('tweet_entity_type.id'), nullable=False)
-    entity_type = relationship("EntityType", backref="entities")
-    indice_start = Column(Integer)
-    indice_end = Column(Integer)
-    source = Column(String)
-    __mapper_args__ = {'polymorphic_on': type, 'polymorphic_identity': 'entity_entity', 'with_polymorphic':'*'}
-    
-    def jsondict(self):
-    	return {
-    		"indice_start" : self.indice_start,
-    		"indice_end" : self.indice_end,
-    		"type" : self.type
-    	}
-
-class Tweet(Base):
-    __tablename__ = 'tweet_tweet'
-
-    id = Column(BigInteger, primary_key=True, autoincrement=False)
-    created_at = Column(DateTime)
-    text = Column(String)
-    user_id = Column(Integer, ForeignKey('tweet_user.id'))
-    user = relationship("User", backref="tweets")
-    entity_list = relationship(Entity, backref='tweet')
-    
-    def annotations(self):
-        aa = []
-        for a in annotation_keywords:
-            n = self.text.count(annotation_keywords[a])
-            if n:
-                aa.append({
-                    "name" : a,
-                    "text" : annotation_keywords[a],
-                    "count" : n
-                })
-        return aa
-    
-    def jsondict(self):
-        return {
-            "id" : str(self.id),
-            "created_at" : str(self.created_at),
-            "text" : self.text,
-            "user" : self.user.jsondict(),
-            "entities" : [en.jsondict() for en in self.entity_list],
-            "annotations" : self.annotations()
-        }
-
-class User(Base):
-    __tablename__ = "tweet_user"
-    
-    id = Column(BigInteger, primary_key=True, autoincrement=False)
-    screen_name = Column(String, index=True)
-    profile_image_url = Column(String)
-    
-    def jsondict(self):
-        return {
-            "id" : str(self.id),
-            "screen_name" : self.screen_name,
-            "profile_image_url" : self.profile_image_url
-        }
-
-class Hashtag(Base):
-    __tablename__ = "tweet_hashtag"
-    id = Column(Integer, primary_key=True)
-    text = Column(String, unique=True, index=True)
-    
-    def jsondict(self):
-    	return {
-    		"text" : self.text
-    	}
-
-class Url(Base):
-    __tablename__ = "tweet_url"
-    id = Column(Integer, primary_key=True)
-    url = Column(String, unique=True)
-    expanded_url = Column(String)
-    
-    def jsondict(self):
-    	return {
-    		"url" : self.url,
-    		"expanded_url" : self.expanded_url
-    	}
-
-class Media(Base):
-    __tablename__ = "tweet_media"
-    id = Column(BigInteger, primary_key=True, autoincrement=False)
-    url = Column(String)
-    expanded_url = Column(String)
-    
-    def jsondict(self):
-    	return {
-    		"url" : self.url,
-    		"expanded_url" : self.expanded_url
-    	}
-
-class EntityHashtag(Entity):
-    __tablename__ = "tweet_entity_hashtag"
-    __mapper_args__ = {'polymorphic_identity': 'entity_hashtag'}
-    id = Column(Integer, ForeignKey('tweet_entity.id'), primary_key=True)
-    hashtag_id = Column(Integer, ForeignKey("tweet_hashtag.id"))
-    hashtag = relationship(Hashtag, primaryjoin=hashtag_id == Hashtag.id)
-    
-    def jsondict(self):
-    	d = super(EntityHashtag, self).jsondict()
-    	d['entity'] = self.hashtag.jsondict()
-    	return d
-    
-class EntityUrl(Entity):
-    __tablename__ = "tweet_entity_url"
-    __mapper_args__ = {'polymorphic_identity': 'entity_url'}
-    id = Column(Integer, ForeignKey('tweet_entity.id'), primary_key=True)
-    url_id = Column(Integer, ForeignKey("tweet_url.id"))
-    url = relationship(Url, primaryjoin=url_id == Url.id)
-    
-    def jsondict(self):
-    	d = super(EntityUrl, self).jsondict()
-    	d['entity'] = self.url.jsondict()
-    	return d
-
-class EntityUser(Entity):
-    __tablename__ = "tweet_entity_user"
-    __mapper_args__ = {'polymorphic_identity': 'entity_user'}
-    id = Column(Integer, ForeignKey('tweet_entity.id'), primary_key=True)
-    user_id = Column(BigInteger, ForeignKey('tweet_user.id'))
-    user = relationship(User, primaryjoin=(user_id == User.id))
-    
-    def jsondict(self):
-    	d = super(EntityUser, self).jsondict()
-    	d['entity'] = self.user.jsondict()
-    	return d
-
-class EntityMedia(Entity):
-    __tablename__ = "tweet_entity_media"
-    __mapper_args__ = {'polymorphic_identity': 'entity_media'}
-    id = Column(Integer, ForeignKey('tweet_entity.id'), primary_key=True)
-    media_id = Column(BigInteger, ForeignKey('tweet_media.id'))
-    media = relationship(Media, primaryjoin=(media_id == Media.id))
-    
-    def jsondict(self):
-    	d = super(EntityMedia, self).jsondict()
-    	d['entity'] = self.media.jsondict()
-    	return d
-
-# ranges = []
-# lastid = 0L
-# 
-# def define_ranges:
-# 	
-
-def webserver(env, start_response):
-	if env['PATH_INFO'] == '/':
-		httpquery = parse_qs(env['QUERY_STRING'])
-		print "serving tweets to", env['REMOTE_ADDR'], httpquery
-		query = session.query(Tweet)
-		if "since_id" in httpquery:
-		    query = query.filter(Tweet.id >= long(httpquery["since_id"][0]))
-		if "after_id" in httpquery:
-		    query = query.filter(Tweet.id > long(httpquery["after_id"][0]))
-		if "max_id" in httpquery:
-		    query = query.filter(Tweet.id <= long(httpquery["max_id"][0]))
-		if "before_id" in httpquery:
-		    query = query.filter(Tweet.id < long(httpquery["before_id"][0]))
-		query = query.order_by(desc(Tweet.id))
-		if "limit" in httpquery:
-			result = query[:int(httpquery["limit"][0])]
-		else:
-			result = query[:200]
-		start_response('200 OK', [('Content-Type', 'application/javascript' if "callback" in httpquery else 'application/json' )])
-		return ["%s%s%s"%(
-			"%s("%httpquery["callback"][0] if "callback" in httpquery else "",
-			anyjson.serialize({"tweets" : [t.jsondict() for t in result]}),
-			")" if "callback" in httpquery else ""
-		)]
-	else:
-		start_response('404 Not Found', [('Content-Type', 'text/html')])
-		return ['<h1>Not Found</h1>']
-
-session = Session()
-WSGIServer(('', 8888), webserver).serve_forever()
\ No newline at end of file