mirror of
https://github.com/seanmorley15/AdventureLog.git
synced 2025-08-05 13:15:18 +02:00
feat: enhance adventure save method to support skipping geocode threading
This commit is contained in:
parent
ae16c12251
commit
53d370297e
1 changed files with 14 additions and 5 deletions
|
@ -44,7 +44,10 @@ def background_geocode_and_assign(adventure_id: str):
|
||||||
adventure.country = country
|
adventure.country = country
|
||||||
|
|
||||||
# Save updated location info
|
# Save updated location info
|
||||||
adventure.save(update_fields=["region", "city", "country"])
|
# Save updated location info, skip geocode threading
|
||||||
|
adventure.save(update_fields=["region", "city", "country"], _skip_geocode=True)
|
||||||
|
|
||||||
|
# print(f"[Adventure Geocode Thread] Successfully processed {adventure_id}: {adventure.name} - {adventure.latitude}, {adventure.longitude}")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# Optional: log or print the error
|
# Optional: log or print the error
|
||||||
|
@ -608,9 +611,10 @@ class Adventure(models.Model):
|
||||||
if self.user_id != self.category.user_id:
|
if self.user_id != self.category.user_id:
|
||||||
raise ValidationError('Adventures must be associated with categories owned by the same user. Category owner: ' + self.category.user_id.username + ' Adventure owner: ' + self.user_id.username)
|
raise ValidationError('Adventures must be associated with categories owned by the same user. Category owner: ' + self.category.user_id.username + ' Adventure owner: ' + self.user_id.username)
|
||||||
|
|
||||||
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
|
def save(self, force_insert=False, force_update=False, using=None, update_fields=None, _skip_geocode=False):
|
||||||
if force_insert and force_update:
|
if force_insert and force_update:
|
||||||
raise ValueError("Cannot force both insert and updating in model saving.")
|
raise ValueError("Cannot force both insert and updating in model saving.")
|
||||||
|
|
||||||
if not self.category:
|
if not self.category:
|
||||||
category, _ = Category.objects.get_or_create(
|
category, _ = Category.objects.get_or_create(
|
||||||
user_id=self.user_id,
|
user_id=self.user_id,
|
||||||
|
@ -619,15 +623,20 @@ class Adventure(models.Model):
|
||||||
)
|
)
|
||||||
self.category = category
|
self.category = category
|
||||||
|
|
||||||
# First save the adventure quickly
|
|
||||||
result = super().save(force_insert, force_update, using, update_fields)
|
result = super().save(force_insert, force_update, using, update_fields)
|
||||||
|
|
||||||
# Then fire off a thread to geocode + update region/city/country
|
# ⛔ Skip threading if called from geocode background thread
|
||||||
|
if _skip_geocode:
|
||||||
|
return result
|
||||||
|
|
||||||
if self.latitude and self.longitude:
|
if self.latitude and self.longitude:
|
||||||
threading.Thread(target=background_geocode_and_assign, args=(str(self.id),)).start()
|
thread = threading.Thread(target=background_geocode_and_assign, args=(str(self.id),))
|
||||||
|
thread.daemon = True # Allows the thread to exit when the main program ends
|
||||||
|
thread.start()
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue