121 lines
2.6 KiB
Python
121 lines
2.6 KiB
Python
import configparser, csv, datetime, html.parser, itertools, os, sqlite3, sys
|
|
|
|
class SetupException(Exception):
|
|
def __str__(self):
|
|
return "Seems like config.cfg has not been created yet or contains serious errors. Run setup.py to create it."
|
|
|
|
def getSetting(section, setting, path = "config.cfg"):
|
|
config = configparser.RawConfigParser()
|
|
config.read(path)
|
|
return config.get(section, setting)
|
|
|
|
def dbtype():
|
|
try:
|
|
return int(getSetting("Database", "type"))
|
|
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()
|
|
|
|
def dbpath():
|
|
try:
|
|
return getSetting("Database", "path")
|
|
except:
|
|
return SetupException()
|
|
|
|
###
|
|
|
|
def user():
|
|
try:
|
|
return getSetting("Romeo", "user")
|
|
except:
|
|
raise SetupException()
|
|
|
|
def password():
|
|
try:
|
|
return getSetting("Romeo", "pass")
|
|
except:
|
|
raise SetupException()
|
|
|
|
def dbCheck(db, create = False):
|
|
if (not create and dbInitialized(db)) or (create and not dbInitialized(db)):
|
|
return True
|
|
if create:
|
|
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")
|
|
|
|
|
|
def dbHelper(path, create = False):
|
|
db = dbObject(path)
|
|
dbCheck(db, create)
|
|
return db
|
|
|
|
def dbInitialized(db):
|
|
return db.isInitialized()
|
|
|
|
def fileExists(path):
|
|
return os.path.isfile(path)
|
|
|
|
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
|
|
|
|
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)
|
|
|
|
def unescapeText(text):
|
|
return html.parser.HTMLParser().unescape(text).replace("'","''")
|
|
|