Не взлетает тест приложения на Flask - Python

Формулировка задачи:

Приветствую, коллеги! Пытаюсь освоить Flask по вот этой мурзилке (M.Grinberg). Создал приложение в hello.py, дошло дело до структурированного приложения и blueprint-ов (Глава 7). И вот тут забуксовал. Вроде все сделал как в примерах, а при запуске $ python manage.py test выдает ошибку:
(venv) mdadm@St52 ~/second-flask-mdadm $ python manage.py test
Traceback (most recent call last):
  File "manage.py", line 3, in <module>
    from app import create_app, db
  File "/home/mdadm/second-flask-mdadm/app/__init__.py", line 7, in <module>
    from main import main as main_blueprint
ImportError: No module named 'main'
(venv) mdadm@St52 ~/second-flask-mdadm $
Файлы: 1. config.py
import os
 
basedir = os.path.abspath(os.path.dirname(__file__))
 
class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard_to_guess_string'
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    FLASKY_MAIL_SUBJECT_PREFIX = '[Flasky]'
    FLASKY_MAIL_SENDER = 'Flasky Admin <flasky@example.com>'
    FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN')
   
    @staticmethod
    def init_app(app):
        pass
 
class DevelopmentConfig(Config):
    DEBUG = True
    MAIL_SERVER = 'smtp.googlemail.com'
    MAIL_PORT = 587
    MAIL_USE_TLS = True
    MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
    MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
    SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')
 
class TestingConfig(Config):
    TESTING = True
    SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data-test.sqlite')
 
class ProductionConfig(Config):
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data.sqlite')
 
config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}
2. manage.py
#!/usr/bin/env python
import os
from app import create_app, db
from app.models import User, Role
from flask_script import Manager, Shell
from flask_migrate import Migrate, MigrateCommand
 
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
migrate = Migrate(app, db)
 
def make_shell_context():
    return dict(app=app, db=db, User=User, Role=Role)
manager.add_command("shell", Shell(make_context=make_shell_context))
manager.add_command('db', MigrateCommand)
 
@manager.command
def test():
    """Run the unit tests"""
    import unittest
    tests = unittest.TestLoader().discover('tests')
    unittest.TextTestRunner(verbosity=2).run(tests)
 
if __name__ == '__main__':
    manager.run()
3. app/__init__.py
from flask import Flask, render_template
from flask_bootstrap import Bootstrap
from flask_mail import Mail
from flask_moment import Moment
from flask_sqlalchemy import SQLAlchemy
from config import config
 
bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()
 
def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
 
    bootstrap.init_app(app)
    mail.init_app(app)
    moment.init_app(app)
    db.init_app(app)
   
    # attach routes and custom error pages here
 
    from main import main as main_blueprint
    app.register_blueprint(main_blueprint)
 
    return app
Может кто-нить помочь объяснить логику запуска этого самого макета блюпринта? И почему он ругается на отсутствующее имя main - вообще непонятно.

Код к задаче: «Не взлетает тест приложения на Flask - Python»

textual
from .main import main as main_blueprint

8   голосов, оценка 4.000 из 5


СОХРАНИТЬ ССЫЛКУ