diff --git a/main.py b/main.py index 6f69e32..73fb2d9 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,6 @@ import json import dateutil +import configparser from datetime import datetime, timezone from flask import Flask, request, abort @@ -8,10 +9,15 @@ from feedgen.feed import FeedGenerator from pony import orm from pony.orm import Required, Optional, Set +config = configparser.ConfigParser() +config.read('settings.ini') + +site_url = config['general']['site_url'] +if site_url[:-1] != '/': + site_url += '/' +site_url += 'feeds/' + app = Flask(__name__) - -SITE_URL = 'http://localhost:5000/feeds/' - db = orm.Database() class Feed(db.Entity): @@ -31,7 +37,21 @@ class Item(db.Entity): content = Required(str) date = Required(datetime) -db.bind(provider='sqlite', filename='db.sqlite', create_db=True) +db_config = config['db'] +db_adapter = db_config['adapter'] + +if db_adapter == 'sqlite': + filename = db_config['filename'] + db.bind(provider='sqlite', filename=filename, create_db=True) +elif db_adapter == 'postgres': + user = db_config['user'] + password = db_config['password'] + host = db_config['host'] + database = db_config['database'] + db.bind(provider='postgres', user=user, password=password, host=host, database=database) +else: + raise Exception('unhandled db adapter: {}'.format(db_adapter)) + db.generate_mapping(create_tables=True) orm.set_sql_debug(True) @@ -54,7 +74,7 @@ def add_feed(): if 'title' not in data or 'description' not in data or 'admin_token' not in data: abort(400, "missing title or description or admin_token") - url = SITE_URL + slug + url = site_url + slug with orm.db_session: feed = Feed(slug=slug, diff --git a/requirements.txt b/requirements.txt index 7e19f8b..d8cd83a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ Flask feedgen pony +psycopg2cffi diff --git a/settings.ini b/settings.ini new file mode 100644 index 0000000..7a8c4b9 --- /dev/null +++ b/settings.ini @@ -0,0 +1,9 @@ +[general] +site_url=http://localhost:5000 + +[db] +adapter=postgres +host=localhost +user=postgres +password=mysecretpassword +database=postgres