Skip to content

Instantly share code, notes, and snippets.

@SuryaSankar
SuryaSankar / app_factory.py
Created April 15, 2020 20:14
flask_pattern_minimal_with_auth/master/app
from flask import Flask
from .models.core import db
from .models.user import user_datastore
from . import views
from flask_security import Security
def register_blueprints_on_app(app):
app.register_blueprint(views.main_pages_bp)
app.register_blueprint(views.main_api_bp, url_prefix='/api')
@SuryaSankar
SuryaSankar / user.py
Created April 15, 2020 20:17
flask_pattern_minimal_with_auth/master/app/models
from .core import db
from flask_security import (
SQLAlchemyUserDatastore, UserMixin, RoleMixin)
from sqlalchemy import func
class UserRole(db.Model):
id = db.Column(db.Integer, primary_key=True, unique=True)
created_on = db.Column(db.DateTime(), default=func.now())
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
@SuryaSankar
SuryaSankar / layout.j2.html
Created April 15, 2020 20:21
flask_pattern_minimal_with_auth/app/templates
{% import "macros.html" as macros %}
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Flask Boilerplate Demo</title>
<!-- Tell the browser to be responsive to screen width -->
<meta name="viewport" content="width=device-width, initial-scale=1">
{% include "layout_sections/layout_assets_at_top.html" %}
@SuryaSankar
SuryaSankar / cli.py
Created April 15, 2020 23:18
flask_pattern_minimal_with_auth
from app.app_factory import create_app
import app.models as models
import IPython
def run_interactive_shell():
app = create_app()
# Needed for making the console work in app request context
ctx = app.test_request_context()
@SuryaSankar
SuryaSankar / dbmanager.py
Created April 15, 2020 23:19
flask_pattern_minimal_with_auth
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from app.models import db
from app.app_factory import create_app
def create_db_manager():
app = create_app(register_blueprints=False)
migrate = Migrate(app, db)
manager = Manager(app)
@SuryaSankar
SuryaSankar / index.html
Last active April 15, 2020 23:22
flask_app_factory_pattern_minimal
{% extends "layout.html" %}
{% block page_content %}
<div class="starter-template">
<h1>Home Page Title</h1>
{% if current_user.is_authenticated %}
<p>Logged in as {{current_user}}</p>
{% else %}
@SuryaSankar
SuryaSankar / macros.html
Created April 15, 2020 23:22
flask_pattern_minimal_with_auth
{% macro static_js_tag(filepath) %}
<script
type="text/javascript"
src="{{url_for('static', filename=filepath)}}">
</script>
{% endmacro %}
{% macro static_css_tag(filepath) %}
<link
rel="stylesheet"
@SuryaSankar
SuryaSankar / server.py
Created April 15, 2020 23:24
flask_pattern_minimal_with_auth
from werkzeug.serving import run_simple
from app import app_factory
application = app_factory.create_app()
if __name__ == "__main__":
run_simple(
'0.0.0.0', 5000,
application,
@SuryaSankar
SuryaSankar / structure.txt
Created April 15, 2020 23:25
flask_pattern_with_minimal_auth
├── app
│   ├── app_factory.py
│   ├── default_config.py
│   ├── __init__.py
│   ├── models
│   │   ├── core.py
│   │   ├── __init__.py
│   │   └── user.py
│   ├── static
│   │   ├── css
from git import Repo
import io
import ast
import difflib
from toolspy.collection_tools import intersection
def file_handle_from_git_ref(repo_path, relative_file_path, branch_name="master"):
repo = Repo.init(repo_path)
tree = repo.heads[branch_name].commit.tree