[events] Allow server side pageination
This commit is contained in:
parent
48933cdf5f
commit
d00c603697
|
@ -124,7 +124,14 @@ def get_templates():
|
||||||
return Event.query.filter(Event.is_template == True).all()
|
return Event.query.filter(Event.is_template == True).all()
|
||||||
|
|
||||||
|
|
||||||
def get_events(start: Optional[datetime] = None, end=None, with_backup=False):
|
def get_events(
|
||||||
|
start: Optional[datetime] = None,
|
||||||
|
end: Optional[datetime] = None,
|
||||||
|
limit: Optional[int] = None,
|
||||||
|
offset: Optional[int] = None,
|
||||||
|
descending: Optional[bool] = False,
|
||||||
|
with_backup=False,
|
||||||
|
):
|
||||||
"""Query events which start from begin until end
|
"""Query events which start from begin until end
|
||||||
Args:
|
Args:
|
||||||
start (datetime): Earliest start
|
start (datetime): Earliest start
|
||||||
|
@ -138,6 +145,14 @@ def get_events(start: Optional[datetime] = None, end=None, with_backup=False):
|
||||||
query = query.filter(start <= Event.start)
|
query = query.filter(start <= Event.start)
|
||||||
if end is not None:
|
if end is not None:
|
||||||
query = query.filter(Event.start < end)
|
query = query.filter(Event.start < end)
|
||||||
|
if descending:
|
||||||
|
query = query.order_by(Event.start.desc())
|
||||||
|
else:
|
||||||
|
query = query.order_by(Event.start)
|
||||||
|
if limit is not None:
|
||||||
|
query = query.limit(limit)
|
||||||
|
if offset is not None and offset > 0:
|
||||||
|
query = query.offset(offset)
|
||||||
events = query.all()
|
events = query.all()
|
||||||
if not with_backup:
|
if not with_backup:
|
||||||
for event in events:
|
for event in events:
|
||||||
|
@ -188,7 +203,13 @@ def get_job(job_slot_id, event_id):
|
||||||
|
|
||||||
|
|
||||||
def add_job(event, job_type, required_services, start, end=None, comment=None):
|
def add_job(event, job_type, required_services, start, end=None, comment=None):
|
||||||
job = Job(required_services=required_services, type=job_type, start=start, end=end, comment=comment)
|
job = Job(
|
||||||
|
required_services=required_services,
|
||||||
|
type=job_type,
|
||||||
|
start=start,
|
||||||
|
end=end,
|
||||||
|
comment=comment,
|
||||||
|
)
|
||||||
event.jobs.append(job)
|
event.jobs.append(job)
|
||||||
update()
|
update()
|
||||||
return job
|
return job
|
||||||
|
@ -198,7 +219,10 @@ def update():
|
||||||
try:
|
try:
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
logger.debug("Error, looks like a Job with that type already exists on an event", exc_info=True)
|
logger.debug(
|
||||||
|
"Error, looks like a Job with that type already exists on an event",
|
||||||
|
exc_info=True,
|
||||||
|
)
|
||||||
raise BadRequest()
|
raise BadRequest()
|
||||||
|
|
||||||
|
|
||||||
|
@ -222,21 +246,19 @@ def assign_job(job: Job, user, value):
|
||||||
|
|
||||||
def unassign_job(job: Job = None, user=None, service=None, notify=False):
|
def unassign_job(job: Job = None, user=None, service=None, notify=False):
|
||||||
if service is None:
|
if service is None:
|
||||||
assert(job is not None and user is not None)
|
assert job is not None and user is not None
|
||||||
service = Service.query.get((job.id, user.id_))
|
service = Service.query.get((job.id, user.id_))
|
||||||
else:
|
else:
|
||||||
user = service.user_
|
user = service.user_
|
||||||
if not service:
|
if not service:
|
||||||
raise BadRequest
|
raise BadRequest
|
||||||
|
|
||||||
event_id = service.job_.event_id_
|
event_id = service.job_.event_id_
|
||||||
|
|
||||||
db.session.delete(service)
|
db.session.delete(service)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
if notify:
|
if notify:
|
||||||
EventPlugin.plugin.notify(
|
EventPlugin.plugin.notify(user, "Your assignmet was cancelled", {"event_id": event_id})
|
||||||
user, "Your assignmet was cancelled", {"event_id": event_id}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@scheduled
|
@scheduled
|
||||||
|
@ -249,7 +271,9 @@ def assign_backups():
|
||||||
for service in services:
|
for service in services:
|
||||||
if service.job_.start <= now or service.job_.is_full():
|
if service.job_.start <= now or service.job_.is_full():
|
||||||
EventPlugin.plugin.notify(
|
EventPlugin.plugin.notify(
|
||||||
service.user_, "Your backup assignment was cancelled.", {"event_id": service.job_.event_id_}
|
service.user_,
|
||||||
|
"Your backup assignment was cancelled.",
|
||||||
|
{"event_id": service.job_.event_id_},
|
||||||
)
|
)
|
||||||
logger.debug(f"Service is outdated or full, removing. {service.serialize()}")
|
logger.debug(f"Service is outdated or full, removing. {service.serialize()}")
|
||||||
db.session.delete(service)
|
db.session.delete(service)
|
||||||
|
@ -257,6 +281,8 @@ def assign_backups():
|
||||||
service.is_backup = False
|
service.is_backup = False
|
||||||
logger.debug(f"Service not full, assigning backup. {service.serialize()}")
|
logger.debug(f"Service not full, assigning backup. {service.serialize()}")
|
||||||
EventPlugin.plugin.notify(
|
EventPlugin.plugin.notify(
|
||||||
service.user_, "Your backup assignment was accepted.", {"event_id": service.job_.event_id_}
|
service.user_,
|
||||||
|
"Your backup assignment was accepted.",
|
||||||
|
{"event_id": service.job_.event_id_},
|
||||||
)
|
)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
|
@ -169,7 +169,8 @@ def get_event(event_id, current_session):
|
||||||
JSON encoded event object
|
JSON encoded event object
|
||||||
"""
|
"""
|
||||||
event = event_controller.get_event(
|
event = event_controller.get_event(
|
||||||
event_id, with_backup=current_session.user_.has_permission(permissions.SEE_BACKUP)
|
event_id,
|
||||||
|
with_backup=current_session.user_.has_permission(permissions.SEE_BACKUP),
|
||||||
)
|
)
|
||||||
return jsonify(event)
|
return jsonify(event)
|
||||||
|
|
||||||
|
@ -177,17 +178,21 @@ def get_event(event_id, current_session):
|
||||||
@EventPlugin.blueprint.route("/events", methods=["GET"])
|
@EventPlugin.blueprint.route("/events", methods=["GET"])
|
||||||
@login_required()
|
@login_required()
|
||||||
def get_filtered_events(current_session):
|
def get_filtered_events(current_session):
|
||||||
begin = request.args.get("from")
|
begin = request.args.get("from", type=from_iso_format)
|
||||||
if begin is not None:
|
end = request.args.get("to", type=from_iso_format)
|
||||||
begin = from_iso_format(begin)
|
limit = request.args.get("limit", type=int)
|
||||||
end = request.args.get("to")
|
offset = request.args.get("offset", type=int)
|
||||||
if end is not None:
|
descending = "descending" in request.args
|
||||||
end = from_iso_format(end)
|
|
||||||
if begin is None and end is None:
|
if begin is None and end is None:
|
||||||
begin = datetime.now()
|
begin = datetime.now()
|
||||||
return jsonify(
|
return jsonify(
|
||||||
event_controller.get_events(
|
event_controller.get_events(
|
||||||
begin, end, with_backup=current_session.user_.has_permission(permissions.SEE_BACKUP)
|
start=begin,
|
||||||
|
end=end,
|
||||||
|
limit=limit,
|
||||||
|
offset=offset,
|
||||||
|
descending=descending,
|
||||||
|
with_backup=current_session.user_.has_permission(permissions.SEE_BACKUP),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -222,7 +227,9 @@ def get_events(current_session, year=datetime.now().year, month=datetime.now().m
|
||||||
end = datetime(year=year, month=month + 1, day=1, tzinfo=timezone.utc)
|
end = datetime(year=year, month=month + 1, day=1, tzinfo=timezone.utc)
|
||||||
|
|
||||||
events = event_controller.get_events(
|
events = event_controller.get_events(
|
||||||
begin, end, with_backup=current_session.user_.has_permission(permissions.SEE_BACKUP)
|
begin,
|
||||||
|
end,
|
||||||
|
with_backup=current_session.user_.has_permission(permissions.SEE_BACKUP),
|
||||||
)
|
)
|
||||||
return jsonify(events)
|
return jsonify(events)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
@ -243,7 +250,14 @@ def _add_job(event, data):
|
||||||
raise BadRequest("Missing or invalid POST parameter")
|
raise BadRequest("Missing or invalid POST parameter")
|
||||||
|
|
||||||
job_type = event_controller.get_job_type(job_type)
|
job_type = event_controller.get_job_type(job_type)
|
||||||
event_controller.add_job(event, job_type, required_services, start, end, comment=data.get("comment", None))
|
event_controller.add_job(
|
||||||
|
event,
|
||||||
|
job_type,
|
||||||
|
required_services,
|
||||||
|
start,
|
||||||
|
end,
|
||||||
|
comment=data.get("comment", None),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@EventPlugin.blueprint.route("/events", methods=["POST"])
|
@EventPlugin.blueprint.route("/events", methods=["POST"])
|
||||||
|
|
Loading…
Reference in New Issue