[Plugin] schedule: Restructure plugin
This commit is contained in:
parent
67fb895cf4
commit
63660743bd
|
@ -3,31 +3,21 @@ from datetime import datetime, timedelta
|
||||||
from flask import Blueprint, request, jsonify
|
from flask import Blueprint, request, jsonify
|
||||||
from werkzeug.exceptions import BadRequest, NotFound
|
from werkzeug.exceptions import BadRequest, NotFound
|
||||||
|
|
||||||
from flaschengeist.plugins import Plugin
|
|
||||||
from flaschengeist.database import db
|
from flaschengeist.database import db
|
||||||
from flaschengeist.models.event import EventKind
|
from flaschengeist.plugins import Plugin
|
||||||
from flaschengeist.decorator import login_required
|
from flaschengeist.decorator import login_required
|
||||||
from flaschengeist.controller import eventController
|
|
||||||
|
from .models import EventKind
|
||||||
|
from . import event_controller, permissions
|
||||||
|
|
||||||
schedule_bp = Blueprint("schedule", __name__, url_prefix="/schedule")
|
schedule_bp = Blueprint("schedule", __name__, url_prefix="/schedule")
|
||||||
_permission_edit_type = "schedule_edit_type"
|
|
||||||
_permission_edit = "schedule_edit"
|
|
||||||
_permission_create = "schedule_create"
|
|
||||||
_permission_delete = "schedule_delete"
|
|
||||||
_permission_assign = "schedule_assign_other"
|
|
||||||
|
|
||||||
|
|
||||||
class SchedulePlugin(Plugin):
|
class SchedulePlugin(Plugin):
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
blueprint=schedule_bp,
|
blueprint=schedule_bp,
|
||||||
permissions=[
|
permissions=permissions.permissions,
|
||||||
_permission_create,
|
|
||||||
_permission_edit,
|
|
||||||
_permission_edit_type,
|
|
||||||
_permission_delete,
|
|
||||||
_permission_assign,
|
|
||||||
],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,7 +46,7 @@ class SchedulePlugin(Plugin):
|
||||||
@schedule_bp.route("/events/<int:eid>", methods=["GET"])
|
@schedule_bp.route("/events/<int:eid>", methods=["GET"])
|
||||||
@login_required()
|
@login_required()
|
||||||
def __get_event(eid, **kwargs):
|
def __get_event(eid, **kwargs):
|
||||||
event = eventController.get_event(eid)
|
event = event_controller.get_event(eid)
|
||||||
if not event:
|
if not event:
|
||||||
raise NotFound
|
raise NotFound
|
||||||
return jsonify(event)
|
return jsonify(event)
|
||||||
|
@ -91,7 +81,7 @@ def __get_events(year=datetime.now().year, month=datetime.now().month, day=None,
|
||||||
else:
|
else:
|
||||||
end = datetime(year=year, month=month + 1, day=1)
|
end = datetime(year=year, month=month + 1, day=1)
|
||||||
|
|
||||||
events = eventController.get_events(begin, end)
|
events = event_controller.get_events(begin, end)
|
||||||
return jsonify(events)
|
return jsonify(events)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise BadRequest("Invalid date given")
|
raise BadRequest("Invalid date given")
|
||||||
|
@ -103,7 +93,7 @@ def __new_event_kind(**kwargs):
|
||||||
data = request.get_json()
|
data = request.get_json()
|
||||||
if "name" not in data:
|
if "name" not in data:
|
||||||
raise BadRequest
|
raise BadRequest
|
||||||
kind = eventController.create_event_kind(data["name"])
|
kind = event_controller.create_event_kind(data["name"])
|
||||||
return jsonify({"ok": "ok", "id": kind.id})
|
return jsonify({"ok": "ok", "id": kind.id})
|
||||||
|
|
||||||
|
|
||||||
|
@ -113,7 +103,7 @@ def __new_slot_kind(**kwargs):
|
||||||
data = request.get_json()
|
data = request.get_json()
|
||||||
if not data or "name" not in data:
|
if not data or "name" not in data:
|
||||||
raise BadRequest
|
raise BadRequest
|
||||||
kind = eventController.create_job_kind(data["name"])
|
kind = event_controller.create_job_kind(data["name"])
|
||||||
return jsonify({"ok": "ok", "id": kind.id})
|
return jsonify({"ok": "ok", "id": kind.id})
|
||||||
|
|
||||||
|
|
||||||
|
@ -121,7 +111,7 @@ def __new_slot_kind(**kwargs):
|
||||||
@login_required(permission=_permission_create)
|
@login_required(permission=_permission_create)
|
||||||
def __new_event(**kwargs):
|
def __new_event(**kwargs):
|
||||||
data = request.get_json()
|
data = request.get_json()
|
||||||
event = eventController.create_event(
|
event = event_controller.create_event(
|
||||||
begin=parser.isoparse(data["begin"]),
|
begin=parser.isoparse(data["begin"]),
|
||||||
end=parser.isoparse(data["end"]),
|
end=parser.isoparse(data["end"]),
|
||||||
description=data["description"],
|
description=data["description"],
|
||||||
|
@ -133,7 +123,7 @@ def __new_event(**kwargs):
|
||||||
@schedule_bp.route("/events/<int:event_id>", methods=["DELETE"])
|
@schedule_bp.route("/events/<int:event_id>", methods=["DELETE"])
|
||||||
@login_required(permission=_permission_delete)
|
@login_required(permission=_permission_delete)
|
||||||
def __delete_event(event_id, **kwargs):
|
def __delete_event(event_id, **kwargs):
|
||||||
if not eventController.delete_event(event_id):
|
if not event_controller.delete_event(event_id):
|
||||||
raise NotFound
|
raise NotFound
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return jsonify({"ok": "ok"})
|
return jsonify({"ok": "ok"})
|
||||||
|
@ -145,14 +135,14 @@ def __edit_event_kind(event_id, **kwargs):
|
||||||
data = request.get_json()
|
data = request.get_json()
|
||||||
if not data or "name" not in data:
|
if not data or "name" not in data:
|
||||||
raise BadRequest
|
raise BadRequest
|
||||||
eventController.rename_event_kind(event_id, data["name"])
|
event_controller.rename_event_kind(event_id, data["name"])
|
||||||
return jsonify({"ok": "ok"})
|
return jsonify({"ok": "ok"})
|
||||||
|
|
||||||
|
|
||||||
@schedule_bp.route("/events/<int:event_id>/slots", methods=["GET"])
|
@schedule_bp.route("/events/<int:event_id>/slots", methods=["GET"])
|
||||||
@login_required()
|
@login_required()
|
||||||
def __get_slots(event_id, **kwargs):
|
def __get_slots(event_id, **kwargs):
|
||||||
event = eventController.get_event(event_id)
|
event = event_controller.get_event(event_id)
|
||||||
if not event:
|
if not event:
|
||||||
raise NotFound
|
raise NotFound
|
||||||
return jsonify({event.slots})
|
return jsonify({event.slots})
|
||||||
|
@ -161,7 +151,7 @@ def __get_slots(event_id, **kwargs):
|
||||||
@schedule_bp.route("/events/<int:event_id>/slots/<int:slot_id>", methods=["GET"])
|
@schedule_bp.route("/events/<int:event_id>/slots/<int:slot_id>", methods=["GET"])
|
||||||
@login_required()
|
@login_required()
|
||||||
def __get_slot(event_id, slot_id, **kwargs):
|
def __get_slot(event_id, slot_id, **kwargs):
|
||||||
slot = eventController.get_event_slot(slot_id, event_id)
|
slot = event_controller.get_event_slot(slot_id, event_id)
|
||||||
if slot:
|
if slot:
|
||||||
return jsonify(slot)
|
return jsonify(slot)
|
||||||
raise NotFound
|
raise NotFound
|
||||||
|
@ -170,7 +160,7 @@ def __get_slot(event_id, slot_id, **kwargs):
|
||||||
@schedule_bp.route("/events/<int:event_id>/slots/<int:slot_id>", methods=["DELETE"])
|
@schedule_bp.route("/events/<int:event_id>/slots/<int:slot_id>", methods=["DELETE"])
|
||||||
@login_required(permission=_permission_delete)
|
@login_required(permission=_permission_delete)
|
||||||
def __delete_slot(event_id, slot_id, **kwargs):
|
def __delete_slot(event_id, slot_id, **kwargs):
|
||||||
if eventController.delete_event_slot(slot_id, event_id):
|
if event_controller.delete_event_slot(slot_id, event_id):
|
||||||
return jsonify({"ok": "ok"})
|
return jsonify({"ok": "ok"})
|
||||||
raise NotFound
|
raise NotFound
|
||||||
|
|
||||||
|
@ -183,8 +173,8 @@ def __update_slot(event_id, slot_id, **kwargs):
|
||||||
raise BadRequest
|
raise BadRequest
|
||||||
|
|
||||||
for job in data["jobs"]:
|
for job in data["jobs"]:
|
||||||
eventController.add_job(job.kind, job.user)
|
event_controller.add_job(job.kind, job.user)
|
||||||
if eventController.delete_event_slot(slot_id, event_id):
|
if event_controller.delete_event_slot(slot_id, event_id):
|
||||||
return jsonify({"ok": "ok"})
|
return jsonify({"ok": "ok"})
|
||||||
raise NotFound
|
raise NotFound
|
||||||
|
|
||||||
|
@ -192,7 +182,7 @@ def __update_slot(event_id, slot_id, **kwargs):
|
||||||
@schedule_bp.route("/events/<int:event_id>/slots", methods=["POST"])
|
@schedule_bp.route("/events/<int:event_id>/slots", methods=["POST"])
|
||||||
@login_required(permission=_permission_edit)
|
@login_required(permission=_permission_edit)
|
||||||
def __add_slot(event_id, **kwargs):
|
def __add_slot(event_id, **kwargs):
|
||||||
event = eventController.get_event(event_id)
|
event = event_controller.get_event(event_id)
|
||||||
if not event:
|
if not event:
|
||||||
raise NotFound
|
raise NotFound
|
||||||
data = request.get_json()
|
data = request.get_json()
|
||||||
|
@ -206,7 +196,7 @@ def __add_slot(event_id, **kwargs):
|
||||||
attr["job_slots"].append({"needed_persons": job["needed_persons"], "kind": job["kind"]})
|
attr["job_slots"].append({"needed_persons": job["needed_persons"], "kind": job["kind"]})
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise BadRequest("Missing data in request")
|
raise BadRequest("Missing data in request")
|
||||||
eventController.add_slot(event, **attr)
|
event_controller.add_slot(event, **attr)
|
||||||
return jsonify({"ok": "ok"})
|
return jsonify({"ok": "ok"})
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
from flaschengeist import logger
|
from flaschengeist import logger
|
||||||
from flaschengeist.database import db
|
from flaschengeist.database import db
|
||||||
from flaschengeist.models.event import EventKind, Event, EventSlot, JobSlot, JobKind
|
from flaschengeist.plugins.schedule.models import EventKind, Event, EventSlot, JobSlot, JobKind
|
||||||
|
|
||||||
|
|
||||||
def get_event(id):
|
def get_event(id):
|
|
@ -1,8 +1,8 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from . import ModelSerializeMixin
|
from flaschengeist.models import ModelSerializeMixin
|
||||||
from .user import User
|
from flaschengeist.models.user import User
|
||||||
from flaschengeist.database import db
|
from flaschengeist.database import db
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
CREATE = "schedule_create"
|
||||||
|
"""Can create events"""
|
||||||
|
|
||||||
|
EDIT = "schedule_edit"
|
||||||
|
"""Can edit events"""
|
||||||
|
|
||||||
|
DELETE = "schedule_delete"
|
||||||
|
"""Can delete events"""
|
||||||
|
|
||||||
|
EVENT_TYPE = "schedule_event_type"
|
||||||
|
"""Can create and edit EventTypes"""
|
||||||
|
|
||||||
|
ASSIGN = "schedule_assign"
|
||||||
|
"""Can self assign to jobs"""
|
||||||
|
|
||||||
|
ASSIGN_OTHER = "schedule_assign_other"
|
||||||
|
"""Can assign other users to jobs"""
|
||||||
|
|
||||||
|
permissions = [value for key, value in globals().items() if not key.startswith("_")]
|
Loading…
Reference in New Issue