Skip to content

Commit cf3a971

Browse files
committed
fix: runtime exception for module duplicate uuid
1 parent 745e93f commit cf3a971

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

arts-main/pubsub/handlers.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""MQTT message handlers."""
22

33
import uuid
4+
from django.db import IntegrityError
45

56
from arts_core.models import Runtime, Module, File, FileType
67
from arts_core.serializers import ModuleSerializer, RuntimeSerializer
@@ -108,7 +109,13 @@ def __create_module(self, msg, send_wasm=False):
108109
module = self.__object_from_dict(Module, data)
109110
module.source = self.__create_or_get_file(msg)
110111
module.parent = self.__get_runtime_or_schedule(msg, module)
111-
module.save()
112+
113+
try:
114+
module.save()
115+
except IntegrityError as e:
116+
if 'UNIQUE constraint' in str(e):
117+
raise messages.DuplicateUUID(data, obj_type='module')
118+
112119
self.profiler.register_module(
113120
msg.get('data', 'uuid'), msg.get('data', 'name'))
114121

arts-main/pubsub/messages.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,12 @@ def __init__(self, obj, obj_type="runtime"):
100100
super().__init__(
101101
{"desc": "invalid {} UUID".format(obj_type), "data": obj})
102102

103+
class DuplicateUUID(ARTSException):
104+
"""Exception for runtime/module when trying to create a duplicate UUID (expected in per-scene instantiated modules)."""
105+
106+
def __init__(self, obj, obj_type="runtime"):
107+
super().__init__(
108+
{"desc": "duplicate {} UUID; request ignored".format(obj_type), "data": obj})
103109

104110
class InvalidArgument(ARTSException):
105111
"""Exception for invalid argument value."""

0 commit comments

Comments
 (0)