mgt c7 finish
This commit is contained in:
		@@ -1,3 +1,3 @@
 | 
				
			|||||||
FLASK_APP=microblog.py
 | 
					FLASK_APP=microblog.py
 | 
				
			||||||
FLASK_DEBUG=0
 | 
					FLASK_DEBUG=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ RUN target=/root/.cache/pip \
 | 
				
			|||||||
# Need to make this explicit as part of expansion, no migrations or venv
 | 
					# Need to make this explicit as part of expansion, no migrations or venv
 | 
				
			||||||
COPY . .
 | 
					COPY . .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ENV FLASK_APP app.py
 | 
					ENV FLASK_APP microblog.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This might be scary to leave on
 | 
					# This might be scary to leave on
 | 
				
			||||||
#ENV FLASK_ENV development
 | 
					#ENV FLASK_ENV development
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,6 +54,9 @@ Dockerfile needs dockerignore or preferably explicitly defined copies for:
 | 
				
			|||||||
- requirements
 | 
					- requirements
 | 
				
			||||||
- not dotflaskenv, vars set with dockerfile
 | 
					- not dotflaskenv, vars set with dockerfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## docker setup:
 | 
				
			||||||
 | 
					- py logger handler StreamHandler is buggy to the point of being useless. Use logfile and link to stdout in Docker build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## notes:
 | 
					## notes:
 | 
				
			||||||
- compose has entry that overrides flask with uwsgi for prod
 | 
					- compose has entry that overrides flask with uwsgi for prod
 | 
				
			||||||
- miminal environment vars come through project env, pass through compose
 | 
					- miminal environment vars come through project env, pass through compose
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ from config import Config
 | 
				
			|||||||
from flask_sqlalchemy import SQLAlchemy
 | 
					from flask_sqlalchemy import SQLAlchemy
 | 
				
			||||||
from flask_migrate import Migrate
 | 
					from flask_migrate import Migrate
 | 
				
			||||||
from flask_login import LoginManager
 | 
					from flask_login import LoginManager
 | 
				
			||||||
import logging
 | 
					import logging, sys
 | 
				
			||||||
from logging.handlers import SMTPHandler
 | 
					from logging.handlers import SMTPHandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
app = Flask(__name__)
 | 
					app = Flask(__name__)
 | 
				
			||||||
@@ -13,5 +13,25 @@ migrate = Migrate(app, db)
 | 
				
			|||||||
login = LoginManager(app)
 | 
					login = LoginManager(app)
 | 
				
			||||||
