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