Base for flask server
Project description
base for flask server by Mixel Te
requirements.txt
Python 3.9.5
flask==2.1.2
sqlalchemy==2.0.19
werkzeug==2.3.6
sqlalchemy_serializer==1.4.1
pyjwt<2.10
flask_jwt_extended==4.5.2
PyMySQL==1.1.1
usage
copy bfs_config.example.py to project root as bfs_config.py
create files:
.gitignore
.venv
*__pycache__*
logs/
db/
/images
/fonts
secret_key_jwt.txt
# data/_operations.py
from bfs import OperationsBase
class Operations(OperationsBase):
oper_id = ("oper_id", "Operation description")
oper_id2 = ("oper_id2", "Operation description")
...
# data/_roles.py
from bfs import RolesBase
from data._operations import Operations
class Roles(RolesBase):
role_name = 2
role_name2 = 3
...
Roles.ROLES = {
Roles.role_name: {
"name": "Role name",
"operations": [
Operations.oper_id,
Operations.oper_id2,
]
},
Roles.role_name2: {
"name": "Role name 2",
"operations": [
Operations.oper_id,
]
},
}
# data/_tables.py
from bfs import TablesBase
class Tables(TablesBase):
TableName = "TableName"
AnotherTableName = "AnotherTableName"
# data/some_table.py
from bfs import SqlAlchemyBase, ObjMixin
from data._tables import Tables
class SomeTable(SqlAlchemyBase, ObjMixin):
__tablename__ = Tables.SomeTable
...
IdMixinaddsidcolumnObjMixinaddsidanddeletedcolumns
# main.py
import sys
from bfs import AppConfig, create_app
from scripts.init_dev_values import init_dev_values
app, run = create_app(__name__, AppConfig(
MESSAGE_TO_FRONTEND="",
DEV_MODE="dev" in sys.argv,
DELAY_MODE="delay" in sys.argv,
)
.add_data_folder("FONTS_FOLDER", "fonts")
.add_secret_key("API_SECRET_KEY", "secret_key_api.txt")
)
run(__name__ == "__main__", lambda: init_dev_values(True), port=5001)
modifying User and Image
User:
from sqlalchemy import Column, String
from sqlalchemy.orm import Session
from bfs import UserBase
from data._roles import Roles
class User(UserBase):
newColumn = Column(String)
@classmethod
def new(cls, creator: "User", login: str, password: str, name: str, roles: list[int], newColumn: str, db_sess: Session = None) -> "User":
return super().new(creator, login, password, name, roles, db_sess, newColumn=newColumn)
@staticmethod
def _new(db_sess: Session, user_kwargs: dict, newColumn: str):
user = User(**user_kwargs, newColumn=newColumn)
changes = [("newColumn", newColumn)]
return user, changes
@staticmethod
def create_admin(db_sess: Session):
fake_creator = User.get_fake_system()
return User.new(fake_creator, "admin", "admin", "Админ", [Roles.admin], "newColumnValue", db_sess=db_sess)
Image:
# to use relationship you must name the file something other than image.py
# img.py for the example, because of the way sqlalchemy finds classes
image = orm.relationship("data.img.Image")
from typing import TypedDict, Union
from sqlalchemy import Column, String
from bfs import Image as ImageBase, get_json_values
from data.user import User
class ImageJson(TypedDict):
data: str
name: str
newColumnData: str
TError = str
class Image(ImageBase):
newColumn = Column(String)
@classmethod
def new(cls, creator: User, json: ImageJson) -> Union[tuple[None, TError], tuple["Image", None]]:
return super().new(creator, json)
@staticmethod
def _new(creator: User, json: ImageJson, image_kwargs):
newColumnData, values_error = get_json_values(json, ("newColumnData", None))
if values_error:
return None, None, values_error
img = Image(**image_kwargs, newColumn=newColumnData)
changes = [("newColumn", newColumnData)]
return img, changes, None
csv header for requests log
reqid;ip;uid;asctime;method;url;level;message;code;json
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
bafser-1.0.3.tar.gz
(20.8 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
bafser-1.0.3-py3-none-any.whl
(35.1 kB
view details)
File details
Details for the file bafser-1.0.3.tar.gz.
File metadata
- Download URL: bafser-1.0.3.tar.gz
- Upload date:
- Size: 20.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8753b72b8e27c61823b36482ddff33db9e0d80826bb531cbec3ee5ff1d2ac8bb
|
|
| MD5 |
597c53d698e3f98d3ef283d153ad8af1
|
|
| BLAKE2b-256 |
e135100c81f010d28838be69df73b99dae0889cc9dadd5a2a7fa93f2ad4c4644
|
File details
Details for the file bafser-1.0.3-py3-none-any.whl.
File metadata
- Download URL: bafser-1.0.3-py3-none-any.whl
- Upload date:
- Size: 35.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a32b0850e1a767988111650b158fd1226e9a68c6a8f167bfec3e6b6a92b06c61
|
|
| MD5 |
d3a1d59f5fd7caacf031dae4e3191c59
|
|
| BLAKE2b-256 |
5097577384c5ac2871c5841f01d55fbb16ab0a021046a5636def30ebacad9a4a
|