diff --git a/Makefile b/Makefile index ba4ec367..f8f87d8b 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ remove-install-stamp: update: remove-install-stamp install serve: install - cd budget; $(PYTHON) run.py + $(PYTHON) -m budget.manage runserver test: $(DEV_STAMP) $(VENV)/bin/tox diff --git a/budget/api.py b/budget/api.py index 4b991bdf..7ce6a34f 100644 --- a/budget/api.py +++ b/budget/api.py @@ -2,9 +2,9 @@ from flask import Blueprint, request from flask_rest import RESTResource, need_auth -from models import db, Project, Person, Bill -from forms import (ProjectForm, EditProjectForm, MemberForm, - get_billform_for) +from .models import db, Project, Person, Bill +from .forms import (ProjectForm, EditProjectForm, MemberForm, + get_billform_for) api = Blueprint("api", __name__, url_prefix="/api") diff --git a/budget/forms.py b/budget/forms.py index 06df7430..bd7fc5b5 100644 --- a/budget/forms.py +++ b/budget/forms.py @@ -7,10 +7,11 @@ from flask_babel import lazy_gettext as _ from flask import request from wtforms.widgets import html_params -from models import Project, Person from datetime import datetime from jinja2 import Markup -from utils import slugify + +from .models import Project, Person +from .utils import slugify def get_billform_for(project, set_default=True, **kwargs): """Return an instance of BillForm configured for a particular project. diff --git a/budget/manage.py b/budget/manage.py index f717fed5..0a662840 100755 --- a/budget/manage.py +++ b/budget/manage.py @@ -1,12 +1,12 @@ #!/usr/bin/env python +from getpass import getpass from flask_script import Manager, Command from flask_migrate import Migrate, MigrateCommand from werkzeug.security import generate_password_hash -from run import app -from models import db -from getpass import getpass +from .run import app +from .models import db class GeneratePasswordHash(Command): @@ -20,8 +20,12 @@ migrate = Migrate(app, db) manager = Manager(app) manager.add_command('db', MigrateCommand) -manager.add_command('generate_password_hash', GeneratePasswordHash) +manager.add_command('generate_password_hash', GeneratePasswordHash) + + +def main(): + manager.run() if __name__ == '__main__': - manager.run() + main() diff --git a/budget/run.py b/budget/run.py index 7fe4e245..5e65c905 100644 --- a/budget/run.py +++ b/budget/run.py @@ -7,12 +7,12 @@ from flask_babel import Babel from flask_migrate import Migrate, upgrade, stamp from raven.contrib.flask import Sentry -from web import main, db, mail -from api import api -from utils import PrefixedWSGI -from utils import minimal_round +from .web import main, db, mail +from .api import api +from .utils import PrefixedWSGI +from .utils import minimal_round -import default_settings +from . import default_settings app = Flask(__name__, instance_path='/etc/ihatemoney', instance_relative_config=True) diff --git a/budget/tests/tests.py b/budget/tests/tests.py index 16aaae9f..386920f5 100644 --- a/budget/tests/tests.py +++ b/budget/tests/tests.py @@ -17,9 +17,9 @@ from flask import session if 'IHATEMONEY_SETTINGS_FILE_PATH' in os.environ: del os.environ['IHATEMONEY_SETTINGS_FILE_PATH'] -import run -import models -import utils +from .. import run +from .. import models +from .. import utils __HERE__ = os.path.dirname(os.path.abspath(__file__)) diff --git a/budget/web.py b/budget/web.py index f4961cbf..ba771247 100644 --- a/budget/web.py +++ b/budget/web.py @@ -9,8 +9,10 @@ some shortcuts to make your life better when coding (see `pull_project` and `add_project_id` for a quick overview) """ -from flask import Blueprint, current_app, flash, g, redirect, \ - render_template, request, session, url_for, send_file +from flask import ( + Blueprint, current_app, flash, g, redirect, render_template, request, + session, url_for, send_file +) from flask_mail import Mail, Message from flask_babel import get_locale, gettext as _ from werkzeug.security import generate_password_hash, \ @@ -20,12 +22,13 @@ import werkzeug from sqlalchemy import orm from functools import wraps -# local modules -from models import db, Project, Person, Bill -from forms import AdminAuthenticationForm, AuthenticationForm, EditProjectForm, \ - InviteForm, MemberForm, PasswordReminder, ProjectForm, get_billform_for, \ +from .models import db, Project, Person, Bill +from .forms import ( + AdminAuthenticationForm, AuthenticationForm, EditProjectForm, + InviteForm, MemberForm, PasswordReminder, ProjectForm, get_billform_for, ExportForm -from utils import Redirect303, list_of_dicts2json, list_of_dicts2csv +) +from .utils import Redirect303, list_of_dicts2json, list_of_dicts2csv main = Blueprint("main", __name__) mail = Mail() diff --git a/dev-requirements.txt b/dev-requirements.txt index 0bbb0aa0..8795457f 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,2 +1,3 @@ zest.releaser tox +pytest diff --git a/tox.ini b/tox.ini index 23f54f49..b918bdbe 100644 --- a/tox.ini +++ b/tox.ini @@ -6,7 +6,7 @@ skip_missing_interpreters = True commands = python --version - python -m unittest discover -s budget + py.test budget/tests/tests.py deps = -rdev-requirements.txt -rrequirements.txt