mirror of
https://github.com/aljazceru/python-teos.git
synced 2025-12-17 14:14:22 +01:00
Fixes slots difference calculation
This commit is contained in:
16
teos/api.py
16
teos/api.py
@@ -1,6 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
from math import ceil
|
from math import ceil, floor
|
||||||
from flask import Flask, request, abort, jsonify
|
from flask import Flask, request, abort, jsonify
|
||||||
|
|
||||||
import teos.errors as errors
|
import teos.errors as errors
|
||||||
@@ -175,8 +175,10 @@ class API:
|
|||||||
|
|
||||||
# For updates we only reserve the slot difference provided the new one is bigger.
|
# For updates we only reserve the slot difference provided the new one is bigger.
|
||||||
if appointment_summary:
|
if appointment_summary:
|
||||||
size_diff = len(appointment.encrypted_blob.data) - appointment_summary.get("size")
|
used_slots = ceil(appointment_summary.get("size") / ENCRYPTED_BLOB_MAX_SIZE_HEX)
|
||||||
slot_diff = ceil(size_diff / ENCRYPTED_BLOB_MAX_SIZE_HEX)
|
required_slots = ceil(len(appointment.encrypted_blob.data) / ENCRYPTED_BLOB_MAX_SIZE_HEX)
|
||||||
|
slot_diff = required_slots - used_slots
|
||||||
|
|
||||||
required_slots = slot_diff if slot_diff > 0 else 0
|
required_slots = slot_diff if slot_diff > 0 else 0
|
||||||
|
|
||||||
# For regular appointments 1 slot is reserved per ENCRYPTED_BLOB_MAX_SIZE_HEX block.
|
# For regular appointments 1 slot is reserved per ENCRYPTED_BLOB_MAX_SIZE_HEX block.
|
||||||
@@ -191,6 +193,10 @@ class API:
|
|||||||
appointment_added, signature = self.watcher.add_appointment(appointment, user_pk)
|
appointment_added, signature = self.watcher.add_appointment(appointment, user_pk)
|
||||||
|
|
||||||
if appointment_added:
|
if appointment_added:
|
||||||
|
# If the appointment is added and the update is smaller than the original, the difference is given back.
|
||||||
|
if slot_diff < 0:
|
||||||
|
self.gatekeeper.free_slots(user_pk, abs(slot_diff))
|
||||||
|
|
||||||
rcode = HTTP_OK
|
rcode = HTTP_OK
|
||||||
response = {
|
response = {
|
||||||
"locator": appointment.locator,
|
"locator": appointment.locator,
|
||||||
@@ -198,10 +204,6 @@ class API:
|
|||||||
"available_slots": self.gatekeeper.registered_users[user_pk],
|
"available_slots": self.gatekeeper.registered_users[user_pk],
|
||||||
}
|
}
|
||||||
|
|
||||||
# If the appointment is added and the update is smaller than the original, the difference is given back.
|
|
||||||
if slot_diff < 0:
|
|
||||||
self.gatekeeper.free_slots(slot_diff)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# If the appointment is not added the reserved slots are given back
|
# If the appointment is not added the reserved slots are given back
|
||||||
self.gatekeeper.free_slots(user_pk, required_slots)
|
self.gatekeeper.free_slots(user_pk, required_slots)
|
||||||
|
|||||||
Reference in New Issue
Block a user