Archived
init
This commit is contained in:
commit
ef62e85097
9 files changed
+345
No files matched your search
@@ -0,0 +1,7 @@
|
||||
*.pyc
|
||||
|
||||
slackorator.cfg
|
||||
tldb.cfg
|
||||
tweetorator.cfg
|
||||
|
||||
tannlegen.log
|
||||
Executable
+44
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env python
|
||||
#coding: utf-8
|
||||
import ConfigParser
|
||||
import json
|
||||
import logging
|
||||
import re
|
||||
import requests
|
||||
import sys
|
||||
|
||||
"""
|
||||
hello this is documentation
|
||||
"""
|
||||
|
||||
__version__ = "0.1"
|
||||
|
||||
template = {
|
||||
'channel': '#tannlegen',
|
||||
'username': 'Tannlegen',
|
||||
'icon_emoji': ':beers:'
|
||||
}
|
||||
|
||||
configname = "slackorator.cfg"
|
||||
cfg = ConfigParser.RawConfigParser()
|
||||
cfg.read(configname)
|
||||
|
||||
headers = {'content-type': 'application/json'}
|
||||
hook = cfg.get("stuff", "hook")
|
||||
|
||||
def post_confession(text):
|
||||
# Return if text only contains whitespace
|
||||
if re.search(r'\S', text) is None:
|
||||
logging.info("Confession only containing whitespace. Abort")
|
||||
return
|
||||
|
||||
logging.info("Attempting to post confession to slack")
|
||||
try:
|
||||
r = requests.post(hook,
|
||||
data=json.dumps(dict({'text': text}, **template)),
|
||||
headers=headers)
|
||||
r.raise_for_status()
|
||||
except Exception, e:
|
||||
logging.error("Failed to post confession to slack")
|
||||
logging.exception(e)
|
||||
pass
|
||||
@@ -0,0 +1,3 @@
|
||||
[stuff]
|
||||
hook = https://hooks.slack.com/services/something/something/dangerzone
|
||||
|
||||
Executable
+73
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env python
|
||||
#coding: utf-8
|
||||
import sys
|
||||
import urwid
|
||||
import random
|
||||
import tweetorator
|
||||
import slackorator
|
||||
import os
|
||||
import logging
|
||||
from time import sleep
|
||||
|
||||
logging.basicConfig(format='[%(asctime)s] %(levelname)s: %(message)s', filename='tannlegen.log', level=logging.DEBUG)
|
||||
|
||||
__version__ = "0.2"
|
||||
|
||||
asciiheader = """ ___ ___ ___ ___ ___ ___ ___ ___ ___ \n /\ \ /\ \ /\__\ /\__\ /\__\ /\ \ /\ \ /\ \ /\__\ \n \:\ \ /::\ \ /::| | /::| | /:/ / /::\ \ /::\ \ /::\ \ /::| | \n \:\ \ /:/\:\ \ /:|:| | /:|:| | /:/ / /:/\:\ \ /:/\:\ \ /:/\:\ \ /:|:| | \n /::\ \ /::\~\:\ \ /:/|:| |__ /:/|:| |__ /:/ / /::\~\:\ \ /:/ \:\ \ /::\~\:\ \ /:/|:| |__ \n /:/\:\__\ /:/\:\ \:\__\ /:/ |:| /\__\ /:/ |:| /\__\ /:/__/ /:/\:\ \:\__\ /:/__/_\:\__\ /:/\:\ \:\__\ /:/ |:| /\__\\\n /:/ \/__/ \/__\:\/:/ / \/__|:|/:/ / \/__|:|/:/ / \:\ \ \:\~\:\ \/__/ \:\ /\ \/__/ \:\~\:\ \/__/ \/__|:|/:/ /\n/:/ / \::/ / |:/:/ / |:/:/ / \:\ \ \:\ \:\__\ \:\ \:\__\ \:\ \:\__\ |:/:/ / \n\/__/ /:/ / |::/ / |::/ / \:\ \ \:\ \/__/ \:\/:/ / \:\ \/__/ |::/ / \n /:/ / /:/ / /:/ / \:\__\ \:\__\ \::/ / \:\__\ /:/ / \n \/__/ \/__/ \/__/ \/__/ \/__/ \/__/ \/__/ \/__/ \n Landets frieste tannlegestol"""
|
||||
|
||||
palette = [
|
||||
('header', 'white', 'dark red'),
|
||||
('inside', '', 'dark green'),
|
||||
('outside', '', 'dark green'),
|
||||
('statusbar', 'white', 'dark red'),
|
||||
('err', 'black', 'dark red'),
|
||||
('suc', 'black', 'dark green')]
|
||||
|
||||
def get_edit_box(prompt=None):
|
||||
prompts = [u"What's happening?",
|
||||
u"How are you feeling?",
|
||||
u"What's going on?",
|
||||
u"How are you doing?",
|
||||
u"How's it going?"]
|
||||
if not prompt:
|
||||
prompt = random.choice(prompts)
|
||||
prompt = prompt + ":\n"
|
||||
return urwid.Edit(prompt)
|
||||
|
||||
def exit_on_q(key):
|
||||
if key in ('q', 'Q'):
|
||||
raise urwid.ExitMainLoop()
|
||||
|
||||
class ConfessionBox(urwid.Filler):
|
||||
def keypress(self, size, key):
|
||||
"""
|
||||
if key == 'f12':
|
||||
statusbar.base_widget.set_text([('err', u"test err"),('suc', u"test suc")])
|
||||
"""
|
||||
if key != 'enter':
|
||||
return super(ConfessionBox, self).keypress(size, key)
|
||||
text = self.original_widget.get_edit_text()
|
||||
tweetorator.post_confession(text)
|
||||
#slackorator.post_confession(text)
|
||||
self.original_widget = get_edit_box()
|
||||
|
||||
outside = urwid.AttrMap(urwid.Divider(), 'outside')
|
||||
inside = urwid.AttrMap(urwid.Divider(), 'inside')
|
||||
text = urwid.AttrMap(urwid.Text(asciiheader, align='center'), 'header')
|
||||
pile = urwid.Pile([])
|
||||
for item in [outside, inside, text, inside, outside]:
|
||||
pile.contents.append((item, pile.options()))
|
||||
|
||||
edit = get_edit_box()
|
||||
bf = ConfessionBox(edit, valign='top')
|
||||
|
||||
statusbar = urwid.AttrMap(urwid.Text(u"Status bar of epic failure"), 'statusbar')
|
||||
|
||||
frame = urwid.Frame(bf, pile, statusbar)
|
||||
|
||||
loop = urwid.MainLoop(frame, palette, unhandled_input=exit_on_q)
|
||||
loop.widget = frame
|
||||
try:
|
||||
loop.run()
|
||||
except:
|
||||
logging.error("GREPTHISLINE: Random error in loop:%s" %sys.exc_info()[0])
|
||||
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env python
|
||||
#coding: utf-8
|
||||
import urwid
|
||||
from time import sleep
|
||||
|
||||
palette = [
|
||||
('streak', '', '', '', '#ffa', '#60a'),
|
||||
('inside', '', '', '', 'g38', '#808'),
|
||||
('outside', '', '', '', 'g27', '#a06'),
|
||||
('bg', '', '', '', '#ffa', '#606'),
|
||||
('err', '', '', '', '#000', '#f00'),
|
||||
('suc', '', '', '', '#000', '#0f0') ]
|
||||
|
||||
def exit_on_q(key):
|
||||
if key in ('q', 'Q'):
|
||||
raise urwid.ExitMainLoop()
|
||||
|
||||
class ConfessionBox(urwid.Filler):
|
||||
def keypress(self, size, key):
|
||||
if key == 'f12':
|
||||
statusbar.base_widget.set_text([('err', u"db"),('suc', u"tw")])
|
||||
if key != 'enter':
|
||||
return super(ConfessionBox, self).keypress(size, key)
|
||||
text = self.original_widget.get_edit_text()
|
||||
self.original_widget = urwid.Edit(text +"\n")
|
||||
|
||||
placeholder = urwid.SolidFill()
|
||||
loop = urwid.MainLoop(placeholder, palette, unhandled_input=exit_on_q)
|
||||
loop.screen.set_terminal_properties(colors=256)
|
||||
|
||||
outside = urwid.AttrMap(urwid.Divider(), 'outside')
|
||||
inside = urwid.AttrMap(urwid.Divider(), 'inside')
|
||||
text = urwid.AttrMap(urwid.Text(u"\nHello World\n", align='center'), 'streak')
|
||||
pile = urwid.Pile([])
|
||||
for item in [outside, inside, text, inside, outside]:
|
||||
pile.contents.append((item, pile.options()))
|
||||
|
||||
edit = urwid.Edit(u"What?:\n")
|
||||
bf = ConfessionBox(edit, valign='top')
|
||||
|
||||
statusbar = urwid.AttrMap(urwid.Text(u"Status bar"), 'bg')
|
||||
|
||||
frame = urwid.Frame(bf, pile, statusbar)
|
||||
|
||||
loop.widget = frame
|
||||
loop.run()
|
||||
@@ -0,0 +1,87 @@
|
||||
#!/usr/bin/evn python
|
||||
#coding: utf-8
|
||||
import MySQLdb
|
||||
import json
|
||||
import time
|
||||
import ConfigParser
|
||||
import locale
|
||||
import logging
|
||||
from datetime import datetime
|
||||
from dateutil import tz
|
||||
|
||||
__version__ = "1.3"
|
||||
|
||||
_con = None
|
||||
_cfg = None
|
||||
|
||||
def loadCfg(configname):
|
||||
global _cfg
|
||||
_cfg = ConfigParser.RawConfigParser()
|
||||
_cfg.read(configname)
|
||||
|
||||
def connect():
|
||||
global _con
|
||||
try:
|
||||
_con = MySQLdb.connect(host=_cfg.get('DB', 'host'), user=_cfg.get('DB', 'username'),
|
||||
db=_cfg.get('DB', 'dbname'), passwd=_cfg.get('DB', 'password'), connect_timeout=5)
|
||||
except MySQLdb.OperationalError:
|
||||
logging.error('Could not connect to database')
|
||||
|
||||
def disconnect():
|
||||
if _con.open:
|
||||
_con.close()
|
||||
else:
|
||||
logging.warn('Tried do disconnect from closed database connection')
|
||||
|
||||
def addConfession(text, tweet=None):
|
||||
connect()
|
||||
cur = _con.cursor()
|
||||
res = 0L
|
||||
try:
|
||||
if tweet:
|
||||
created_at = _twitterUTCToLocal(json.loads(tweet)['created_at'])
|
||||
tweet_id_str = str(json.loads(tweet)['id'])
|
||||
sql = u'INSERT INTO confession (text, created_at, tweet_id_str) VALUES (%s, %s, %s)'
|
||||
res = cur.execute(sql, (text, created_at, tweet_id_str))
|
||||
insertid = cur.lastrowid
|
||||
else:
|
||||
sql = u'INSERT INTO confession (text) VALUES (%s)'
|
||||
res = cur.execute(sql, (text,))
|
||||
insertid = cur.lastrowid
|
||||
except MySQLdb.Error as e:
|
||||
logging.error(e)
|
||||
pass
|
||||
|
||||
if not res:
|
||||
logging.warn('Result was empty')
|
||||
else:
|
||||
logging.debug('Inserted new confession with id: %s', insertid)
|
||||
|
||||
cur.close()
|
||||
disconnect()
|
||||
return res
|
||||
|
||||
def _twitterUTCToUTC(twittertime):
|
||||
twitterutc = u'%a %b %d %H:%M:%S +0000 %Y'
|
||||
utc = u'%Y-%m-%d %H:%M:%S'
|
||||
|
||||
#curloc = locale.getlocale()
|
||||
#locale.setlocale(locale.LC_ALL, ('en_US', 'UTF8'))
|
||||
newtime = time.strftime(utc, time.strptime(twittertime, twitterutc))
|
||||
#locale.setlocale(locale.LC_ALL, curloc)
|
||||
|
||||
return newtime
|
||||
|
||||
def _twitterUTCToLocal(twittertime):
|
||||
twitterutcformat = u'%a %b %d %H:%M:%S +0000 %Y'
|
||||
datetimeformat = u'%Y-%m-%d %H:%M:%S'
|
||||
|
||||
from_zone = tz.tzutc()
|
||||
to_zone = tz.tzlocal()
|
||||
|
||||
utc = datetime.strptime(twittertime, twitterutcformat).replace(tzinfo=from_zone)
|
||||
#utc = utc.replace(tzinfo=from_zone)
|
||||
|
||||
localtime = utc.astimezone(to_zone)
|
||||
|
||||
return localtime.strftime('%Y-%m-%d %H:%M:%S')
|
||||
@@ -0,0 +1,6 @@
|
||||
[DB]
|
||||
host = example.com
|
||||
dbname = yolo_db
|
||||
username = herp
|
||||
password = derp
|
||||
|
||||
Executable
+73
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env python
|
||||
#coding: utf-8
|
||||
import sys
|
||||
import twitter
|
||||
import logging
|
||||
import tldb
|
||||
import re
|
||||
|
||||
"""
|
||||
THE NINJA IS STRONG WITH THIS ONE
|
||||
TODO: FIX EVERYTHING
|
||||
"""
|
||||
|
||||
__version__ = "0.1"
|
||||
|
||||
_api = None
|
||||
initialized = False
|
||||
|
||||
def init():
|
||||
global _api
|
||||
|
||||
# TWITTER IS FUCKED. paalbra 2016-06-08
|
||||
# cfg = ConfigParser.RawConfigParser()
|
||||
# cfg.read("tweetorator.cfg")
|
||||
# consumer_key = cfg.get("twitter", "consumer_key")
|
||||
# consumer_secret = cfg.get("twitter", "consumer_secret")
|
||||
# access_token_key = cfg.get("twitter", "access_token_key")
|
||||
# access_token_secret = cfg.get("twitter", "access_token_secret")
|
||||
# _api = twitter.Api(consumer_key = consumer_key,
|
||||
# consumer_secret = consumer_secret,
|
||||
# access_token_key = access_token_key,
|
||||
# access_token_secret = access_token_secret)
|
||||
#
|
||||
# logging.debug("VerifyCredentials: %s" % _api.VerifyCredentials())
|
||||
|
||||
tldb.loadCfg('tldb.cfg')
|
||||
|
||||
def post_confession(text):
|
||||
global _api
|
||||
|
||||
# Return if text only contains whitespace
|
||||
if re.search(r'\S', text) is None:
|
||||
logging.info("Confession only containing whitespace. Abort")
|
||||
return
|
||||
|
||||
if not initialized:
|
||||
init()
|
||||
|
||||
## UNFUCK START
|
||||
logging.info("Adding unfucked confession")
|
||||
try:
|
||||
tldb.addConfession(text)
|
||||
except:
|
||||
logging.error("%s, 0, text was >>%s<<" % (sys.exc_info()[0], text))
|
||||
pass
|
||||
## UNFUCK END
|
||||
|
||||
# THIS IS FUCKED BEFAUSE TWITTER IS FUCKED. paalbra 2016-06-08
|
||||
# if len(text) > 140:
|
||||
# logging.info("Adding confession longer than 140")
|
||||
# try:
|
||||
# tldb.addConfession(text)
|
||||
# except:
|
||||
# logging.error("%s, 1, text was >>%s<<" % (sys.exc_info()[0], text))
|
||||
# pass
|
||||
# else:
|
||||
# logging.info("Adding confession shorter than 140")
|
||||
# try:
|
||||
# status = _api.PostUpdate(text)
|
||||
# tldb.addConfession(text, status.AsJsonString())
|
||||
# except:
|
||||
# logging.error("%s, 2, text was >>%s<<" % (sys.exc_info()[0], text))
|
||||
# pass
|
||||
@@ -0,0 +1,6 @@
|
||||
[twitter]
|
||||
access_token_key = very_secret_acces_token_key
|
||||
access_token_secret = very_secret_access_token_secret
|
||||
consumer_key = very_secret_consumer_key
|
||||
consumer_secret = kindof_cute_consumer_secret
|
||||
|
||||
Reference in new issue
Block a user