--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/script/lib/iri_tweet/models.py Tue Jan 18 18:25:18 2011 +0100
@@ -0,0 +1,314 @@
+from sqlalchemy import Boolean, Table, Column, BigInteger, Integer, String, \
+ MetaData, ForeignKey, DateTime, create_engine
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import relationship, backref
+import datetime
+import email.utils
+import simplejson
+
+
+Base = declarative_base()
+
+APPLICATION_NAME = "IRI_TWITTER"
+CONSUMER_KEY = "54ThDZhpEjokcMgHJOMnQA"
+CONSUMER_SECRET = "wUoL9UL2T87tfc97R0Dff2EaqRzpJ5XGdmaN2XK3udA"
+#ACCESS_TOKEN_KEY= "47312923-LiNTtz0I18YXMVIrFeTuhmH7bOvYsK6p3Ln2Dc"
+#ACCESS_TOKEN_SECRET = "r3LoXVcjImNAElUpWqTu2SG2xCdWFHkva7xeQoncA"
+
+def adapt_date(date_str):
+ ts = email.utils.parsedate_tz(date_str)
+ return datetime.datetime(*ts[0:7])
+
+def adapt_json(obj):
+ if obj is None:
+ return None
+ else:
+ return simplejson.dumps(obj)
+
+class Entity(Base):
+ __tablename__ = "tweet_entity"
+ id = Column(Integer, primary_key = True)
+ tweet_id = Column(BigInteger, ForeignKey('tweet_tweet.id'))
+ #tweet = relationship(Tweet, primaryjoin = tweet_id == Tweet.id)
+ type = Column(String)
+ indice_start = Column(Integer)
+ indice_end = Column(Integer)
+ __mapper_args__ = {'polymorphic_on': type}
+
+ def __init__(self, **kwargs):
+ for key, value in kwargs.items():
+ if hasattr(self,key):
+ setattr(self,key,value)
+
+
+class Tweet(Base):
+ __tablename__ = 'tweet_tweet'
+
+ id = Column(BigInteger, primary_key=True, autoincrement=False)
+ id_str = Column(String)
+ contributors = Column(String)
+ coordinates = Column(String)
+ created_at = Column(DateTime)
+ favorited = Column(Boolean)
+ geo = Column(String)
+ in_reply_to_screen_name = Column(String)
+ in_reply_to_status_id = Column(BigInteger)
+ in_reply_to_status_id_str = Column(String)
+ in_reply_to_user_id = Column(Integer)
+ in_reply_to_user_id_str = Column(String)
+ place = Column(String)
+ retweet_count = Column(Integer)
+ retweeted = Column(Boolean)
+ source = Column(String)
+ text = Column(String)
+ truncated = Column(Boolean)
+ user_id = Column(Integer, ForeignKey('tweet_user.id'))
+ original_json = Column(String)
+ entity_list = relationship(Entity, backref='tweet')
+
+ #user = relationship(User, primaryjoin=user_id == User.id)
+
+ def __init__(self, **kwargs):
+ for key, value in kwargs.items():
+ if hasattr(self,key):
+ setattr(self,key,value)
+
+
+class User(Base):
+ __tablename__ = "tweet_user"
+
+ id = Column(Integer, primary_key = True, autoincrement=False)
+ id_str= Column(String)
+ contributors_enabled= Column(Boolean)
+ created_at= Column(DateTime)
+ description= Column(String)
+ favourites_count = Column(Integer)
+ follow_request_sent = Column(Boolean)
+ followers_count = Column(Integer)
+ following = Column(String)
+ friends_count = Column(Integer)
+ geo_enabled= Column(Boolean)
+ is_translator= Column(Boolean)
+ lang = Column(String)
+ listed_count = Column(Integer)
+ location= Column(String)
+ name = Column(String)
+ notifications = Column(String)
+ profile_background_color= Column(String)
+ profile_background_image_url= Column(String)
+ profile_background_tile= Column(Boolean)
+ profile_image_url= Column(String)
+ profile_link_color= Column(String)
+ profile_sidebar_border_color= Column(String)
+ profile_sidebar_fill_color= Column(String)
+ profile_text_color= Column(String)
+ profile_use_background_image= Column(Boolean)
+ protected= Column(Boolean)
+ screen_name= Column(String)
+ show_all_inline_media= Column(Boolean)
+ statuses_count = Column(Integer)
+ time_zone= Column(String)
+ url= Column(String)
+ utc_offset = Column(Integer)
+ verified= Column(Boolean)
+ tweets = relationship(Tweet, backref='user')
+
+ def __init__(self, **kwargs):
+ for key, value in kwargs.items():
+ if hasattr(self,key):
+ setattr(self,key,value)
+
+
+
+class Hashtag(Base):
+ __tablename__ = "tweet_hashtag"
+ id = Column(Integer, primary_key=True)
+ text = Column(String, unique = True)
+ def __init__(self, **kwargs):
+ for key, value in kwargs.items():
+ if hasattr(self,key):
+ setattr(self,key,value)
+
+
+
+class Url(Base):
+ __tablename__ = "tweet_url"
+ id = Column(Integer, primary_key=True)
+ url = Column(String, unique=True)
+ expanded_url = Column(String)
+ def __init__(self, **kwargs):
+ for key, value in kwargs.items():
+ if hasattr(self,key):
+ setattr(self,key,value)
+
+
+
+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 __init__(self, **kwargs):
+ super(EntityHashtag, self).__init__(**kwargs)
+ for key, value in kwargs.items():
+ if hasattr(self,key):
+ setattr(self,key,value)
+
+
+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 __init__(self, **kwargs):
+ super(EntityUrl, self).__init__(**kwargs)
+ for key, value in kwargs.items():
+ if hasattr(self,key):
+ setattr(self,key,value)
+
+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(Integer, ForeignKey('tweet_user.id'))
+ user = relationship(User, primaryjoin=user_id == User.id)
+
+ def __init__(self, **kwargs):
+ super(EntityUser, self).__init__(**kwargs)
+ for key, value in kwargs.items():
+ if hasattr(self,key):
+ setattr(self,key,value)
+
+
+def setup_database(*args, **kwargs):
+
+ create_all = True
+ if "create_all" in kwargs:
+ create_all = kwargs["create_all"]
+ del(kwargs["create_all"])
+
+ engine = create_engine(*args, **kwargs)
+ metadata = Base.metadata
+
+ if create_all:
+ metadata.create_all(engine)
+
+ return (engine, metadata)
+
+rest_tweet_tweet = {
+ u'iso_language_code': 'unicode',
+ u'text': 'unicode',
+ u'from_user_id_str': 'unicode',
+ u'profile_image_url': 'unicode',
+ u'to_user_id_str': 'NoneType',
+ u'created_at': 'unicode',
+ u'source': 'unicode',
+ u'to_user': 'unicode',
+ u'id_str': 'unicode',
+ u'from_user': 'unicode',
+ u'place': {u'type': 'unicode', u'id': 'unicode', u'full_name': 'unicode'},
+ u'from_user_id': 'int',
+ u'to_user_id': 'NoneType',
+ u'geo': 'NoneType',
+ u'id': 'int',
+ u'metadata': {u'result_type': 'unicode'}
+}
+
+tweet_tweet = {
+ 'contributors': None,
+ 'coordinates': None,
+ 'created_at': 'date',
+ 'entities': "tweet_entity",
+ 'favorited': "bool",
+ 'geo': None,
+ 'id': "long",
+ 'id_str': "string",
+ 'in_reply_to_screen_name': "string",
+ 'in_reply_to_status_id': "long",
+ 'in_reply_to_status_id_str': "string",
+ 'in_reply_to_user_id': "int",
+ 'in_reply_to_user_id_str': "string",
+ 'place': "string",
+ 'retweet_count': "int",
+ 'retweeted': "bool",
+ 'source': "string",
+ 'text': "string",
+ 'truncated': "bool",
+ 'user': "tweet_user"
+}
+tweet_user = {
+ 'contributors_enabled': 'bool',
+ 'created_at': 'str',
+ 'description': 'str',
+ 'favourites_count': 'int',
+ 'follow_request_sent': None,
+ 'followers_count': 'int',
+ 'following': None,
+ 'friends_count': 'int',
+ 'geo_enabled': 'bool',
+ 'id': 'int',
+ 'id_str': 'str',
+ 'is_translator': 'bool',
+ 'lang': 'str',
+ 'listed_count': 'int',
+ 'location': 'str',
+ 'name': 'str',
+ 'notifications': 'NoneType',
+ 'profile_background_color': 'str',
+ 'profile_background_image_url': 'str',
+ 'profile_background_tile': 'bool',
+ 'profile_image_url': 'str',
+ 'profile_link_color': 'str',
+ 'profile_sidebar_border_color': 'str',
+ 'profile_sidebar_fill_color': 'str',
+ 'profile_text_color': 'str',
+ 'profile_use_background_image': 'bool',
+ 'protected': 'bool',
+ 'screen_name': 'str',
+ 'show_all_inline_media': 'bool',
+ 'statuses_count': 'int',
+ 'time_zone': 'str',
+ 'url': 'str',
+ 'utc_offset': 'int',
+ 'verified': 'bool',
+}
+
+
+tweet_entity_hashtag = {
+ 'hashtag' : 'tweet_hashtag',
+ 'indice_start' : 'int',
+ 'indice_end' : 'int',
+ 'tweet':'tweet_tweet'
+}
+
+tweet_entity_url = {
+ 'url' : 'tweet_url',
+ 'indice_start' : 'int',
+ 'indice_end' : 'int',
+ 'tweet':'tweet_tweet'
+}
+
+tweet_entity_user = {
+ 'user' : 'tweet_user',
+ 'indice_start' : 'int',
+ 'indice_end' : 'int',
+ 'tweet':'tweet_tweet'
+}
+
+#id int
+#id_str str
+#indices list
+#name str
+#screen_name str
+
+tweet_hashtag = {
+ "text": "string"
+}
+
+tweet_url = {
+ "url": "string",
+ "expanded_url" : "string",
+}
+