mirror of
https://github.com/YunoHost/moulinette.git
synced 2024-09-03 20:06:31 +02:00
These doc generators havent been updated in 6 years and most likely ain't used / relevant anymore ...
This commit is contained in:
parent
f7199f7a64
commit
d6f82c91b8
2 changed files with 0 additions and 295 deletions
|
@ -1,181 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
""" License
|
|
||||||
|
|
||||||
Copyright (C) 2013 YunoHost
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published
|
|
||||||
by the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, see http://www.gnu.org/licenses
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
"""
|
|
||||||
Generate JSON specification files API
|
|
||||||
"""
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import yaml
|
|
||||||
import json
|
|
||||||
import requests
|
|
||||||
from yunohost import str_to_func, __version__
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""
|
|
||||||
|
|
||||||
"""
|
|
||||||
with open('action_map.yml') as f:
|
|
||||||
action_map = yaml.load(f)
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open('/etc/yunohost/current_host', 'r') as f:
|
|
||||||
domain = f.readline().rstrip()
|
|
||||||
except IOError:
|
|
||||||
domain = requests.get('http://ip.yunohost.org').text
|
|
||||||
|
|
||||||
with open('action_map.yml') as f:
|
|
||||||
action_map = yaml.load(f)
|
|
||||||
|
|
||||||
resource_list = {
|
|
||||||
'apiVersion': __version__,
|
|
||||||
'swaggerVersion': '1.1',
|
|
||||||
'basePath': 'http://'+ domain + ':6767',
|
|
||||||
'apis': []
|
|
||||||
}
|
|
||||||
|
|
||||||
resources = {}
|
|
||||||
|
|
||||||
del action_map['general_arguments']
|
|
||||||
for category, category_params in action_map.items():
|
|
||||||
if 'category_help' not in category_params: category_params['category_help'] = ''
|
|
||||||
resource_path = '/api/'+ category
|
|
||||||
resource_list['apis'].append({
|
|
||||||
'path': resource_path,
|
|
||||||
'description': category_params['category_help']
|
|
||||||
})
|
|
||||||
resources[category] = {
|
|
||||||
'apiVersion': __version__,
|
|
||||||
'swaggerVersion': '1.1',
|
|
||||||
'basePath': 'http://'+ domain + ':6767',
|
|
||||||
'apis': []
|
|
||||||
}
|
|
||||||
|
|
||||||
resources[category]['resourcePath'] = resource_path
|
|
||||||
|
|
||||||
registered_paths = {}
|
|
||||||
|
|
||||||
for action, action_params in category_params['actions'].items():
|
|
||||||
if 'action_help' not in action_params:
|
|
||||||
action_params['action_help'] = ''
|
|
||||||
if 'api' not in action_params:
|
|
||||||
action_params['api'] = 'GET /'+ category +'/'+ action
|
|
||||||
|
|
||||||
method, path = action_params['api'].split(' ')
|
|
||||||
key_param = ''
|
|
||||||
if '{' in path:
|
|
||||||
key_param = path[path.find("{")+1:path.find("}")]
|
|
||||||
|
|
||||||
notes = ''
|
|
||||||
if str_to_func('yunohost_'+ category +'.'+ category +'_'+ action) is None:
|
|
||||||
notes = 'Not yet implemented'
|
|
||||||
|
|
||||||
operation = {
|
|
||||||
'httpMethod': method,
|
|
||||||
'nickname': category +'_'+ action,
|
|
||||||
'summary': action_params['action_help'],
|
|
||||||
'notes': notes,
|
|
||||||
'errorResponses': []
|
|
||||||
}
|
|
||||||
|
|
||||||
if 'arguments' in action_params:
|
|
||||||
operation['parameters'] = []
|
|
||||||
for arg_name, arg_params in action_params['arguments'].items():
|
|
||||||
if 'help' not in arg_params:
|
|
||||||
arg_params['help'] = ''
|
|
||||||
param_type = 'query'
|
|
||||||
allow_multiple = False
|
|
||||||
required = True
|
|
||||||
allowable_values = None
|
|
||||||
name = arg_name.replace('-', '_')
|
|
||||||
if name[0] == '_':
|
|
||||||
required = False
|
|
||||||
if 'full' in arg_params:
|
|
||||||
name = arg_params['full'][2:]
|
|
||||||
else:
|
|
||||||
name = name[2:]
|
|
||||||
name = name.replace('-', '_')
|
|
||||||
|
|
||||||
if 'nargs' in arg_params:
|
|
||||||
if arg_params['nargs'] == '*':
|
|
||||||
allow_multiple = True
|
|
||||||
required = False
|
|
||||||
if arg_params['nargs'] == '+':
|
|
||||||
allow_multiple = True
|
|
||||||
required = True
|
|
||||||
else:
|
|
||||||
allow_multiple = False
|
|
||||||
if 'choices' in arg_params:
|
|
||||||
allowable_values = {
|
|
||||||
'valueType': 'LIST',
|
|
||||||
'values': arg_params['choices']
|
|
||||||
}
|
|
||||||
if 'action' in arg_params and arg_params['action'] == 'store_true':
|
|
||||||
allowable_values = {
|
|
||||||
'valueType': 'LIST',
|
|
||||||
'values': ['true', 'false']
|
|
||||||
}
|
|
||||||
|
|
||||||
if name == key_param:
|
|
||||||
param_type = 'path'
|
|
||||||
required = True
|
|
||||||
allow_multiple = False
|
|
||||||
|
|
||||||
parameters = {
|
|
||||||
'paramType': param_type,
|
|
||||||
'name': name,
|
|
||||||
'description': arg_params['help'],
|
|
||||||
'dataType': 'string',
|
|
||||||
'required': required,
|
|
||||||
'allowMultiple': allow_multiple
|
|
||||||
}
|
|
||||||
if allowable_values is not None:
|
|
||||||
parameters['allowableValues'] = allowable_values
|
|
||||||
|
|
||||||
operation['parameters'].append(parameters)
|
|
||||||
|
|
||||||
|
|
||||||
if path in registered_paths:
|
|
||||||
resources[category]['apis'][registered_paths[path]]['operations'].append(operation)
|
|
||||||
resources[category]['apis'][registered_paths[path]]['description'] = ''
|
|
||||||
else:
|
|
||||||
registered_paths[path] = len(resources[category]['apis'])
|
|
||||||
resources[category]['apis'].append({
|
|
||||||
'path': path,
|
|
||||||
'description': action_params['action_help'],
|
|
||||||
'operations': [operation]
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
try: os.listdir(os.getcwd() +'/doc')
|
|
||||||
except OSError: os.makedirs(os.getcwd() +'/doc')
|
|
||||||
|
|
||||||
for category, api_dict in resources.items():
|
|
||||||
with open(os.getcwd() +'/doc/'+ category +'.json', 'w') as f:
|
|
||||||
json.dump(api_dict, f)
|
|
||||||
|
|
||||||
with open(os.getcwd() +'/doc/resources.json', 'w') as f:
|
|
||||||
json.dump(resource_list, f)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.exit(main())
|
|
|
@ -1,114 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
""" License
|
|
||||||
|
|
||||||
Copyright (C) 2013 YunoHost
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published
|
|
||||||
by the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, see http://www.gnu.org/licenses
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
"""
|
|
||||||
Generate function header documentation
|
|
||||||
"""
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import yaml
|
|
||||||
import re
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""
|
|
||||||
|
|
||||||
"""
|
|
||||||
with open('action_map.yml') as f:
|
|
||||||
action_map = yaml.load(f)
|
|
||||||
|
|
||||||
resources = {}
|
|
||||||
|
|
||||||
del action_map['general_arguments']
|
|
||||||
for category, category_params in action_map.items():
|
|
||||||
if 'category_help' not in category_params: category_params['category_help'] = ''
|
|
||||||
|
|
||||||
with open('yunohost_'+ category +'.py', 'r') as f:
|
|
||||||
lines = f.readlines()
|
|
||||||
with open('yunohost_'+ category +'.py', 'w') as f:
|
|
||||||
in_block = False
|
|
||||||
for line in lines:
|
|
||||||
if in_block:
|
|
||||||
if re.search(r'^"""', line):
|
|
||||||
in_block = False
|
|
||||||
f.write('\n')
|
|
||||||
f.write(' '+ category_params['category_help'] +'\n')
|
|
||||||
f.write('"""\n')
|
|
||||||
else:
|
|
||||||
f.write(line)
|
|
||||||
|
|
||||||
if re.search(r'^""" yunohost_'+ category, line):
|
|
||||||
in_block = True
|
|
||||||
|
|
||||||
for action, action_params in category_params['actions'].items():
|
|
||||||
if 'action_help' not in action_params:
|
|
||||||
action_params['action_help'] = ''
|
|
||||||
|
|
||||||
help_lines = [
|
|
||||||
' """',
|
|
||||||
' '+ action_params['action_help'],
|
|
||||||
''
|
|
||||||
]
|
|
||||||
|
|
||||||
if 'arguments' in action_params:
|
|
||||||
help_lines.append(' Keyword argument:')
|
|
||||||
for arg_name, arg_params in action_params['arguments'].items():
|
|
||||||
if 'help' in arg_params:
|
|
||||||
help = ' -- '+ arg_params['help']
|
|
||||||
else:
|
|
||||||
help = ''
|
|
||||||
name = arg_name.replace('-', '_')
|
|
||||||
if name[0] == '_':
|
|
||||||
required = False
|
|
||||||
if 'full' in arg_params:
|
|
||||||
name = arg_params['full'][2:]
|
|
||||||
else:
|
|
||||||
name = name[2:]
|
|
||||||
name = name.replace('-', '_')
|
|
||||||
|
|
||||||
help_lines.append(' '+ name + help)
|
|
||||||
|
|
||||||
help_lines.append('')
|
|
||||||
help_lines.append(' """')
|
|
||||||
|
|
||||||
with open('yunohost_'+ category +'.py', 'r') as f:
|
|
||||||
lines = f.readlines()
|
|
||||||
with open('yunohost_'+ category +'.py', 'w') as f:
|
|
||||||
in_block = False
|
|
||||||
first_quotes = True
|
|
||||||
for line in lines:
|
|
||||||
if in_block:
|
|
||||||
if re.search(r'^ """', line):
|
|
||||||
if first_quotes:
|
|
||||||
first_quotes = False
|
|
||||||
else:
|
|
||||||
in_block = False
|
|
||||||
for help_line in help_lines:
|
|
||||||
f.write(help_line +'\n')
|
|
||||||
else:
|
|
||||||
f.write(line)
|
|
||||||
|
|
||||||
if re.search(r'^def '+ category +'_'+ action +'\(', line):
|
|
||||||
in_block = True
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.exit(main())
|
|
Loading…
Reference in a new issue