From 471dc2babf555274f175c51fcbdabef2cec781f3 Mon Sep 17 00:00:00 2001 From: Jeff Bradberry Date: Thu, 9 Apr 2020 15:20:59 -0400 Subject: [PATCH] Deal with relations that we cannot resolve such as due to a lack of permissions. If there is a foreign key to something where we don't have sufficient read permissions, we now drop the parent object from the export. --- awxkit/awxkit/api/pages/api.py | 14 ++++++++++---- awxkit/awxkit/api/pages/page.py | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/awxkit/awxkit/api/pages/api.py b/awxkit/awxkit/api/pages/api.py index b4a786d7a6..ddd01803bf 100644 --- a/awxkit/awxkit/api/pages/api.py +++ b/awxkit/awxkit/api/pages/api.py @@ -129,11 +129,13 @@ class ApiV2(base.Base): continue try: # FIXME: use caching by url - fields[key] = asset.related[key].get().get_natural_key() + natural_key = asset.related[key].get().get_natural_key() except exc.Forbidden: log.warning("This foreign key cannot be read: %s", asset.related[key]) - if options[key]['required']: - return None # This is a mandatory foreign key + return None + if natural_key is None: + return None # This is an unresolvable foreign key + fields[key] = natural_key related = {} for key, related_endpoint in asset.related.items(): @@ -172,7 +174,11 @@ class ApiV2(base.Base): if related: fields['related'] = related - fields['natural_key'] = asset.get_natural_key() + natural_key = asset.get_natural_key() + if natural_key is None: + return None + fields['natural_key'] = natural_key + return remove_encrypted(fields) def _get_assets(self, resource, value): diff --git a/awxkit/awxkit/api/pages/page.py b/awxkit/awxkit/api/pages/page.py index 4a824ee290..91098abe8d 100644 --- a/awxkit/awxkit/api/pages/page.py +++ b/awxkit/awxkit/api/pages/page.py @@ -331,7 +331,7 @@ class Page(object): # FIXME: use caching by url natural_key[key] = self.related[key].get().get_natural_key() except exc.Forbidden: - log.warning("This foreign key cannot be read: %s", getattr(self, 'endpoint', '')) + log.warning("This foreign key cannot be read: %s", self.related[key]) return None elif key in self: natural_key[key] = self[key]