From e9532dea8e5b4a3b81d07cbcb570cb3a05907773 Mon Sep 17 00:00:00 2001 From: Jake McDermott Date: Wed, 27 Feb 2019 15:12:07 -0500 Subject: [PATCH] cache dynamic input fields Query dynamic input fields once on attribute access and then cache it for future use. --- awx/main/models/credential/__init__.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/awx/main/models/credential/__init__.py b/awx/main/models/credential/__init__.py index a572b89120..db8b4a48d6 100644 --- a/awx/main/models/credential/__init__.py +++ b/awx/main/models/credential/__init__.py @@ -284,10 +284,6 @@ class Credential(PasswordFieldsModel, CommonModelNameNotUnique, ResourceMixin): 'admin_role', ]) - def __init__(self, *args, **kwargs): - super(Credential, self).__init__(*args, **kwargs) - self.dynamic_input_fields = self._get_dynamic_input_field_names() - def __getattr__(self, item): if item != 'inputs': if item in V1Credential.FIELDS: @@ -377,6 +373,14 @@ class Credential(PasswordFieldsModel, CommonModelNameNotUnique, ResourceMixin): needed.append('vault_password') return needed + @property + def dynamic_input_fields(self): + dynamic_input_fields = getattr(self, '_dynamic_input_fields', None) + if dynamic_input_fields is None: + self._dynamic_input_fields = self._get_dynamic_input_field_names() + return self._dynamic_input_fields + return dynamic_input_fields + def _password_field_allows_ask(self, field): return field in self.credential_type.askable_fields