From 201ffc0da57815d600cc61a2cd6f45dd026c96c3 Mon Sep 17 00:00:00 2001 From: Griatch Date: Wed, 3 Apr 2024 22:07:56 +0200 Subject: [PATCH] Some tweaks to xyzgrid error handling, as part of debugging #3475 --- evennia/contrib/grid/xyzgrid/xymap_legend.py | 10 ++++++++-- evennia/contrib/grid/xyzgrid/xyzroom.py | 7 ++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/evennia/contrib/grid/xyzgrid/xymap_legend.py b/evennia/contrib/grid/xyzgrid/xymap_legend.py index 8a205c48d2..29be2cca66 100644 --- a/evennia/contrib/grid/xyzgrid/xymap_legend.py +++ b/evennia/contrib/grid/xyzgrid/xymap_legend.py @@ -20,11 +20,11 @@ import uuid from collections import defaultdict from django.core import exceptions as django_exceptions - from evennia.prototypes import spawner from evennia.utils.utils import class_from_module -from .utils import BIGVAL, MAPSCAN, REVERSE_DIRECTIONS, MapError, MapParserError +from .utils import (BIGVAL, MAPSCAN, REVERSE_DIRECTIONS, MapError, + MapParserError) NodeTypeclass = None ExitTypeclass = None @@ -327,6 +327,12 @@ class MapNode: nodeobj, err = Typeclass.create(self.prototype.get("key", "An empty room"), xyz=xyz) if err: raise RuntimeError(err) + except django_exceptions.MultipleObjectsReturned: + raise MapError( + f"Multiple objects found: {NodeTypeclass.objects.filter_xyz(xyz=xyz)}. " + "This may be due to manual creation of XYZRooms at this position. " + "Delete duplicates.", self + ) else: self.log(f" updating existing room (if changed) at xyz={xyz}") diff --git a/evennia/contrib/grid/xyzgrid/xyzroom.py b/evennia/contrib/grid/xyzgrid/xyzroom.py index 1d63a85a6f..6bf4161620 100644 --- a/evennia/contrib/grid/xyzgrid/xyzroom.py +++ b/evennia/contrib/grid/xyzgrid/xyzroom.py @@ -9,7 +9,6 @@ used as stand-alone XYZ-coordinate-aware rooms. from django.conf import settings from django.db.models import Q - from evennia.objects.manager import ObjectManager from evennia.objects.objects import DefaultExit, DefaultRoom @@ -308,7 +307,8 @@ class XYZRoom(DefaultRoom): def xyzgrid(self): global GET_XYZGRID if not GET_XYZGRID: - from evennia.contrib.grid.xyzgrid.xyzgrid import get_xyzgrid as GET_XYZGRID + from evennia.contrib.grid.xyzgrid.xyzgrid import \ + get_xyzgrid as GET_XYZGRID return GET_XYZGRID() @property @@ -532,7 +532,8 @@ class XYZExit(DefaultExit): def xyzgrid(self): global GET_XYZGRID if not GET_XYZGRID: - from evennia.contrib.grid.xyzgrid.xyzgrid import get_xyzgrid as GET_XYZGRID + from evennia.contrib.grid.xyzgrid.xyzgrid import \ + get_xyzgrid as GET_XYZGRID return GET_XYZGRID() @property