From 18cab06ae81a383f8eaf3117d3377c0424b86782 Mon Sep 17 00:00:00 2001 From: Orakaro Date: Wed, 28 May 2014 00:11:05 +0900 Subject: [PATCH] global by db --- rainbowstream/db.py | 30 ++++++++++++++++++++++++++++++ rainbowstream/rainbow.db | Bin 0 -> 8192 bytes rainbowstream/rainbow.py | 22 ++++++++++++++++------ rainbowstream/table_def.py | 17 +++++++++++++++++ requirements.txt | 1 + 5 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 rainbowstream/db.py create mode 100644 rainbowstream/rainbow.db create mode 100644 rainbowstream/table_def.py diff --git a/rainbowstream/db.py b/rainbowstream/db.py new file mode 100644 index 0000000..d81f5ae --- /dev/null +++ b/rainbowstream/db.py @@ -0,0 +1,30 @@ +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from table_def import Map + + +class RainbowDB(): + + engine=None + + def __init__(self): + self.engine = create_engine('sqlite:///rainbow.db', echo=False) + + def store(self, tweet_id): + Session = sessionmaker(bind=self.engine) + session = Session() + m = Map(tweet_id) + session.add(m) + session.commit() + + def rainbow_query(self, rid): + Session = sessionmaker(bind=self.engine) + session = Session() + res = session.query(Map).filter("rainbow_id =:rid").params(rid=rid).all() + return res + + def tweet_query(self, tid): + Session = sessionmaker(bind=self.engine) + session = Session() + res = session.query(Map).filter("tweet_id =:tid").params(tid=tid).all() + return res diff --git a/rainbowstream/rainbow.db b/rainbowstream/rainbow.db new file mode 100644 index 0000000000000000000000000000000000000000..fcd109907ed341b3d88ab24bef1debebc9d8f297 GIT binary patch literal 8192 zcmeI#y$ZrG5C`x}D@qHZ;NW_Tpr9_kfK`HswQ8+{lT@rw@CykzyZV?ug`?L&baU7L zaUr>U4Eb$0pZTdtczZnWW5XRPlTy@WCL&vgCF2!J7P(g;b5?%~n_Bl;QEsWyjU*8e zfB*y_009U<00Izz00bZafj<{8s!**|)OBLw^)A`RCrPUxYA@0pc|BjVY;fIm&T)EJ zA1|wP!^0rb108ZOi8xsJev@6tT$03m9A+kmsw~_Vc()3g5@#p;b fJ_H~D0SG_<0uX=z1Rwwb2teQm1@g)!+iE*cKKv`1 literal 0 HcmV?d00001 diff --git a/rainbowstream/rainbow.py b/rainbowstream/rainbow.py index 3a6c7e3..526437f 100644 --- a/rainbowstream/rainbow.py +++ b/rainbowstream/rainbow.py @@ -21,9 +21,10 @@ from dateutil import parser from .colors import * from .config import * +from .db import * g = {} - +db = RainbowDB() def draw(t, keyword=None): """ @@ -38,9 +39,15 @@ def draw(t, keyword=None): date = parser.parse(created_at) time = date.strftime('%Y/%m/%d %H:%M:%S') + res = db.tweet_query(tid) + if not res: + db.store(tid) + res = db.tweet_query(tid) + rid = res[0].rainbow_id + # Format info user = cycle_color(name) + grey(' ' + '@' + screen_name + ' ') - meta = grey('[' + time + '] [id=' + str(tid) + ']') + meta = grey('[' + time + '] [id=' + str(rid) + ']') tweet = text.split() # Highlight RT tweet = map(lambda x: grey(x) if x == 'RT' else x, tweet) @@ -178,10 +185,11 @@ def reply(): t = Twitter(auth=authen()) try: id = int(g['stuff'].split()[0]) - user = t.statuses.show(id=id)['user']['screen_name'] + tid = db.rainbow_query(id)[0].tweet_id + user = t.statuses.show(id=tid)['user']['screen_name'] status = ' '.join(g['stuff'].split()[1:]) status = '@' + user + ' ' + status.decode('utf-8') - t.statuses.update(status=status, in_reply_to_status_id=id) + t.statuses.update(status=status, in_reply_to_status_id=tid) except: print(red('Sorry I can\'t understand.')) sys.stdout.write(g['decorated_name']) @@ -194,11 +202,12 @@ def delete(): t = Twitter(auth=authen()) try: id = int(g['stuff'].split()[0]) - t.statuses.destroy(id=id) + tid = db.rainbow_query(id)[0].tweet_id + t.statuses.destroy(id=tid) print(green('Okay it\'s gone.')) except: print(red('Sorry I can\'t delete this tweet for you.')) - sys.stdout.write(g['decorated_name']) + sys.stdout.write(g['decorated_name']) def search(): @@ -365,6 +374,7 @@ def fly(): Main function """ get_decorated_name() + p = Process(target=stream) p.start() g['stream_pid'] = p.pid diff --git a/rainbowstream/table_def.py b/rainbowstream/table_def.py new file mode 100644 index 0000000..b6d14c5 --- /dev/null +++ b/rainbowstream/table_def.py @@ -0,0 +1,17 @@ +from sqlalchemy import * +from sqlalchemy.ext.declarative import declarative_base + +engine = create_engine('sqlite:///rainbow.db', echo=False) +Base = declarative_base() + +class Map(Base): + + __tablename__ = "map" + + rainbow_id = Column(Integer, primary_key=True) + tweet_id = Column(Integer) + + def __init__(self, tweet_id): + self.tweet_id = tweet_id + +Base.metadata.create_all(engine) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 4ec9a93..c9292f3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ python-dateutil==2.2 six==1.6.1 termcolor==1.1.0 twitter==1.14.3 +SQLAlchemy=0.9.4 \ No newline at end of file -- 2.25.1