metadata change was lost in conflict resolution.

This commit is contained in:
Toshio Kuratomi 2017-08-15 20:45:55 -07:00
parent d2065cfc0d
commit bf4858d042

View file

@ -8,6 +8,7 @@ __metaclass__ = type
import ast import ast
import yaml import yaml
from ansible.parsing.metadata import extract_metadata
from ansible.parsing.yaml.loader import AnsibleLoader from ansible.parsing.yaml.loader import AnsibleLoader
try: try:
@ -23,6 +24,18 @@ def read_docstring(filename, verbose=True, ignore_errors=True):
Parse DOCUMENTATION from YAML and return the YAML doc or None together with EXAMPLES, as plain text. Parse DOCUMENTATION from YAML and return the YAML doc or None together with EXAMPLES, as plain text.
""" """
# FIXME: Should refactor this so that we have a docstring parsing
# function and a separate variable parsing function
# Can have a function one higher that invokes whichever is needed
#
# Should look roughly like this:
# get_plugin_doc(filename, verbose=False)
# documentation = extract_docstring(plugin_ast, identifier, verbose=False)
# if not documentation and not (filter or test):
# documentation = extract_variables(plugin_ast)
# documentation['metadata'] = extract_metadata(plugin_ast)
# return documentation
data = { data = {
'doc': None, 'doc': None,
'plainexamples': None, 'plainexamples': None,
@ -34,11 +47,11 @@ def read_docstring(filename, verbose=True, ignore_errors=True):
'DOCUMENTATION': 'doc', 'DOCUMENTATION': 'doc',
'EXAMPLES': 'plainexamples', 'EXAMPLES': 'plainexamples',
'RETURN': 'returndocs', 'RETURN': 'returndocs',
'ANSIBLE_METADATA': 'metadata'
} }
try: try:
M = ast.parse(''.join(open(filename))) b_module_data = open(filename, 'rb').read()
M = ast.parse(b_module_data)
try: try:
display.debug('Attempt first docstring is yaml docs') display.debug('Attempt first docstring is yaml docs')
docstring = yaml.load(M.body[0].value.s) docstring = yaml.load(M.body[0].value.s)
@ -66,7 +79,7 @@ def read_docstring(filename, verbose=True, ignore_errors=True):
if isinstance(child.value, ast.Dict): if isinstance(child.value, ast.Dict):
data[varkey] = ast.literal_eval(child.value) data[varkey] = ast.literal_eval(child.value)
else: else:
if theid in ['DOCUMENTATION', 'ANSIBLE_METADATA']: if theid == 'DOCUMENTATION':
# string should be yaml # string should be yaml
data[varkey] = AnsibleLoader(child.value.s, file_name=filename).get_single_data() data[varkey] = AnsibleLoader(child.value.s, file_name=filename).get_single_data()
else: else:
@ -74,6 +87,14 @@ def read_docstring(filename, verbose=True, ignore_errors=True):
data[varkey] = child.value.s data[varkey] = child.value.s
display.debug('assigned :%s' % varkey) display.debug('assigned :%s' % varkey)
# Metadata is per-file and a dict rather than per-plugin/function and yaml
data['metadata'] = extract_metadata(module_ast=M)[0]
# remove version
if data['metadata']:
for x in ('version', 'metadata_version'):
if x in data['metadata']:
del data['metadata'][x]
except: except:
if verbose: if verbose:
display.error("unable to parse %s" % filename) display.error("unable to parse %s" % filename)