twitools/setuptools/__init__.py

173 lines
3.4 KiB
Python
Raw Normal View History

2017-02-28 11:04:18 +00:00
import ast, configparser, csv, datetime, html.parser, itertools, os, sqlite3, sys, tweepy
2015-10-10 22:10:57 +00:00
TWITTER = 0
MARKOV = 1
LYRICS = 2
2015-10-10 22:10:57 +00:00
class SetupException(Exception):
def __str__(self):
2016-05-30 19:58:53 +00:00
return "Seems like config.cfg has not been created yet or contains serious errors. Run setup.py to create it."
2015-10-10 22:10:57 +00:00
2016-05-30 19:58:53 +00:00
def getSetting(section, setting, path = "config.cfg"):
2015-10-10 22:10:57 +00:00
config = configparser.RawConfigParser()
2016-05-30 19:58:53 +00:00
config.read(path)
2015-10-10 22:10:57 +00:00
return config.get(section, setting)
2017-02-28 10:43:28 +00:00
def getListSetting(section, setting, path = "config.cfg"):
return ast.literal_eval(getSetting(section, setting, path))
2016-05-30 19:58:53 +00:00
def dbtype():
try:
return int(getSetting("Database", "type"))
2016-05-30 19:58:53 +00:00
except:
return 0 # for SQLite3
### Must only be called AFTER dbtype()! ###
def dbhost():
try:
return getSetting("Database", "host")
except:
raise SetupException()
def dbuser():
try:
return getSetting("Database", "user")
except:
raise SetupException()
def dbpass():
try:
return getSetting("Database", "pass")
except:
raise SetupException()
def dbname():
try:
return getSetting("Database", "name")
except:
raise SetupException()
2015-10-10 22:10:57 +00:00
def dbpath():
try:
return getSetting("Database", "path")
except:
2016-05-30 19:58:53 +00:00
return SetupException()
###
2015-10-10 22:10:57 +00:00
def sectionName(section):
if section == TWITTER:
return "Twitter"
elif section == MARKOV:
return "Markov"
elif section == LYRICS:
return "Lyrics"
2015-10-10 22:10:57 +00:00
def cke():
try:
return getSetting("Twitter", "cke")
except:
raise SetupException()
2015-10-10 22:10:57 +00:00
def cse():
try:
return getSetting("Twitter", "cse")
except:
raise SetupException()
2015-10-10 22:10:57 +00:00
def ato(section = TWITTER):
2015-10-10 22:10:57 +00:00
try:
return getSetting(sectionName(section), "ato")
2015-10-10 22:10:57 +00:00
except:
raise SetupException()
def ase(section = TWITTER):
2015-10-10 22:10:57 +00:00
try:
return getSetting(sectionName(section), "ase")
2015-10-10 22:10:57 +00:00
except:
raise SetupException()
2017-02-08 12:06:17 +00:00
def botname():
try:
return getSetting("Telegram", "botname")
except:
return SetupException()
def token():
try:
return getSetting("Telegram", "token")
except:
return SetupException()
2017-02-08 12:06:17 +00:00
def url():
try:
return getSetting("Bot", "url")
except:
return SetupExecption()
2015-04-21 22:42:20 +00:00
def dbCheck(db, create = False):
2015-04-22 00:06:32 +00:00
if (not create and dbInitialized(db)) or (create and not dbInitialized(db)):
2015-04-21 22:16:42 +00:00
return True
2015-04-21 22:42:20 +00:00
if create:
2015-04-22 00:06:32 +00:00
raise ValueError("Provided database file " + db.path + " is already initialized. Remove it manually before trying to recreate it.")
raise ValueError("Provided database file " + db.path + " is not initialized. Create it using makedb.py or csvdb.py")
2015-04-21 22:16:42 +00:00
2015-04-21 22:42:20 +00:00
def dbHelper(path, create = False):
2015-04-21 22:21:16 +00:00
db = dbObject(path)
2015-04-21 22:42:20 +00:00
dbCheck(db, create)
2015-04-21 22:21:16 +00:00
return db
2015-04-21 22:16:42 +00:00
2015-04-21 22:21:16 +00:00
def dbInitialized(db):
2015-04-21 22:16:42 +00:00
return db.isInitialized()
def fileExists(path):
return os.path.isfile(path)
2015-04-21 22:16:42 +00:00
def getDate(date):
try:
return datetime.datetime.strptime(date, '%Y-%m-%d')
except ValueError:
raise ValueError("Dates must be in YYYY-MM-DD format.")
def paginate(iterable, page_size):
while True:
i1, i2 = itertools.tee(iterable)
iterable, page = (itertools.islice(i1, page_size, None), list(itertools.islice(i2, page_size)))
if len(page) == 0:
break
yield page
2015-04-21 22:16:42 +00:00
def parseArgs(argv):
args = []
path = None
nextpath = False
for a in argv[1:]:
if nextpath:
path = a
nextpath = False
elif a == "-f":
if path != None:
raise ValueError("You can only pass one database file.")
nextpath = True
else:
args += [a]
return args, path
def printCSV(inlist):
writer = csv.writer(sys.stdout)
writer.writerows(inlist)
2016-04-07 22:15:21 +00:00
def unescapeText(text):
return html.parser.HTMLParser().unescape(text).replace("'","''")