login.login_view = 'login'
 | 
					login.login_view = 'login'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if not app.debug:
 | 
				
			||||||
 | 
					    if app.config['MAIL_SERVER']:
 | 
				
			||||||
 | 
					        auth = None
 | 
				
			||||||
 | 
					        secure = None
 | 
				
			||||||
 | 
					        mail_handler = SMTPHandler(
 | 
				
			||||||
 | 
					                mailhost=(app.config['MAIL_SERVER'], app.config['MAIL_PORT']),
 | 
				
			||||||
 | 
					                fromaddr=app.config['FROM_ADDRESS'],
 | 
				
			||||||
 | 
					                toaddrs=app.config['ADMINS'], subject='MB failure.',
 | 
				
			||||||
 | 
					                credentials=auth, secure=secure)
 | 
				
			||||||
 | 
					        mail_handler.setLevel(logging.ERROR)
 | 
				
			||||||
 | 
					        app.logger.addHandler(mail_handler)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if app.config['DC_LOGGING']:
 | 
				
			||||||
 | 
					        print('#################### DEBUGHERE', file=sys.stderr)
 | 
				
			||||||
 | 
					        dclog = logging.StreamHandler(stream=sys.stderr)
 | 
				
			||||||
 | 
					        dclog.setLevel(logging.INFO)
 | 
				
			||||||
 | 
					        dclog.propagate = False
 | 
				
			||||||
 | 
					        app.logger.addHandler(dclog)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from app import routes, models, errors
 | 
					from app import routes, models, errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,3 +32,17 @@ class EditProfileForm(FlaskForm):
 | 
				
			|||||||
    username = StringField('Username', validators=[DataRequired()])
 | 
					    username = StringField('Username', validators=[DataRequired()])
 | 
				
			||||||
    about_me = TextAreaField('About me', validators=[Length(min=0, max=140)])
 | 
					    about_me = TextAreaField('About me', validators=[Length(min=0, max=140)])
 | 
				
			||||||
    submit = SubmitField('Update')
 | 
					    submit = SubmitField('Update')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, original_username, *args, **kwargs):
 | 
				
			||||||
 | 
					        super().__init__(*args, **kwargs)
 | 
				
			||||||
 | 
					        self.original_username = original_username
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def validate_username(self, username):
 | 
				
			||||||
 | 
					        if username.data != self.original_username:
 | 
				
			||||||
 | 
					            user = db.session.scalar(sa.select(User).where(User.username == username.data))
 | 
				
			||||||
 | 
					            if user is not None:
 | 
				
			||||||
 | 
					                raise ValidationError('Please use a different username.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@ def before_request():
 | 
				
			|||||||
@app.route('/index')
 | 
					@app.route('/index')
 | 
				
			||||||
@login_required
 | 
					@login_required
 | 
				
			||||||
def index():
 | 
					def index():
 | 
				
			||||||
 | 
					    app.logger.info("AAAAAAAAAAAAAAAAAAAAA")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    user = {'username': 'Finnaa'}
 | 
					    user = {'username': 'Finnaa'}
 | 
				
			||||||
    posts = [
 | 
					    posts = [
 | 
				
			||||||
@@ -74,6 +75,7 @@ def register():
 | 
				
			|||||||
@login_required
 | 
					@login_required
 | 
				
			||||||
def user(username):
 | 
					def user(username):
 | 
				
			||||||
    user = db.first_or_404(sa.select(User).where(User.username == username))
 | 
					    user = db.first_or_404(sa.select(User).where(User.username == username))
 | 
				
			||||||
 | 
					    #app.logger.info('PROFILE DEBUG  ###############################')
 | 
				
			||||||
    posts = [
 | 
					    posts = [
 | 
				
			||||||
        {'author': user, 'body': 'Test1'},
 | 
					        {'author': user, 'body': 'Test1'},
 | 
				
			||||||
        {'author': user, 'body': 'Test2?'}
 | 
					        {'author': user, 'body': 'Test2?'}
 | 
				
			||||||
@@ -83,7 +85,7 @@ def user(username):
 | 
				
			|||||||
@app.route('/edit_profile', methods=['GET', 'POST'])
 | 
					@app.route('/edit_profile', methods=['GET', 'POST'])
 | 
				
			||||||
@login_required
 | 
					@login_required
 | 
				
			||||||
def edit_profile():
 | 
					def edit_profile():
 | 
				
			||||||
    form = EditProfileForm()
 | 
					    form = EditProfileForm(current_user.username)
 | 
				
			||||||
    if form.validate_on_submit():
 | 
					    if form.validate_on_submit():
 | 
				
			||||||
        current_user.username = form.username.data
 | 
					        current_user.username = form.username.data
 | 
				
			||||||
        current_user.about_me = form.about_me.data
 | 
					        current_user.about_me = form.about_me.data
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,14 +5,18 @@ basedir = os.path.abspath(os.path.dirname(__file__))
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class Config:
 | 
					class Config:
 | 
				
			||||||
    SECRET_KEY = os.environ.get('FLASK_SECRET_KEY') or 'flasksk'
 | 
					    SECRET_KEY = os.environ.get('FLASK_SECRET_KEY') or 'flasksk'
 | 
				
			||||||
    #SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'zapp.db')
 | 
					    SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'zapp.db')
 | 
				
			||||||
    SQLALCHEMY_DATABASE_URI = 'mariadb+mariadbconnector://flasku:' + os.environ.get('MYSQL_PASSWORD') + '@db:3306/flask'
 | 
					    #SQLALCHEMY_DATABASE_URI = 'mariadb+mariadbconnector://flasku:' + os.environ.get('MYSQL_PASSWORD') + '@db:3306/flask'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    MAIL_SERVER = 'pmb'
 | 
					    #MAIL_SERVER = 'pmb'
 | 
				
			||||||
 | 
					    MAIL_SERVER = ''
 | 
				
			||||||
    MAIL_PORT = 25
 | 
					    MAIL_PORT = 25
 | 
				
			||||||
    MAIL_USE_TLS = False
 | 
					    MAIL_USE_TLS = False
 | 
				
			||||||
    MAIL_USERNAME = ''
 | 
					    MAIL_USERNAME = ''
 | 
				
			||||||
    MAIL_PASSWORD = ''
 | 
					    MAIL_PASSWORD = ''
 | 
				
			||||||
    ADMINS = [os.environ.get('ADMIN_EMAIL')]
 | 
					    ADMINS = [os.environ.get('ADMIN_EMAIL')]
 | 
				
			||||||
 | 
					    FROM_ADDRESS = os.environ.get('FROM_ADDRESS')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    DC_LOGGING = True
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,4 +21,5 @@ SQLAlchemy==2.0.31
 | 
				
			|||||||
typing_extensions==4.12.2
 | 
					typing_extensions==4.12.2
 | 
				
			||||||
Werkzeug==3.0.3
 | 
					Werkzeug==3.0.3
 | 
				
			||||||
WTForms==3.1.2
 | 
					WTForms==3.1.2
 | 
				
			||||||
 | 
					uwsgi
 | 
				
			||||||
mariadb
 | 
					mariadb
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,6 +38,7 @@ services:
 | 
				
			|||||||
      - TOKEN_I=${DOTENV_TOKEN_I}
 | 
					      - TOKEN_I=${DOTENV_TOKEN_I}
 | 
				
			||||||
      - TOKEN_C=${DOTENV_TOKEN_C}
 | 
					      - TOKEN_C=${DOTENV_TOKEN_C}
 | 
				
			||||||
      - ADMIN_EMAIL=${ADMIN_EMAIL}
 | 
					      - ADMIN_EMAIL=${ADMIN_EMAIL}
 | 
				
			||||||
 | 
					      - FROM_ADDRESS=${GITEA_MAIL_FROM}
 | 
				
			||||||
    #ports:
 | 
					    #ports:
 | 
				
			||||||
    #  - 8000:8000
 | 
					    #  - 8000:8000
 | 
				
			||||||
    expose:
 | 
					    expose:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,6 +37,8 @@ services:
 | 
				
			|||||||
      - MYSQL_PASSWORD=${DOTENV_MYSQL_FLASK_PASSWORD}
 | 
					      - MYSQL_PASSWORD=${DOTENV_MYSQL_FLASK_PASSWORD}
 | 
				
			||||||
      - TOKEN_I=${DOTENV_TOKEN_I}
 | 
					      - TOKEN_I=${DOTENV_TOKEN_I}
 | 
				
			||||||
      - TOKEN_C=${DOTENV_TOKEN_C}
 | 
					      - TOKEN_C=${DOTENV_TOKEN_C}
 | 
				
			||||||
 | 
					      - ADMIN_EMAIL=${ADMIN_EMAIL}
 | 
				
			||||||
 | 
					      - FROM_ADDRESS=${GITEA_MAIL_FROM}
 | 
				
			||||||
    #ports:
 | 
					    #ports:
 | 
				
			||||||
    #  - 8000:8000
 | 
					    #  - 8000:8000
 | 
				
			||||||
    expose:
 | 
					    expose:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ services:
 | 
				
			|||||||
    image: mariadb:lts
 | 
					    image: mariadb:lts
 | 
				
			||||||
    restart: always
 | 
					    restart: always
 | 
				
			||||||
    healthcheck:
 | 
					    healthcheck:
 | 
				
			||||||
      #10-focal test: ['CMD-SHELL', 'mysqladmin ping -h 127.0.0.1 --password="${DOTENV_MYSQL_ROOT_PASSWORD}" --silent']
 | 
					      #test: ['CMD-SHELL', 'mysqladmin ping -h 127.0.0.1 --password="${DOTENV_MYSQL_ROOT_PASSWORD}" --silent']
 | 
				
			||||||
      test: ['CMD', 'healthcheck.sh', '--connect', '--innodb_initialized']
 | 
					      test: ['CMD', 'healthcheck.sh', '--connect', '--innodb_initialized']
 | 
				
			||||||
      interval: 10s
 | 
					      interval: 10s
 | 
				
			||||||
      retries: 5
 | 
					      retries: 5
 | 
				
			||||||
@@ -37,6 +37,8 @@ services:
 | 
				
			|||||||
      - MYSQL_PASSWORD=${DOTENV_MYSQL_FLASK_PASSWORD}
 | 
					      - MYSQL_PASSWORD=${DOTENV_MYSQL_FLASK_PASSWORD}
 | 
				
			||||||
      - TOKEN_I=${DOTENV_TOKEN_I}
 | 
					      - TOKEN_I=${DOTENV_TOKEN_I}
 | 
				
			||||||
      - TOKEN_C=${DOTENV_TOKEN_C}
 | 
					      - TOKEN_C=${DOTENV_TOKEN_C}
 | 
				
			||||||
 | 
					      - ADMIN_EMAIL=${ADMIN_EMAIL}
 | 
				
			||||||
 | 
					      - FROM_ADDRESS=${GITEA_MAIL_FROM}
 | 
				
			||||||
    #ports:
 | 
					    #ports:
 | 
				
			||||||
    #  - 8000:8000
 | 
					    #  - 8000:8000
 | 
				
			||||||
    expose:
 | 
					    expose:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user