Skip to content

Commit 506d209

Browse files
authored
Make x-API calls idempotent (#42)
Signed-off-by: Phil Dibowitz <phil@ipom.com>
1 parent 0b18c4a commit 506d209

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

guidebook/sync_guidebook.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,41 @@ def get_x_map_region_for_room(self, location_id):
397397
None,
398398
)
399399

400+
def x_map_region_needs_update(
401+
self, map_region, original_map_region, location_id
402+
):
403+
"""
404+
Compare the new map region data to the original map region data, and
405+
return True if we need to update.
406+
"""
407+
if original_map_region["location"]["id"] != location_id:
408+
self.logger.info(
409+
"Map region needs update because location changed: %s != %s",
410+
original_map_region["location"]["id"],
411+
location_id,
412+
)
413+
return True
414+
415+
fields_to_check = [
416+
("relative_x", map_region["x"]),
417+
("relative_y", map_region["y"]),
418+
("relative_width", map_region["w"]),
419+
("relative_height", map_region["h"]),
420+
]
421+
422+
for field_name, new_value in fields_to_check:
423+
original_value = original_map_region[field_name]
424+
if new_value != original_value:
425+
self.logger.info(
426+
"Map region needs update because '%s' changed: %s != %s",
427+
field_name,
428+
new_value,
429+
original_value,
430+
)
431+
return True
432+
433+
return False
434+
400435
def setup_x_map_regions(self):
401436
for room, map_region in self.ROOM_TO_MAP_REGION.items():
402437
if room not in self.x_rooms:
@@ -412,6 +447,16 @@ def setup_x_map_regions(self):
412447
location_id = self.x_rooms[room]["id"]
413448
guidebook_map_region = self.get_x_map_region_for_room(location_id)
414449
if guidebook_map_region:
450+
# Check if the map region actually needs updating
451+
if not self.x_map_region_needs_update(
452+
map_region, guidebook_map_region, location_id
453+
):
454+
self.logger.debug(
455+
"Map region for room '%s' exists in Guidebook and has "
456+
"correct coordinates. No update needed.",
457+
room,
458+
)
459+
continue
415460
update = True
416461
rid = guidebook_map_region["id"]
417462

0 commit comments

Comments
 (0)