diff --git a/funding/api.py b/funding/api.py index d898199..59c40e9 100644 --- a/funding/api.py +++ b/funding/api.py @@ -1,12 +1,11 @@ import requests -from flask import jsonify, send_from_directory, Response, request +from flask import jsonify, send_from_directory, Response from flask_yoloapi import endpoint, parameter -import settings from funding.bin.utils import get_ip from funding.bin.qr import QrCodeGenerator -from funding.factory import app, db -from funding.orm.orm import Proposal, User +from funding.factory import app +from funding.orm import Proposal @app.route('/api/1/proposals') diff --git a/funding/bin/daemon.py b/funding/bin/daemon.py index 90bd566..f29919c 100644 --- a/funding/bin/daemon.py +++ b/funding/bin/daemon.py @@ -4,7 +4,6 @@ import requests from requests.auth import HTTPDigestAuth import settings -from funding.orm.orm import User class Daemon: diff --git a/funding/bin/utils.py b/funding/bin/utils.py index e0b6bb4..d673b11 100644 --- a/funding/bin/utils.py +++ b/funding/bin/utils.py @@ -1,11 +1,7 @@ -import os -import json from datetime import datetime, date -import pyqrcode import requests -from flask import g, request -from flask.json import JSONEncoder +from flask import request import settings from funding.factory import cache @@ -14,7 +10,7 @@ from funding.factory import cache def json_encoder(obj): if isinstance(obj, (datetime, date)): return obj.isoformat() - raise TypeError ("Type %s not serializable" % type(obj)) + raise TypeError("Type %s not serializable" % type(obj)) class Summary: @@ -30,7 +26,7 @@ class Summary: @cache.cached(timeout=600, key_prefix="funding_stats") def fetch_stats(): from funding.factory import db - from funding.orm.orm import Proposal, User, Comment + from funding.orm import Proposal, User data = {} categories = settings.FUNDING_CATEGORIES diff --git a/funding/bin/utils_request.py b/funding/bin/utils_request.py index f285e8c..24e5142 100644 --- a/funding/bin/utils_request.py +++ b/funding/bin/utils_request.py @@ -1,9 +1,8 @@ -from datetime import datetime -from flask import session, g, request +from flask import request import settings from funding.bin.utils import Summary from funding.factory import app, db -from funding.orm.orm import Proposal, User, Comment +from funding.orm import User, Comment @app.context_processor @@ -41,11 +40,6 @@ def after_request(res): return res -@app.teardown_appcontext -def shutdown_session(**kwargs): - db.session.remove() - - @app.errorhandler(404) def error(err): return 'Error', 404 diff --git a/funding/factory.py b/funding/factory.py index c3be4d2..253e680 100644 --- a/funding/factory.py +++ b/funding/factory.py @@ -39,20 +39,15 @@ def _setup_session(app: Flask): def _setup_db(app: Flask): global db - - DB_URL = 'postgresql+psycopg2://{user}:{pw}@{url}/{db}'.format( + uri = 'postgresql+psycopg2://{user}:{pw}@{url}/{db}'.format( user=settings.PSQL_USER, pw=settings.PSQL_PASS, url=settings.PSQL_HOST, db=settings.PSQL_DB) - app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL + app.config['SQLALCHEMY_DATABASE_URI'] = uri db = SQLAlchemy(app) - import funding.orm - - with app.app_context(): - db.create_all() - db.session.commit() + db.create_all() def create_app(): @@ -87,7 +82,7 @@ def create_app(): @login_manager.user_loader def load_user(_id): - from funding.orm.orm import User + from funding.orm import User return User.query.get(int(_id)) # import routes diff --git a/funding/orm/orm.py b/funding/orm.py similarity index 99% rename from funding/orm/orm.py rename to funding/orm.py index b36e491..4cae7c5 100644 --- a/funding/orm/orm.py +++ b/funding/orm.py @@ -191,14 +191,14 @@ class Proposal(db.Model): return {"amount": amount, "pct": pct} @property - @cache.cached(timeout=60, key_prefix="fetch_prices") + @cache.cached(timeout=60, make_cache_key=lambda p: f"proposal_balance_{p.id}") def balance(self): """This property retrieves the current funding status of this proposal. It uses Redis cache to not spam the daemon too much. Returns a nice dictionary containing all relevant proposal funding info""" from funding.bin.utils import Summary, coin_to_usd - from funding.factory import cache, db + from funding.factory import db rtn = {'sum': 0.0, 'txs': [], 'pct': 0.0, 'available': 0} if self.archived: @@ -263,7 +263,6 @@ class Proposal(db.Model): @classmethod def find_by_args(cls, status: int = None, cat: str = None, limit: int = 20, offset=0): - from funding.factory import db if isinstance(status, int) and status not in settings.FUNDING_STATUSES.keys(): raise NotImplementedError('invalid status') if isinstance(cat, str) and cat not in settings.FUNDING_CATEGORIES: diff --git a/funding/orm/__init__.py b/funding/orm/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/funding/routes.py b/funding/routes.py index 93580b3..4030897 100644 --- a/funding/routes.py +++ b/funding/routes.py @@ -1,15 +1,14 @@ from datetime import datetime import requests -from flask import request, redirect, Response, abort, render_template, url_for, flash, make_response, send_from_directory, jsonify -from flask_login import login_user , logout_user , current_user, login_required, current_user +from flask import request, redirect, render_template, url_for, flash, make_response, send_from_directory, jsonify +from flask_login import login_user , logout_user , current_user from dateutil.parser import parse as dateutil_parse from flask_yoloapi import endpoint, parameter import settings -from funding.bin.utils import Summary from funding.factory import app, db, cache -from funding.orm.orm import Proposal, User, Comment +from funding.orm import Proposal, User, Comment @app.route('/') @@ -65,7 +64,7 @@ def proposal_comment(pid, text, cid): @app.route('/proposal//comment/') def propsal_comment_reply(cid, pid): - from funding.orm.orm import Comment + from funding.orm import Comment c = Comment.find_by_id(cid) if not c or c.replied_to: return redirect(url_for('proposal', pid=pid)) @@ -256,9 +255,6 @@ def proposals(status, page, cat): @app.route('/donate') def donate(): - from funding.bin.daemon import Daemon - from funding.factory import cache, db - return "devfund page currently not working :D" data_default = {'sum': 0, 'txs': []} diff --git a/funding/routes_admin.py b/funding/routes_admin.py deleted file mode 100644 index da9ed19..0000000 --- a/funding/routes_admin.py +++ /dev/null @@ -1,8 +0,0 @@ -from flask_login import login_required -from funding.factory import app, db - - -@app.route('/admin/index') -@login_required -def admin_home(): - return 'yep'