From a441d7f2c99a49a5f5b2fc1515b8728fb4c5d509 Mon Sep 17 00:00:00 2001 From: Eric Barbour Date: Jun 28 2016 19:04:46 +0000 Subject: [PATCH 1/2] Fixes in order to get application running Changes in order for the application to run: * Add methods arg to app.route so post will work * Call app.run * Remove relative imports that were causing errors --- diff --git a/.gitignore b/.gitignore index d8351fc..a5ace30 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ dist *.egg-info *.db .tox +*.pyc \ No newline at end of file diff --git a/plus_plus_service/__init__.py b/plus_plus_service/__init__.py index 4d60016..76c368a 100644 --- a/plus_plus_service/__init__.py +++ b/plus_plus_service/__init__.py @@ -1,27 +1,21 @@ import os import flask -from .karma import KarmaManager, NoSuchFASUser - - -APP = flask.Flask(__name__) -APP.config.from_object('{}.defaults'.format(__name__)) -if 'FLASK_SETTINGS' in os.environ: - APP.config.from_envvar('FLASK_SETTINGS') - +from karma import KarmaManager, NoSuchFASUser +from app import APP def check_auth(): # Do something like https://pagure.io/pagure/blob/master/f/pagure/api/__init__.py#_79 pass - # # Database # + @APP.before_request def db_connect(): - from .database import Database + from database import Database flask.g.db = Database( APP.name, APP.config["SQLALCHEMY_DATABASE_URI"] ).get_session() @@ -32,12 +26,12 @@ def db_disconnect(exception=None): if hasattr(flask.g, "db"): flask.g.db.remove() - # # Views # -@APP.route('/user/') +@APP.route('/user//', methods=['GET', 'POST']) +@APP.route('/user/', methods=['GET', 'POST']) def view_user(username): kmgr = KarmaManager(flask.g.db) @@ -49,13 +43,12 @@ def view_user(username): elif flask.request.method == 'POST': # Change the user's karma - if flask.g.fas_user == username: - return "You may not modify your own karma.", 403 + # if flask.g.fas_user == username: + # return "You may not modify your own karma.", 403 increment = ('decrement' in flask.request.form and bool(flask.request.form['decrement'])) try: - current_karma = kmgr.change( - flask.g.fas_user, username, increment), + current_karma = kmgr.change(flask.g.fas_user, username, increment), except NoSuchFASUser as error: return str(error), 404 return flask.jsonify(username=username, karma=current_karma) @@ -63,5 +56,8 @@ def view_user(username): else: flask.abort(400) # Bad Request +if __name__ == '__main__': + APP.run() + # vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79: diff --git a/plus_plus_service/app.py b/plus_plus_service/app.py new file mode 100644 index 0000000..f848f92 --- /dev/null +++ b/plus_plus_service/app.py @@ -0,0 +1,8 @@ +import os + +import flask + +APP = flask.Flask(__name__) +APP.config.from_pyfile('defaults.py') +if 'FLASK_SETTINGS' in os.environ: + APP.config.from_envvar('FLASK_SETTINGS') diff --git a/plus_plus_service/database.py b/plus_plus_service/database.py index 7ffac87..c36f1eb 100644 --- a/plus_plus_service/database.py +++ b/plus_plus_service/database.py @@ -26,7 +26,7 @@ class Database(object): def get_session(self): session = scoped_session(sessionmaker( autocommit=False, autoflush=False, bind=self.engine)) - from .models import Base + from models import Base Base.query = session.query_property() return session @@ -44,7 +44,7 @@ class Database(object): # import all modules here that might define models so that # they will be registered properly on the metadata. Otherwise # you will have to import them first before calling init_db() - from .models import Base + from models import Base Base.metadata.create_all(bind=self.engine) alembic_command.stamp(self.alembic_cfg, "head") diff --git a/plus_plus_service/karma.py b/plus_plus_service/karma.py index f9bbea6..8b2fd96 100644 --- a/plus_plus_service/karma.py +++ b/plus_plus_service/karma.py @@ -4,8 +4,8 @@ import socket from sqlalchemy.orm.exc import NoResultFound from sqlalchemy.sql.expression import func -from .lib import make_fas_client, get_current_release, load_fedmsg_config -from .models import Vote +from lib import make_fas_client, get_current_release, load_fedmsg_config +from models import Vote import logging logger = logging.getLogger(__name__) diff --git a/plus_plus_service/lib.py b/plus_plus_service/lib.py index 63b1c6b..8b69a70 100644 --- a/plus_plus_service/lib.py +++ b/plus_plus_service/lib.py @@ -9,7 +9,7 @@ def make_fas_client(): # Initialize FAS client # To get the information, we need a username and password to FAS. # DO NOT COMMIT YOUR USERNAME AND PASSWORD TO THE PUBLIC REPOSITORY! - from . import APP + from app import APP return AccountSystem( APP.config["FAS_URL"], username=APP.config["FAS_USERNAME"], diff --git a/plus_plus_service/migrations/env.py b/plus_plus_service/migrations/env.py index b2d231e..14145a6 100644 --- a/plus_plus_service/migrations/env.py +++ b/plus_plus_service/migrations/env.py @@ -3,8 +3,8 @@ from sqlalchemy import create_engine, pool # add your model's MetaData object here # for 'autogenerate' support -from plus_plus_service import APP -from plus_plus_service.models import Base +from app import APP +from models import Base url = APP.config["SQLALCHEMY_DATABASE_URI"] target_metadata = Base.metadata diff --git a/plus_plus_service/scripts.py b/plus_plus_service/scripts.py index e615d36..6fe750f 100644 --- a/plus_plus_service/scripts.py +++ b/plus_plus_service/scripts.py @@ -1,5 +1,5 @@ -from . import APP -from .database import Database +from app import APP +from database import Database def sync_db(): From e5535c7c60e34ae898fb817ee9837acbe8114d94 Mon Sep 17 00:00:00 2001 From: Eric Barbour Date: Jun 28 2016 19:24:25 +0000 Subject: [PATCH 2/2] Fix flake8, bad variable naming, and style --- diff --git a/plus_plus_service/__init__.py b/plus_plus_service/__init__.py index 76c368a..af6a8bc 100644 --- a/plus_plus_service/__init__.py +++ b/plus_plus_service/__init__.py @@ -4,8 +4,10 @@ import flask from karma import KarmaManager, NoSuchFASUser from app import APP + def check_auth(): - # Do something like https://pagure.io/pagure/blob/master/f/pagure/api/__init__.py#_79 + # TODO something like: + # https://pagure.io/pagure/blob/master/f/pagure/api/__init__.py#_79 pass # @@ -16,9 +18,8 @@ def check_auth(): @APP.before_request def db_connect(): from database import Database - flask.g.db = Database( - APP.name, APP.config["SQLALCHEMY_DATABASE_URI"] - ).get_session() + flask.g.db = Database(APP.name, + APP.config["SQLALCHEMY_DATABASE_URI"]).get_session() @APP.teardown_appcontext @@ -30,34 +31,33 @@ def db_disconnect(exception=None): # Views # + @APP.route('/user//', methods=['GET', 'POST']) @APP.route('/user/', methods=['GET', 'POST']) def view_user(username): - kmgr = KarmaManager(flask.g.db) + karma_manager = KarmaManager(flask.g.db) if flask.request.method == 'GET': # Get the user's stats - stats = kmgr.stats(username) + stats = karma_manager.stats(username) stats.update(dict(username=username)) return flask.jsonify(stats) elif flask.request.method == 'POST': # Change the user's karma - # if flask.g.fas_user == username: - # return "You may not modify your own karma.", 403 + if flask.g.fas_user == username: + return "You may not modify your own karma.", 403 increment = ('decrement' in flask.request.form and bool(flask.request.form['decrement'])) try: - current_karma = kmgr.change(flask.g.fas_user, username, increment), + current_karma = karma_manager.change(flask.g.fas_user, username, + increment), except NoSuchFASUser as error: return str(error), 404 return flask.jsonify(username=username, karma=current_karma) - else: - flask.abort(400) # Bad Request if __name__ == '__main__': APP.run() - # vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79: diff --git a/plus_plus_service/database.py b/plus_plus_service/database.py index c36f1eb..dbfa599 100644 --- a/plus_plus_service/database.py +++ b/plus_plus_service/database.py @@ -1,9 +1,11 @@ +from sqlalchemy import create_engine, MetaData +from sqlalchemy.orm import scoped_session, sessionmaker + from alembic import command as alembic_command from alembic.config import Config as AlembicConfig from alembic.migration import MigrationContext from alembic.script import ScriptDirectory -from sqlalchemy import create_engine, MetaData -from sqlalchemy.orm import scoped_session, sessionmaker + class Database(object): diff --git a/plus_plus_service/karma.py b/plus_plus_service/karma.py index 8b2fd96..b60c826 100644 --- a/plus_plus_service/karma.py +++ b/plus_plus_service/karma.py @@ -29,16 +29,16 @@ class KarmaManager: req_params={'username': username}) return bool(request['success']) - def change(self, agent, recip, increment=True): + def change(self, agent, recipient, increment=True): # Send the karma change to fedmsg. # Store the change in the database. # Return the new karma value. # Check that the recipient is a FAS user - if not self._username_exists(recip): + if not self._username_exists(recipient): logger.info( - "Saw %s from %s, but %s not in FAS", recip, agent, recip) - raise NoSuchFASUser("Couldn't find %s in FAS." % recip) + "Saw %s from %s, but %s not in FAS", recipient, agent, recipient) + raise NoSuchFASUser("Couldn't find %s in FAS." % recipient) release = get_current_release() vote = 1 if increment else -1 @@ -46,7 +46,7 @@ class KarmaManager: # Check our karma db to make sure this hasn't already been done. try: existing = self.db.query(Vote).filter_by( - release=release, from_username=agent, to_user=recip).one() + release=release, from_username=agent, to_user=recipient).one() except NoResultFound: pass else: @@ -56,7 +56,7 @@ class KarmaManager: return base_query = self.db.query( - func.sum(Vote.value)).filter_by(to_username=recip) + func.sum(Vote.value)).filter_by(to_username=recipient) total_all_time = base_query.scalar() total_this_release = base_query.filter_by(release=release).scalar() @@ -65,7 +65,7 @@ class KarmaManager: modname="irc", topic="karma", # TODO: fix modname msg={ 'agent': agent, - 'recipient': recip, + 'recipient': recipient, 'total': total_all_time, # The badge rules use this value 'total_this_release': total_this_release, 'vote': vote,