mirror of
https://github.com/ansible/awx.git
synced 2026-09-16 00:40:11 -02:30
Merge pull request #6590 from jangsutsr/programmatically_generate_named_url
Add the ability to programmatically generate named URLs on client-side
This commit is contained in:
+14
-4
@@ -119,10 +119,20 @@ class URLModificationMiddleware(object):
|
||||
field_class=fields.DictField,
|
||||
read_only=True,
|
||||
label=_('Formats of all available named urls'),
|
||||
help_text=_('Read-only list of key-value pairs that shows the format of all available named'
|
||||
' URLs. Use this list as a guide when composing named URLs for resources'),
|
||||
category=_('System'),
|
||||
category_slug='system',
|
||||
help_text=_('Read-only list of key-value pairs that shows the standard format of all '
|
||||
'available named URLs.'),
|
||||
category=_('Named URL'),
|
||||
category_slug='named-url',
|
||||
)
|
||||
register(
|
||||
'NAMED_URL_GRAPH_NODES',
|
||||
field_class=fields.DictField,
|
||||
read_only=True,
|
||||
label=_('List of all named url graph nodes.'),
|
||||
help_text=_('Read-only list of key-value pairs that exposes named URL graph topology.'
|
||||
' Use this list to programmatically generate named URLs for resources'),
|
||||
category=_('Named URL'),
|
||||
category_slug='named-url',
|
||||
)
|
||||
|
||||
def _named_url_to_pk(self, node, named_url):
|
||||
|
||||
@@ -50,11 +50,18 @@ class GraphNode(object):
|
||||
stack.pop()
|
||||
else:
|
||||
to_append = stack[-1].adj_list[stack[-1].counter][NEXT_NODE]
|
||||
current_fk_name = stack[-1].adj_list[stack[-1].counter][FK_NAME] + '.'
|
||||
current_fk_name = "%s." % (stack[-1].adj_list[stack[-1].counter][FK_NAME],)
|
||||
stack[-1].counter += 1
|
||||
stack.append(to_append)
|
||||
return NAMED_URL_RES_DILIMITER.join(named_url_components)
|
||||
|
||||
@property
|
||||
def named_url_repr(self):
|
||||
ret = {}
|
||||
ret['fields'] = self.fields
|
||||
ret['adj_list'] = [[x[FK_NAME], x[NEXT_NODE].model_url_name] for x in self.adj_list]
|
||||
return ret
|
||||
|
||||
def _encode_uri(self, text):
|
||||
'''
|
||||
Performance assured: http://stackoverflow.com/a/27086669
|
||||
@@ -144,11 +151,13 @@ class GraphNode(object):
|
||||
def add_bindings(self):
|
||||
if self.model_url_name not in settings.NAMED_URL_FORMATS:
|
||||
settings.NAMED_URL_FORMATS[self.model_url_name] = self.named_url_format
|
||||
settings.NAMED_URL_GRAPH_NODES[self.model_url_name] = self.named_url_repr
|
||||
settings.NAMED_URL_MAPPINGS[self.model_url_name] = self.model
|
||||
|
||||
def remove_bindings(self):
|
||||
if self.model_url_name in settings.NAMED_URL_FORMATS:
|
||||
settings.NAMED_URL_FORMATS.pop(self.model_url_name)
|
||||
settings.NAMED_URL_GRAPH_NODES.pop(self.model_url_name)
|
||||
settings.NAMED_URL_MAPPINGS.pop(self.model_url_name)
|
||||
|
||||
|
||||
@@ -270,6 +279,7 @@ def _generate_single_graph(configuration, dead_ends):
|
||||
|
||||
def generate_graph(models):
|
||||
settings.NAMED_URL_FORMATS = {}
|
||||
settings.NAMED_URL_GRAPH_NODES = {}
|
||||
settings.NAMED_URL_MAPPINGS = {}
|
||||
candidate_nodes = {}
|
||||
dead_ends = set()
|
||||
|
||||
Reference in New Issue
Block a user