session = Session()
res = session.query(Theme).all()
return res
+
+ def semaphore_store(self, flag):
+ """
+ Store semaphore flag
+ """
+ Session = sessionmaker(bind=self.engine)
+ session = Session()
+ th = Semaphore(flag)
+ session.add(th)
+ session.commit()
+
+ def semaphore_update(self, flag):
+ """
+ Update semaphore flag
+ """
+ Session = sessionmaker(bind=self.engine)
+ session = Session()
+ res = session.query(Semaphore).all()
+ for r in res:
+ r.flag = flag
+ session.commit()
+
+ def semaphore_query(self):
+ """
+ Query semaphore
+ """
+ Session = sessionmaker(bind=self.engine)
+ session = Session()
+ res = session.query(Semaphore).all()
+ return res[0].flag
return globals()[func_name]
-def draw(t, iot=False, keyword=None, fil=[], ig=[]):
+def draw(t, iot=False, keyword=None, check_semaphore=False, fil=[], ig=[]):
"""
Draw the rainbow
"""
)
line3 = ' ' + tweet
+ # Check the semaphore lock
+ if check_semaphore:
+ while db.semaphore_query():
+ time.sleep(0.5)
+
+ # Output
printNicely('')
printNicely(line1)
printNicely(line2)
def get_decorated_name():
"""
- Beginning of every line
+ Init function
"""
+ # Get name
t = Twitter(auth=authen())
name = '@' + t.account.verify_credentials()['screen_name']
g['original_name'] = name[1:]
g['decorated_name'] = color_func(c['DECORATED_NAME'])('[' + name + ']: ')
+ # Theme init
files = os.listdir(os.path.dirname(__file__) + '/colorset')
themes = [f.split('.')[0] for f in files if f.split('.')[-1] == 'json']
g['themes'] = themes
db.theme_store(c['THEME'])
+ # Semaphore init
+ db.semaphore_store(False)
+
def switch():
"""
except:
cmd = ''
g['cmd'] = cmd
- # Save cmd to global variable and call process
try:
+ # Lock the semaphore
+ db.semaphore_update(True)
+ # Save cmd to global variable and call process
g['stuff'] = ' '.join(line.split()[1:])
+ # Process the command
process(cmd)()
+ # Not re-display
+ if cmd in ['switch', 't', 'rt', 'rep']:
+ g['prefix'] = False
+ else:
+ g['prefix'] = True
+ # Release the semaphore lock
+ db.semaphore_update(False)
except Exception:
printNicely(red('OMG something is wrong with Twitter right now.'))
- # Not redisplay prefix
- if cmd in ['switch', 't', 'rt', 'rep']:
- g['prefix'] = False
- else:
- g['prefix'] = True
def stream(domain, args, name='Rainbow Stream'):
t=tweet,
iot=args.image_on_term,
keyword=args.track_keywords,
+ check_semaphore=True,
fil=args.filter,
ig=args.ignore,
)
self.theme_name = theme_name
+class Semaphore(Base):
+
+ __tablename__ = "semaphore"
+
+ semaphore_id = Column(Integer, primary_key=True)
+ flag = Column(Boolean)
+
+ def __init__(self, flag):
+ self.flag = flag
+
+
def init_db():
Base.metadata.create_all(engine)