StanislavSol/python-project-83

View on GitHub
page_analyzer/app.py

Summary

Maintainability
A
0 mins
Test Coverage
from flask import (Flask,
                   render_template,
                   request,
                   url_for,
                   redirect,
                   flash,
                   get_flashed_messages)
from page_analyzer.validator import get_error
from page_analyzer import db
from dotenv import load_dotenv
import os
from page_analyzer.normalize_url import normalize_url
from page_analyzer.html_check import parse_html


load_dotenv()
app = Flask(__name__)
app.secret_key = os.getenv('SECRET_KEY')
DATABASE_URL = os.getenv('DATABASE_URL')


@app.route('/')
def index():
    return render_template('index.html')


@app.get('/urls')
def get_urls():
    with db.create_connection(DATABASE_URL) as conn:
        urls = db.get_urls(conn)
    db.close_connection(conn)
    return render_template('urls/urls.html', urls=urls)


@app.post('/urls')
def post_urls():
    url = request.form.get('url')
    validation_error = get_error(url)
    formatted_url = normalize_url(url)
    if validation_error:
        flash(*validation_error)
        messages = get_flashed_messages(with_categories=True)
        return render_template('index.html',
                               messages=messages,
                               value_url=url), 422
    with db.create_connection(DATABASE_URL) as conn:
        url_info = db.get_url_by_name(conn, formatted_url)
        if not url_info:
            url_id = db.add_url(conn, formatted_url)
            flash('Страница успешно добавлена', 'success')
        else:
            url_id = url_info.id
            flash('Страница уже существует', 'success')
    db.close_connection(conn)
    return redirect(url_for('get_url_page',
                            id=url_id))


@app.route('/urls/<int:id>')
def get_url_page(id):
    with db.create_connection(DATABASE_URL) as conn:
        checks = db.get_checks(conn, id)
        url = db.get_url_by_id(conn, id)
        messages = get_flashed_messages(with_categories=True)
    db.close_connection(conn)
    return render_template('urls/url.html',
                           messages=messages,
                           url=url,
                           checks=checks)


@app.post('/urls/<int:id>/checks')
def get_url_checks(id):
    with db.create_connection(DATABASE_URL) as conn:
        url_info = db.get_url_by_id(conn, id)
        with db.create_connection(DATABASE_URL) as conn:
            check = parse_html(url_info.name)
            if check['status'] == 200:
                check['url_id'] = id
                db.add_url_check(conn, check)
                flash('Страница успешно проверена', 'success')
            else:
                flash('Произошла ошибка при проверке', 'danger')
    db.close_connection(conn)
    return redirect(url_for('get_url_page', id=id))


@app.errorhandler(404)
def page_not_found(error):
    return render_template('errors/404.html'), 404


@app.errorhandler(500)
def server_error(error):
    return render_template('errors/500.html'), 500