mirror of
https://github.com/OMGeeky/google-apis-rs.git
synced 2025-12-30 16:18:49 +01:00
We are already there, except for documenting the request value type, which definitely deserves a separate issue. Fixes #45
85 lines
2.4 KiB
Python
85 lines
2.4 KiB
Python
import util
|
|
|
|
import os
|
|
import re
|
|
import collections
|
|
|
|
SPLIT_START = '>>>>>>>'
|
|
SPLIT_END = '<<<<<<<'
|
|
|
|
PARAM_FLAG = 'p'
|
|
STRUCT_FLAG = 'r'
|
|
UPLOAD_FLAG = 'u'
|
|
OUTPUT_FLAG = 'o'
|
|
VALUE_ARG = 'v'
|
|
SCOPE_FLAG = 'scope'
|
|
|
|
FILE_ARG = '<file>'
|
|
MIME_ARG = '<mime>'
|
|
OUT_ARG = '<out>'
|
|
|
|
FIELD_SEP = '.'
|
|
|
|
CONFIG_DIR = '~/.google-service-cli'
|
|
|
|
re_splitters = re.compile(r"%s ([\w\-\.]+)\n(.*?)\n%s" % (SPLIT_START, SPLIT_END), re.MULTILINE|re.DOTALL)
|
|
|
|
MethodContext = collections.namedtuple('MethodContext', ['m', 'response_schema', 'params', 'request_value',
|
|
'media_params' ,'required_props', 'optional_props',
|
|
'part_prop'])
|
|
|
|
def new_method_context(resource, method, c):
|
|
m = c.fqan_map[util.to_fqan(c.rtc_map[resource], resource, method)]
|
|
response_schema = util.method_response(c, m)
|
|
params, request_value = util.build_all_params(c, m)
|
|
media_params = util.method_media_params(m)
|
|
required_props, optional_props, part_prop = util.organize_params(params, request_value)
|
|
|
|
return MethodContext(m, response_schema, params, request_value, media_params,
|
|
required_props, optional_props, part_prop)
|
|
|
|
|
|
def pretty(n):
|
|
return ' '.join(s.capitalize() for s in mangle_subcommand(n).split('-'))
|
|
|
|
|
|
def is_request_value_property(mc, p):
|
|
return mc.request_value and mc.request_value.id == p.get(util.TREF)
|
|
|
|
# transform name to be a suitable subcommand
|
|
def mangle_subcommand(name):
|
|
return util.camel_to_under(name).replace('_', '-').replace('.', '-')
|
|
|
|
|
|
# transform the resource name into a suitable filename to contain the markdown documentation for it
|
|
def subcommand_md_filename(resource, method):
|
|
return mangle_subcommand(resource) + '_' + mangle_subcommand(method) + '.md'
|
|
|
|
def docopt_mode(protocols):
|
|
mode = '|'.join(protocols)
|
|
if len(protocols) > 1:
|
|
mode = '(%s)' % mode
|
|
return mode
|
|
|
|
# split the result along split segments
|
|
def process_template_result(r, output_file):
|
|
found = False
|
|
dir = None
|
|
if output_file:
|
|
dir = os.path.dirname(output_file)
|
|
if not os.path.isdir(dir):
|
|
os.makedirs(dir)
|
|
# end handle output directory
|
|
|
|
for m in re_splitters.finditer(r):
|
|
found = True
|
|
fh = open(os.path.join(dir, m.group(1)), 'wb')
|
|
fh.write(m.group(2))
|
|
fh.close()
|
|
# end for each match
|
|
|
|
if found:
|
|
r = None
|
|
|
|
return r
|