refactor code layout, move config to .env, add pyproject.toml

This commit is contained in:
Yusur 2025-11-06 06:33:31 +01:00
parent b874b989bf
commit 71f7bd1a3b
51 changed files with 64 additions and 41 deletions

7
.gitignore vendored
View file

@ -4,8 +4,8 @@ __pycache__/
uploads/
*.pyc
**~
**/.*.swp
**/__pycache__/
.*.swp
__pycache__/
venv
.env
.venv
@ -15,3 +15,6 @@ conf/
config/
\#*\#
.\#*
node_modules/
alembic.ini
**.egg-info

View file

@ -1,6 +1,11 @@
# Changelog
## 0.9-dev
## 0.10.0
+ Codebase refactor (with breaking changes!)
+ Move ALL config to .env (config.py is NO MORE supported)
+ Config SITE_NAME replaced with APP_NAME
## 0.9.0
* Website redesign: added some material icons, implemented via a `inline_svg` function, injected by default in templates and defined in `utils.py`.
* Added positive feedback mechanism: now you can +1 a message. So, `score_message_add` and `score_message_remove` API endpoints were added, and `MessageUpvote` table was created.
@ -26,7 +31,7 @@
* Changed default `robots.txt`, adding report and admin-related lines.
* Released official [Android client](https://github.com/sakuragasaki46/coriplusapp/releases/tag/v0.8.0).
## 0.7.1-dev
## 0.7.1
* Adding `messages_count`, `followers_count` and `following_count` to `profile_info` API endpoint (forgot to release).

View file

@ -1,3 +0,0 @@
DEBUG = True
SECRET_KEY = 'hin6bab8ge25*r=x&+5$0kn=-#log$pt^#@vrqjld!^2ci@g*b'
SITE_NAME = 'Cori+'

21
pyproject.toml Normal file
View file

@ -0,0 +1,21 @@
[project]
name = "sakuragasaki46_coriplus"
authors = [
{ name = "Sakuragasaki46" }
]
dynamic = ["version"]
dependencies = [
"Python-Dotenv>=1.0.0",
"Flask",
"Flask-Login",
"Peewee"
]
requires-python = ">=3.10"
classifiers = [
"Private :: X"
]
[tool.setuptools.dynamic]
version = { attr = "coriplus.__version__" }

View file

@ -1,16 +0,0 @@
#!/usr/bin/env python
import sys
sys.path.insert(0, '../..')
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-p', '--port', type=int, default=5000,
help='An alternative port where to run the server.')
from app import app, create_tables
if __name__ == '__main__':
args = parser.parse_args()
create_tables()
app.run(port=args.port)

View file

@ -16,24 +16,31 @@ For other, see `app.utils`.
'''
from flask import (
Flask, abort, flash, g, jsonify, redirect, render_template, request,
send_from_directory, session, url_for, __version__ as flask_version)
import hashlib
import datetime, time, re, os, sys, string, json, html
from functools import wraps
Flask, g, jsonify, render_template, request,
send_from_directory, __version__ as flask_version)
import os, sys
from flask_login import LoginManager
import dotenv
import logging
__version__ = '0.9.0'
__version__ = '0.10.0-dev44'
# we want to support Python 3 only.
# we want to support Python 3.10+ only.
# Python 2 has too many caveats.
if sys.version_info[0] < 3:
raise RuntimeError('Python 3 required')
# Python <=3.9 has harder type support.
if sys.version_info[0:2] < (3, 10):
raise RuntimeError('Python 3.10+ required')
os.chdir(os.path.dirname(os.path.dirname(__file__)))
BASEDIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
os.chdir(BASEDIR)
dotenv.load_dotenv()
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = Flask(__name__)
app.config.from_pyfile('../config.py')
app.secret_key = os.environ['SECRET_KEY']
login_manager = LoginManager(app)
@ -53,7 +60,7 @@ def before_request():
try:
g.db.connect()
except OperationalError:
sys.stderr.write('database connected twice.\n')
logger.error('database connected twice.\n')
@app.after_request
def after_request(response):
@ -63,7 +70,7 @@ def after_request(response):
@app.context_processor
def _inject_variables():
return {
'site_name': app.config['SITE_NAME'],
'site_name': os.environ.get('APP_NAME', 'Cori+'),
'locations': locations,
'inline_svg': inline_svg
}
@ -78,11 +85,11 @@ def error_404(body):
@app.route('/favicon.ico')
def favicon_ico():
return send_from_directory(os.getcwd(), 'favicon.ico')
return send_from_directory(BASEDIR, 'src/favicon.ico')
@app.route('/robots.txt')
def robots_txt():
return send_from_directory(os.getcwd(), 'robots.txt')
return send_from_directory(BASEDIR, 'src/robots.txt')
@app.route('/uploads/<id>.<type>')
def uploads(id, type='jpg'):

View file

@ -7,6 +7,9 @@ from .models import User, UserProfile, Message, Upload, Relationship, Notificati
MSGPRV_PUBLIC, MSGPRV_UNLISTED, MSGPRV_FRIENDS, MSGPRV_ONLYME, UPLOAD_DIRECTORY
from .utils import check_access_token, Visibility, push_notification, unpush_notification, \
create_mentions, is_username, generate_access_token, pwdhash
import logging
logger = logging.getLogger(__name__)
bp = Blueprint('api', __name__, url_prefix='/api/V1')
@ -16,7 +19,7 @@ def get_message_info(message):
except IndexError:
media = None
if media:
print(media)
logger.debug(media)
return {
'id': message.id,
'user': {
@ -122,7 +125,7 @@ def create2(self):
privacy=privacy)
file = request.files.get('file')
if file:
print('Uploading', file.filename)
logger.info('Uploading', file.filename)
ext = file.filename.split('.')[-1]
upload = Upload.create(
type=ext,

View file

@ -9,6 +9,9 @@ from sys import version as python_version
from flask import Blueprint, abort, flash, redirect, render_template, request, url_for, __version__ as flask_version
from flask_login import login_required, login_user, logout_user
import json
import logging
logger = logging.getLogger(__name__)
bp = Blueprint('website', __name__)
@ -181,7 +184,7 @@ def create():
privacy=privacy)
file = request.files.get('file')
if file:
print('Uploading', file.filename)
logger.info('Uploading', file.filename)
ext = file.filename.split('.')[-1]
upload = Upload.create(
type=ext,

View file

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before After
Before After