improve: upgrade node to 20, upgrade react-query to v4

This commit is contained in:
h z
2025-04-27 00:36:42 +01:00
parent 84494827ad
commit 85d8124a0c
7 changed files with 36 additions and 20 deletions

4
app.py
View File

@@ -1,4 +1,6 @@
from pprint import pprint from pprint import pprint
from events.WebhookEventHandlers import register_all_webhook_event_handlers
from logging_handlers.DatabaseLogHandler import DatabaseLogHandler from logging_handlers.DatabaseLogHandler import DatabaseLogHandler
from api import limiter from api import limiter
from flask import Flask, request from flask import Flask, request
@@ -42,7 +44,7 @@ CORS(app, resources={
limiter.init_app(app) limiter.init_app(app)
api.register_blueprints(app) api.register_blueprints(app)
register_all_webhook_event_handlers()
@app.before_request @app.before_request
def log_request(): def log_request():
if request.path.startswith("/api/log"): if request.path.startswith("/api/log"):

View File

@@ -10,7 +10,7 @@ class Path(Base):
name = Column(String(50), nullable=False) name = Column(String(50), nullable=False)
parent_id = Column(Integer, ForeignKey("path.id"), nullable=True) parent_id = Column(Integer, ForeignKey("path.id"), nullable=True)
order = Column(String(36), default=lambda: str(uuid.uuid4())) order = Column(String(36), default=lambda: str(uuid.uuid4()))
setting_id = Column(Integer, ForeignKey("path_settings.id"), nullable=True) setting_id = Column(Integer, ForeignKey("path_setting.id"), nullable=True)
__table_args__ = (UniqueConstraint("parent_id", "name", name="unique_parent_id_name"), ) __table_args__ = (UniqueConstraint("parent_id", "name", name="unique_parent_id_name"), )
def to_dict(self): def to_dict(self):
return { return {

View File

@@ -4,7 +4,7 @@ from db.models import Base
class PathSetting(Base): class PathSetting(Base):
__tablename__ = 'path_settings' __tablename__ = 'path_setting'
id = Column(Integer, primary_key=True, autoincrement=True) id = Column(Integer, primary_key=True, autoincrement=True)
webhook_setting_id = Column(Integer, ForeignKey('webhook_setting.id'), nullable=True) webhook_setting_id = Column(Integer, ForeignKey('webhook_setting.id'), nullable=True)
template_setting_id = Column(Integer, ForeignKey('path_template.id'), nullable=True) template_setting_id = Column(Integer, ForeignKey('path_template.id'), nullable=True)

View File

@@ -1,7 +1,10 @@
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from db.models.Path import Path from db.models.Path import Path
from db.models.PathSetting import PathSetting
from db.models.Webhook import Webhook from db.models.Webhook import Webhook
from db.models.WebhookSetting import WebhookSetting from db.models.WebhookSetting import WebhookSetting
from events import MARKDOWN_CREATED_EVENT, MARKDOWN_UPDATED_EVENT, MARKDOWN_DELETED_EVENT, PATH_CREATED_EVENT, \
PATH_UPDATED_EVENT, PATH_DELETED_EVENT
import abc import abc
import importlib import importlib
import json import json
@@ -9,6 +12,15 @@ import pkgutil
import requests import requests
import db import db
event_type_map = {
MARKDOWN_CREATED_EVENT: 'markdown_created_event',
MARKDOWN_UPDATED_EVENT: 'markdown_updated_event',
MARKDOWN_DELETED_EVENT: 'markdown_deleted_event',
PATH_CREATED_EVENT: 'path_created_event',
PATH_UPDATED_EVENT: 'path_updated_event',
PATH_DELETED_EVENT: 'path_deleted_event',
}
class WebhookEventHandler(abc.ABC): class WebhookEventHandler(abc.ABC):
def __init__(self, event_type=0): def __init__(self, event_type=0):
self.event_type = event_type self.event_type = event_type
@@ -17,20 +29,21 @@ class WebhookEventHandler(abc.ABC):
def get_path_id(self, payload): def get_path_id(self, payload):
pass pass
def __call__(self, **kwargs): def __call__(self, *args, **kwargs):
payload = kwargs['payload'] payload = kwargs['payload']
path_id = self.get_path_id(payload) path_id = self.get_path_id(payload)
with db.get_db() as session: with db.get_db() as session:
setting = self.get_setting(session, path_id) setting = self.get_setting(session, path_id)
if setting is None: if setting is None:
return return
headers = {'Content-Type': 'application/json'} headers = {'Content-Type': 'application/json', 'x-alchegos-event': event_type_map[self.event_type]}
if setting["additional_headers"] is not None: if setting.get("additional_header", None) is not None:
headers.update(json.loads(setting["additional_headers"])) headers.update(json.loads(setting["additional_header"]))
body = json.dumps(payload, default=str)
try: try:
response = requests.post(setting["webhook_url"], json=payload, headers=headers, timeout=5) response = requests.post(setting["webhook_url"], data=body, headers=headers, timeout=5)
response.raise_for_status() response.raise_for_status()
except requests.RequestException as e: except Exception as e:
print(e) print(e)
def get_setting(self, session: Session, path_id): def get_setting(self, session: Session, path_id):
@@ -39,7 +52,10 @@ class WebhookEventHandler(abc.ABC):
if path is None: if path is None:
return None return None
p = path.to_dict() p = path.to_dict()
webhook_setting = session.query(WebhookSetting).filter(WebhookSetting.path_id == path_id).first() path_setting = session.query(PathSetting).get(path.setting_id)
if path_setting is None:
return None
webhook_setting = session.query(WebhookSetting).get(path_setting.webhook_setting_id)
if webhook_setting is None and p["parent_id"] != 1: if webhook_setting is None and p["parent_id"] != 1:
return self.get_setting(session, p["parent_id"]) return self.get_setting(session, p["parent_id"])
@@ -47,7 +63,7 @@ class WebhookEventHandler(abc.ABC):
setting = webhook_setting.to_dict() setting = webhook_setting.to_dict()
if not setting["enabled"] or setting["on_events"] & self.event_type == 0: if not setting["enabled"] or setting["on_events"] & self.event_type == 0:
return None return None
webhook = session.query(Webhook).filter(Webhook.id == webhook_setting.webhook_id).first() webhook = session.query(Webhook).get(webhook_setting.webhook_id)
if webhook is None: if webhook is None:
return None return None
setting["webhook_url"] = webhook.to_dict()["hook_url"] setting["webhook_url"] = webhook.to_dict()["hook_url"]

View File

@@ -1,9 +0,0 @@
cryptography==44.0.0
Flask==3.1.0
Flask_Cors==5.0.0
Flask_Limiter==3.9.2
PyJWT==2.10.1
PyJWT==2.10.1
python-dotenv==1.0.1
Requests==2.32.3
SQLAlchemy==2.0.36

5
requirements-test.txt Normal file
View File

@@ -0,0 +1,5 @@
# Test dependencies
pytest==7.4.0
pytest-flask==1.2.0
pytest-cov==4.1.0
pytest-mock==3.11.1

View File

@@ -34,3 +34,5 @@ typing_extensions==4.12.2
urllib3==2.2.3 urllib3==2.2.3
Werkzeug==3.1.3 Werkzeug==3.1.3
wrapt==1.17.0 wrapt==1.17.0
pytest~=8.3.5