add get notifications of plugin
This commit is contained in:
parent
47442fe211
commit
f38fb334f1
|
@ -3,7 +3,7 @@
|
||||||
Used by plugins for setting and notification functionality.
|
Used by plugins for setting and notification functionality.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from typing import Union
|
from typing import Union, List
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
from werkzeug.exceptions import NotFound, BadRequest
|
from werkzeug.exceptions import NotFound, BadRequest
|
||||||
from sqlalchemy.exc import OperationalError, ProgrammingError
|
from sqlalchemy.exc import OperationalError, ProgrammingError
|
||||||
|
@ -56,7 +56,7 @@ def get_enabled_plugins() -> list[Plugin]:
|
||||||
return enabled_plugins
|
return enabled_plugins
|
||||||
|
|
||||||
|
|
||||||
def notify(plugin_id: str, user, text: str, data=None):
|
def notify(plugin_id: int, user, text: str, data=None):
|
||||||
"""Create a new notification for an user
|
"""Create a new notification for an user
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -70,12 +70,23 @@ def notify(plugin_id: str, user, text: str, data=None):
|
||||||
Hint: use the data for frontend actions.
|
Hint: use the data for frontend actions.
|
||||||
"""
|
"""
|
||||||
if not user.deleted:
|
if not user.deleted:
|
||||||
n = Notification(text=text, data=data, plugin=plugin_id, user_=user)
|
n = Notification(text=text, data=data, plugin_id_=plugin_id, user_=user)
|
||||||
db.session.add(n)
|
db.session.add(n)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return n.id
|
return n.id
|
||||||
|
|
||||||
|
|
||||||
|
def get_notifications(plugin_id) -> List[Notification]:
|
||||||
|
"""Get all notifications for a plugin
|
||||||
|
|
||||||
|
Args:
|
||||||
|
plugin_id: ID of the plugin
|
||||||
|
Returns:
|
||||||
|
List of `flaschengeist.models.notification.Notification`
|
||||||
|
"""
|
||||||
|
return db.session.execute(db.select(Notification).where(Notification.plugin_id_ == plugin_id)).scalars().all()
|
||||||
|
|
||||||
|
|
||||||
@Hook("plugins.installed")
|
@Hook("plugins.installed")
|
||||||
def install_plugin(plugin_name: str):
|
def install_plugin(plugin_name: str):
|
||||||
logger.debug(f"Installing plugin {plugin_name}")
|
logger.debug(f"Installing plugin {plugin_name}")
|
||||||
|
|
|
@ -21,7 +21,8 @@ class Notification(db.Model, ModelSerializeMixin):
|
||||||
plugin_: Plugin = db.relationship(
|
plugin_: Plugin = db.relationship(
|
||||||
"Plugin", backref=db.backref("notifications_", cascade="all, delete, delete-orphan")
|
"Plugin", backref=db.backref("notifications_", cascade="all, delete, delete-orphan")
|
||||||
)
|
)
|
||||||
|
plugin: str
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def plugin(self):
|
def plugin(self) -> str:
|
||||||
return self.plugin_.name
|
return self.plugin_.name
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from typing import Union
|
from typing import Union, List
|
||||||
from importlib.metadata import entry_points
|
from importlib.metadata import entry_points
|
||||||
from werkzeug.exceptions import NotFound
|
from werkzeug.exceptions import NotFound
|
||||||
from werkzeug.datastructures import FileStorage
|
from werkzeug.datastructures import FileStorage
|
||||||
|
@ -142,7 +142,18 @@ class Plugin(BasePlugin):
|
||||||
"""
|
"""
|
||||||
from ..controller import pluginController
|
from ..controller import pluginController
|
||||||
|
|
||||||
return pluginController.notify(self.name, user, text, data)
|
return pluginController.notify(self.id, user, text, data)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def notifications(self) -> List["Notification"]:
|
||||||
|
"""Get all notifications for this plugin
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List of `flaschengeist.models.notification.Notification`
|
||||||
|
"""
|
||||||
|
from ..controller import pluginController
|
||||||
|
|
||||||
|
return pluginController.get_notifications(self.id)
|
||||||
|
|
||||||
def serialize(self):
|
def serialize(self):
|
||||||
"""Serialize a plugin into a dict
|
"""Serialize a plugin into a dict
|
||||||
|
|
Loading…
Reference in New Issue