Skip to content

Commit fb16156

Browse files
author
App Generator
committed
Bump UI & Codebase
1 parent 0cce84c commit fb16156

File tree

104 files changed

+15380
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+15380
-0
lines changed

.dockerignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.git
2+
__pycache__
3+
*.pyc
4+
*.pyo
5+
*.pyd

.env

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
DEBUG=True
2+
SECRET_KEY=S3cr3t_K#Key
3+
DB_ENGINE=postgresql
4+
DB_NAME=appseed-flask
5+
DB_HOST=localhost
6+
DB_PORT=5432
7+
DB_USERNAME=appseed
8+
DB_PASS=pass

.gitignore

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# byte-compiled / optimized / DLL files
2+
__pycache__/
3+
*.py[cod]
4+
5+
# tests and coverage
6+
*.pytest_cache
7+
.coverage
8+
9+
# database & logs
10+
*.db
11+
*.sqlite3
12+
*.log
13+
14+
# venv
15+
env
16+
venv
17+
18+
# other
19+
.DS_Store
20+
21+
# sphinx docs
22+
_build
23+
_static
24+
_templates
25+
26+
# javascript
27+
package-lock.json
28+
.vscode/symbols.json

Dockerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
FROM python:3.6
2+
3+
ENV FLASK_APP run.py
4+
5+
COPY run.py gunicorn-cfg.py requirements.txt config.py .env ./
6+
COPY app app
7+
8+
RUN pip install -r requirements.txt
9+
10+
EXPOSE 5005
11+
CMD ["gunicorn", "--config", "gunicorn-cfg.py", "run:app"]

LICENSE.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# MIT License
2+
3+
Copyright (c) 2019 - present [AppSeed](http://appseed.us/)
4+
5+
<br />
6+
7+
## Licensing Information
8+
9+
<br />
10+
11+
| Item | - |
12+
| ---------------------------------- | --- |
13+
| License Type | MIT |
14+
| Use for print | **YES** |
15+
| Create single personal website/app | **YES** |
16+
| Create single website/app for client | **YES** |
17+
| Create multiple website/apps for clients | **YES** |
18+
| Create multiple SaaS applications | **YES** |
19+
| End-product paying users | **YES** |
20+
| Product sale | **YES** |
21+
| Remove footer credits | **YES** |
22+
| --- | --- |
23+
| Remove copyright mentions from source code | NO |
24+
| Production deployment assistance | NO |
25+
| Create HTML/CSS template for sale | NO |
26+
| Create Theme/Template for CMS for sale | NO |
27+
| Separate sale of our UI Elements | NO |
28+
29+
<br />
30+
31+
---
32+
For more information regarding licensing, please contact the AppSeed Service < *[email protected]* >

Procfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
web: gunicorn run:app --log-file=-

app/__init__.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# -*- encoding: utf-8 -*-
2+
"""
3+
Copyright (c) 2019 - present AppSeed.us
4+
"""
5+
6+
from flask import Flask, url_for
7+
from flask_login import LoginManager
8+
from flask_sqlalchemy import SQLAlchemy
9+
from importlib import import_module
10+
from logging import basicConfig, DEBUG, getLogger, StreamHandler
11+
from os import path
12+
13+
db = SQLAlchemy()
14+
login_manager = LoginManager()
15+
16+
def register_extensions(app):
17+
db.init_app(app)
18+
login_manager.init_app(app)
19+
20+
def register_blueprints(app):
21+
for module_name in ('base', 'home'):
22+
module = import_module('app.{}.routes'.format(module_name))
23+
app.register_blueprint(module.blueprint)
24+
25+
def configure_database(app):
26+
27+
@app.before_first_request
28+
def initialize_database():
29+
db.create_all()
30+
31+
@app.teardown_request
32+
def shutdown_session(exception=None):
33+
db.session.remove()
34+
35+
def create_app(config):
36+
app = Flask(__name__, static_folder='base/static')
37+
app.config.from_object(config)
38+
register_extensions(app)
39+
register_blueprints(app)
40+
configure_database(app)
41+
return app

app/base/__init__.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# -*- encoding: utf-8 -*-
2+
"""
3+
Copyright (c) 2019 - present AppSeed.us
4+
"""
5+
6+
from flask import Blueprint
7+
8+
blueprint = Blueprint(
9+
'base_blueprint',
10+
__name__,
11+
url_prefix='',
12+
template_folder='templates',
13+
static_folder='static'
14+
)

app/base/forms.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# -*- encoding: utf-8 -*-
2+
"""
3+
Copyright (c) 2019 - present AppSeed.us
4+
"""
5+
6+
from flask_wtf import FlaskForm
7+
from wtforms import TextField, PasswordField
8+
from wtforms.validators import InputRequired, Email, DataRequired
9+
10+
## login and registration
11+
12+
class LoginForm(FlaskForm):
13+
username = TextField ('Username', id='username_login' , validators=[DataRequired()])
14+
password = PasswordField('Password', id='pwd_login' , validators=[DataRequired()])
15+
16+
class CreateAccountForm(FlaskForm):
17+
username = TextField('Username' , id='username_create' , validators=[DataRequired()])
18+
email = TextField('Email' , id='email_create' , validators=[DataRequired(), Email()])
19+
password = PasswordField('Password' , id='pwd_create' , validators=[DataRequired()])

app/base/models.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# -*- encoding: utf-8 -*-
2+
"""
3+
Copyright (c) 2019 - present AppSeed.us
4+
"""
5+
6+
from flask_login import UserMixin
7+
from sqlalchemy import Binary, Column, Integer, String
8+
9+
from app import db, login_manager
10+
11+
from app.base.util import hash_pass
12+
13+
class User(db.Model, UserMixin):
14+
15+
__tablename__ = 'User'
16+
17+
id = Column(Integer, primary_key=True)
18+
username = Column(String, unique=True)
19+
email = Column(String, unique=True)
20+
password = Column(Binary)
21+
22+
def __init__(self, **kwargs):
23+
for property, value in kwargs.items():
24+
# depending on whether value is an iterable or not, we must
25+
# unpack it's value (when **kwargs is request.form, some values
26+
# will be a 1-element list)
27+
if hasattr(value, '__iter__') and not isinstance(value, str):
28+
# the ,= unpack of a singleton fails PEP8 (travis flake8 test)
29+
value = value[0]
30+
31+
if property == 'password':
32+
value = hash_pass( value ) # we need bytes here (not plain str)
33+
34+
setattr(self, property, value)
35+
36+
def __repr__(self):
37+
return str(self.username)
38+
39+
40+
@login_manager.user_loader
41+
def user_loader(id):
42+
return User.query.filter_by(id=id).first()
43+
44+
@login_manager.request_loader
45+
def request_loader(request):
46+
username = request.form.get('username')
47+
user = User.query.filter_by(username=username).first()
48+
return user if user else None

0 commit comments

Comments
 (0)