| 
									
										
										
										
											2013-04-22 14:58:53 +00:00
										 |  |  | #!/usr/bin/env python | 
					
						
							|  |  |  | # Asterisk -- An open source telephony toolkit. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Copyright (C) 2013, Digium, Inc. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # David M. Lee, II <dlee@digium.com> | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # See http://www.asterisk.org for more information about | 
					
						
							|  |  |  | # the Asterisk project. Please do not directly contact | 
					
						
							|  |  |  | # any of the maintainers of this project for assistance; | 
					
						
							|  |  |  | # the project provides a web site, mailing lists and IRC | 
					
						
							|  |  |  | # channels for your use. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # This program is free software, distributed under the terms of | 
					
						
							|  |  |  | # the GNU General Public License Version 2. See the LICENSE file | 
					
						
							|  |  |  | # at the top of the source tree. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-23 07:49:59 -04:00
										 |  |  | from __future__ import print_function | 
					
						
							| 
									
										
										
										
											2013-08-29 16:21:31 +00:00
										 |  |  | import sys | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-22 14:58:53 +00:00
										 |  |  | try: | 
					
						
							|  |  |  |     import pystache | 
					
						
							|  |  |  | except ImportError: | 
					
						
							| 
									
										
										
										
											2018-03-23 07:49:59 -04:00
										 |  |  |     print("Pystache required. Please sudo pip install pystache.", file=sys.stderr) | 
					
						
							| 
									
										
										
										
											2013-08-29 16:21:31 +00:00
										 |  |  |     sys.exit(1) | 
					
						
							| 
									
										
										
										
											2013-04-22 14:58:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | import os.path | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from asterisk_processor import AsteriskProcessor | 
					
						
							| 
									
										
										
										
											2023-06-26 06:55:49 -06:00
										 |  |  | from argparse import ArgumentParser as ArgParser | 
					
						
							| 
									
										
										
										
											2018-03-23 07:49:59 -04:00
										 |  |  | from swagger_model import ResourceListing | 
					
						
							| 
									
										
										
										
											2013-04-22 14:58:53 +00:00
										 |  |  | from transform import Transform | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TOPDIR = os.path.dirname(os.path.abspath(__file__)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def rel(file): | 
					
						
							|  |  |  |     """Helper to get a file relative to the script's directory
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @parm file: Relative file path. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     return os.path.join(TOPDIR, file) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main(argv): | 
					
						
							| 
									
										
										
										
											2023-06-26 06:55:49 -06:00
										 |  |  |     description = ( | 
					
						
							|  |  |  |         'Command line utility to export ARI documentation to markdown' | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     parser = ArgParser(description=description) | 
					
						
							|  |  |  |     parser.add_argument('--resources', type=str, default="rest-api/resources.json", | 
					
						
							|  |  |  |                         help="resources.json file to process", required=False) | 
					
						
							|  |  |  |     parser.add_argument('--source-dir', type=str, default=".", | 
					
						
							|  |  |  |                         help="Asterisk source directory", required=False) | 
					
						
							|  |  |  |     parser.add_argument('--dest-dir', type=str, default="doc/rest-api", | 
					
						
							|  |  |  |                         help="Destination directory", required=False) | 
					
						
							|  |  |  |     parser.add_argument('--docs-prefix', type=str, default="../", | 
					
						
							|  |  |  |                         help="Prefix to apply to links", required=False) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     args = parser.parse_args() | 
					
						
							|  |  |  |     if not args: | 
					
						
							|  |  |  |         return | 
					
						
							| 
									
										
										
										
											2013-04-22 14:58:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     renderer = pystache.Renderer(search_dirs=[TOPDIR], missing_tags='strict') | 
					
						
							| 
									
										
										
										
											2023-06-26 06:55:49 -06:00
										 |  |  |     processor = AsteriskProcessor(wiki_prefix=args.docs_prefix) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     API_TRANSFORMS = [ | 
					
						
							|  |  |  |         Transform(rel('api.wiki.mustache'), | 
					
						
							|  |  |  |                   '%s/{{name_title}}_REST_API.md' % args.dest_dir), | 
					
						
							|  |  |  |         Transform(rel('res_ari_resource.c.mustache'), | 
					
						
							|  |  |  |                   'res/res_ari_{{c_name}}.c'), | 
					
						
							|  |  |  |         Transform(rel('ari_resource.h.mustache'), | 
					
						
							|  |  |  |                   'res/ari/resource_{{c_name}}.h'), | 
					
						
							|  |  |  |         Transform(rel('ari_resource.c.mustache'), | 
					
						
							|  |  |  |                   'res/ari/resource_{{c_name}}.c', overwrite=False), | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     RESOURCES_TRANSFORMS = [ | 
					
						
							|  |  |  |         Transform(rel('models.wiki.mustache'), | 
					
						
							|  |  |  |                   '%s/_Asterisk_REST_Data_Models.md' % args.dest_dir), | 
					
						
							|  |  |  |         Transform(rel('ari.make.mustache'), 'res/ari.make'), | 
					
						
							|  |  |  |         Transform(rel('ari_model_validators.h.mustache'), | 
					
						
							|  |  |  |                   'res/ari/ari_model_validators.h'), | 
					
						
							|  |  |  |         Transform(rel('ari_model_validators.c.mustache'), | 
					
						
							|  |  |  |                   'res/ari/ari_model_validators.c'), | 
					
						
							|  |  |  |     ] | 
					
						
							| 
									
										
										
										
											2013-04-22 14:58:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Build the models | 
					
						
							| 
									
										
										
										
											2023-06-26 06:55:49 -06:00
										 |  |  |     base_dir = os.path.dirname(args.resources) | 
					
						
							|  |  |  |     resources = ResourceListing().load_file(args.resources, processor) | 
					
						
							| 
									
										
										
										
											2013-04-22 14:58:53 +00:00
										 |  |  |     for api in resources.apis: | 
					
						
							|  |  |  |         api.load_api_declaration(base_dir, processor) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Render the templates | 
					
						
							|  |  |  |     for api in resources.apis: | 
					
						
							|  |  |  |         for transform in API_TRANSFORMS: | 
					
						
							| 
									
										
										
										
											2023-06-26 06:55:49 -06:00
										 |  |  |             transform.render(renderer, api, args.source_dir) | 
					
						
							| 
									
										
										
										
											2013-04-22 14:58:53 +00:00
										 |  |  |     for transform in RESOURCES_TRANSFORMS: | 
					
						
							| 
									
										
										
										
											2023-06-26 06:55:49 -06:00
										 |  |  |         transform.render(renderer, resources, args.source_dir) | 
					
						
							| 
									
										
										
										
											2013-04-22 14:58:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     sys.exit(main(sys.argv) or 0) |