CORD-2977 Fix failure to resolve generic foreign keys;
Fix exception reporting in xossh
Change-Id: Ie57bba891c6d0176e7174f6e1964bb2ff5e7dfbc
diff --git a/xos/xos_client/xosapi/orm.py b/xos/xos_client/xosapi/orm.py
index 7845d14..a50b7ee 100644
--- a/xos/xos_client/xosapi/orm.py
+++ b/xos/xos_client/xosapi/orm.py
@@ -35,13 +35,18 @@
u=c.xos_orm.User.objects.get(id=1)
"""
-import functools
import os
import sys
import time
convenience_wrappers = {}
+class ORMGenericContentNotFoundException(Exception):
+ pass
+
+class ORMGenericObjectNotFoundException(Exception):
+ pass
+
class ORMWrapper(object):
""" Wraps a protobuf object to provide ORM features """
@@ -525,8 +530,19 @@
self.reverse_content_type_map[model_name] = ct
def genericForeignKeyResolve(self, content_type_id, id):
+ if content_type_id.endswith("_decl"):
+ content_type_id = content_type_id[:-5]
+
+ if content_type_id not in self.content_type_map:
+ raise ORMGenericContentNotFoundException("Content_type %s not found in self.content_type_map" % content_type_id)
+
model_name = self.content_type_map[content_type_id]
+
model = getattr(self, model_name)
+ objs = model.objects.filter(id=id)
+ if not objs:
+ raise ORMGenericObjectNotFoundException("Object %s of model %s was not found" % (id,model_name))
+
return model.objects.get(id=id)
def add_default_metadata(self, metadata):