Coder Social home page Coder Social logo

rochacbruno / talkshow Goto Github PK

View Code? Open in Web Editor NEW
65.0 16.0 26.0 564 KB

A Call 4 Papers System - A simple base app as example of Flask Architecture

Home Page: http://bit.ly/tutorialflaskconf

Python 89.19% HTML 5.48% Makefile 5.33%
flask flask-base flask-boilerplate flask-application flask-architecture flask-example cookiecutter

talkshow's Issues

Carregar ext e blueprints dinamicamente

No create_app os ext e os blueprints estão carregando declarativamente.
https://github.com/rochacbruno/talkshow/blob/master/talkshow/app.py#L18

Trocar por um carregamento dinâmico usando werkzeug.utils.import_string

ex:

No settings.toml ou no .env depois de implementar o #1

[default]
EXTENSIONS = ["talkshow.ext.cli", "talkshow.ext.admin"]
BLUEPRINTS = ["talkshow.blueprints.webui", "talkshow.blueprints.restapi"]

Criar ext/extensions.py

from werkzeug.utils import import_string

def configure(app):
    for ext in app.config.get('EXTENSIONS'):
        mod = import_string(ext)
        mod.configure(app)
    
     # fazer o mesmo para os blueprints...

No factory app.py

from talkshow.ext import configuration, extensions

def create_app():
    app = Flask(__name__)
    configuration.configure(app)  # config loaded here
    extensions.configure(app)
    return app
....

Gerar dinâmicamente os validadores e definições para todas as 3 interfaces

Atualmente temos definição de campos e validadores em 5 locais

  • cli (argumentos dos comandos)
  • UI (formulário wtforms)
  • Admin (Formulario wtform do admin)
  • API (reqparse do Flask_Restful)
  • Apidocs (YAML do flasgger)

Precisamos criar em um local base /definitions.py uma classe Python usando descriptor ou algo do tipo que seja capaz de a partir de um unico modelo gerar specs para esses 5 locais. ex: @definition.generate_cli_specs() para ser usado ao inves de @click.option no cli e um equivalente para os outros locais.

Essa solução pode se transformar em uma library de uso geral externa.

Usando extensão `pytest` errada

Notei que por motivos de nome parecido, acabei usando a extensão flask-pytest ao invés da pytest-flask

A que está sendo usada flask-pytest na verdade é um test runner em background, é interessante mas não nesse projeto.

A que precisamos usar é a pytest-flask pois essa sim entrega as fixtures necessárias para os testes.

  • mudar no setup.py para usar pytest-flask
  • alterar os testes para receber a fixture client ao inves de usar with app.test_client

Modularizar blueprints

O projeto tem 2 blueprints que são arquivos restapi.py e webui.py transformar em modulos/pastas e separar forms.py, models.py, views.py etc...

Adicionar Dynaconf

Usar Dynaconf para carregar as configurações a partir dos arquivos .env ou settings.toml

IMPORTANTE: qualquer melhoria será aplicada somente a branch extended

Criar versão com SQLAlchemy

Após a maioria das issues de estrutura serem resolvidas a idéia é criar uma versão do mesmo app utilizando SQLAlchemy + SQLite. em uma nova branch.

Habilitar JWT

Trocar Basic Auth por JWT nas endpoints da API

*manter basic auth apenas para gerar o token

Travis CI

HAbilitar travis CI, criar .travis.yml e configurar para rodar os testes

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.