[asterisk-commits] dlee: branch dlee/ari-event-remodel2 r392389 - in /team/dlee/ari-event-remode...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Jun 20 17:42:20 CDT 2013
Author: dlee
Date: Thu Jun 20 17:42:19 2013
New Revision: 392389
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=392389
Log:
Docs working
Added:
team/dlee/ari-event-remodel2/rest-api-templates/type_link.mustache (with props)
Modified:
team/dlee/ari-event-remodel2/Makefile
team/dlee/ari-event-remodel2/rest-api-templates/api.wiki.mustache
team/dlee/ari-event-remodel2/rest-api-templates/ari_model.c.mustache
team/dlee/ari-event-remodel2/rest-api-templates/ari_model.h.mustache
team/dlee/ari-event-remodel2/rest-api-templates/asterisk_processor.py
team/dlee/ari-event-remodel2/rest-api-templates/make_ari_stubs.py
team/dlee/ari-event-remodel2/rest-api-templates/models.wiki.mustache
team/dlee/ari-event-remodel2/rest-api-templates/res_stasis_http_resource.c.mustache
team/dlee/ari-event-remodel2/rest-api-templates/swagger_model.py
Modified: team/dlee/ari-event-remodel2/Makefile
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/Makefile?view=diff&rev=392389&r1=392388&r2=392389
==============================================================================
--- team/dlee/ari-event-remodel2/Makefile (original)
+++ team/dlee/ari-event-remodel2/Makefile Thu Jun 20 17:42:19 2013
@@ -416,6 +416,7 @@
rm -f main/version.c
rm -f doc/core-en_US.xml
rm -f doc/full-en_US.xml
+ rm -f docs/rest-api/*.wiki
@$(MAKE) -C menuselect clean
cp -f .cleancount .lastclean
Modified: team/dlee/ari-event-remodel2/rest-api-templates/api.wiki.mustache
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/rest-api-templates/api.wiki.mustache?view=diff&rev=392389&r1=392388&r2=392389
==============================================================================
--- team/dlee/ari-event-remodel2/rest-api-templates/api.wiki.mustache (original)
+++ team/dlee/ari-event-remodel2/rest-api-templates/api.wiki.mustache Thu Jun 20 17:42:19 2013
@@ -5,7 +5,7 @@
|| Method || Path || Return Model || Summary ||
{{#apis}}
{{#operations}}
-| {{http_method}} | [{{path}}|#{{nickname}}] | {{response_class}} | {{summary}} |
+| {{http_method}} | [{{path}}|#{{nickname}}] | {{#response_class}}{{> type_link}}{{/response_class}} | {{summary}} |
{{/operations}}
{{/apis}}
{{#apis}}
Modified: team/dlee/ari-event-remodel2/rest-api-templates/ari_model.c.mustache
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/rest-api-templates/ari_model.c.mustache?view=diff&rev=392389&r1=392388&r2=392389
==============================================================================
--- team/dlee/ari-event-remodel2/rest-api-templates/ari_model.c.mustache (original)
+++ team/dlee/ari-event-remodel2/rest-api-templates/ari_model.c.mustache Thu Jun 20 17:42:19 2013
@@ -76,15 +76,17 @@
{{#required}}
has_{{name}} = 1;
{{/required}}
+{{#type}}
{{#is_list}}
prop_res = ari_validate_list(
ast_json_object_iter_value(iter),
- ari_validate_{{c_type_param}});
+ ari_validate_{{c_singular_name}});
{{/is_list}}
{{^is_list}}
- prop_res = ari_validate_{{snake_type}}(
+ prop_res = ari_validate_{{c_name}}(
ast_json_object_iter_value(iter));
{{/is_list}}
+{{/type}}
if (!prop_res) {
ast_log(LOG_ERROR, "ARI {{id}} field {{name}} failed validation\n");
res = 0;
Modified: team/dlee/ari-event-remodel2/rest-api-templates/ari_model.h.mustache
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/rest-api-templates/ari_model.h.mustache?view=diff&rev=392389&r1=392388&r2=392389
==============================================================================
--- team/dlee/ari-event-remodel2/rest-api-templates/ari_model.h.mustache (original)
+++ team/dlee/ari-event-remodel2/rest-api-templates/ari_model.h.mustache Thu Jun 20 17:42:19 2013
@@ -150,7 +150,7 @@
{{#models}}
* {{id}}
{{#properties}}
- * - {{name}}: {{type}}{{#required}} (required){{/required}}
+ * - {{name}}: {{type.name}}{{#required}} (required){{/required}}
{{/properties}}
{{/models}}
{{/api_declaration}}
Modified: team/dlee/ari-event-remodel2/rest-api-templates/asterisk_processor.py
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/rest-api-templates/asterisk_processor.py?view=diff&rev=392389&r1=392388&r2=392389
==============================================================================
--- team/dlee/ari-event-remodel2/rest-api-templates/asterisk_processor.py (original)
+++ team/dlee/ari-event-remodel2/rest-api-templates/asterisk_processor.py Thu Jun 20 17:42:19 2013
@@ -131,12 +131,17 @@
'double': 'atof',
}
+ def __init__(self, wiki_prefix):
+ self.wiki_prefix = wiki_prefix
+
def process_api(self, resource_api, context):
+ resource_api.wiki_prefix = self.wiki_prefix
# Derive a resource name from the API declaration's filename
resource_api.name = re.sub('\..*', '',
os.path.basename(resource_api.path))
- # Now in all caps, from include guard
+ # Now in all caps, for include guard
resource_api.name_caps = resource_api.name.upper()
+ resource_api.name_title = resource_api.name.capitalize()
# Construct the PathSegement tree for the API.
if resource_api.api_declaration:
resource_api.root_path = PathSegment('', None)
@@ -164,10 +169,6 @@
operation.c_http_method = 'AST_HTTP_' + operation.http_method
if not operation.summary.endswith("."):
raise SwaggerError("Summary should end with .", context)
- operation.snake_response_class = snakify(operation.response_class)
- if hasattr(operation, 'response_class_param'):
- operation.snake_response_class_param = \
- snakify(operation.response_class_param)
def process_parameter(self, parameter, context):
if not parameter.data_type in self.type_mapping:
@@ -194,6 +195,7 @@
raise SwaggerError("Property names cannot have dashes", context)
if prop.name != prop.name.lower():
raise SwaggerError("Property name should not be lowercase", context)
- prop.snake_type = snakify(prop.type)
- if hasattr(prop, 'type_param'):
- prop.c_type_param = snakify(prop.type_param)
+
+ def process_type(self, swagger_type, context):
+ swagger_type.c_name = snakify(swagger_type.name)
+ swagger_type.c_singular_name = snakify(swagger_type.singular_name)
Modified: team/dlee/ari-event-remodel2/rest-api-templates/make_ari_stubs.py
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/rest-api-templates/make_ari_stubs.py?view=diff&rev=392389&r1=392388&r2=392389
==============================================================================
--- team/dlee/ari-event-remodel2/rest-api-templates/make_ari_stubs.py (original)
+++ team/dlee/ari-event-remodel2/rest-api-templates/make_ari_stubs.py Thu Jun 20 17:42:19 2013
@@ -40,9 +40,11 @@
"""
return os.path.join(TOPDIR, file)
+WIKI_PREFIX='Asterisk 12'
+
API_TRANSFORMS = [
Transform(rel('api.wiki.mustache'),
- 'doc/rest-api/{{name}}.wiki'),
+ 'doc/rest-api/%s {{name_title}} REST API.wiki' % WIKI_PREFIX),
Transform(rel('res_stasis_http_resource.c.mustache'),
'res/res_stasis_http_{{name}}.c'),
Transform(rel('stasis_http_resource.h.mustache'),
@@ -52,7 +54,8 @@
]
RESOURCES_TRANSFORMS = [
- Transform(rel('models.wiki.mustache'), 'doc/rest-api/models.wiki'),
+ Transform(rel('models.wiki.mustache'),
+ 'doc/rest-api/%s REST Data Models.wiki' % WIKI_PREFIX),
Transform(rel('stasis_http.make.mustache'), 'res/stasis_http.make'),
Transform(rel('ari_model.h.mustache'), 'res/stasis_http/ari_model.h'),
Transform(rel('ari_model.c.mustache'), 'res/stasis_http/ari_model.c'),
@@ -70,7 +73,7 @@
source = args[1]
dest_dir = args[2]
renderer = pystache.Renderer(search_dirs=[TOPDIR], missing_tags='strict')
- processor = AsteriskProcessor()
+ processor = AsteriskProcessor(wiki_prefix=WIKI_PREFIX)
# Build the models
base_dir = os.path.dirname(source)
Modified: team/dlee/ari-event-remodel2/rest-api-templates/models.wiki.mustache
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/rest-api-templates/models.wiki.mustache?view=diff&rev=392389&r1=392388&r2=392389
==============================================================================
--- team/dlee/ari-event-remodel2/rest-api-templates/models.wiki.mustache (original)
+++ team/dlee/ari-event-remodel2/rest-api-templates/models.wiki.mustache Thu Jun 20 17:42:19 2013
@@ -14,7 +14,7 @@
{{{model_json}}}
{code}
{{#properties}}
-* {{name}}: {{#is_primitive_type}}{{type}}{{/is_primitive_type}}{{^is_primitive_type}}[{{type}}|#{{type}}]{{/is_primitive_type}}{{^required}} _(optional)_{{/required}}{{#description}} - {{{description}}}{{/description}}
+* {{name}}: {{#type}}{{> type_link}}{{/type}}{{^required}} _(optional)_{{/required}}{{#description}} - {{{description}}}{{/description}}
{{/properties}}
{{/models}}
Modified: team/dlee/ari-event-remodel2/rest-api-templates/res_stasis_http_resource.c.mustache
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/rest-api-templates/res_stasis_http_resource.c.mustache?view=diff&rev=392389&r1=392388&r2=392389
==============================================================================
--- team/dlee/ari-event-remodel2/rest-api-templates/res_stasis_http_resource.c.mustache (original)
+++ team/dlee/ari-event-remodel2/rest-api-templates/res_stasis_http_resource.c.mustache Thu Jun 20 17:42:19 2013
@@ -86,14 +86,16 @@
break;
default:
if (200 <= code && code <= 299) {
-{{#is_response_list}}
+{{#response_class}}
+{{#is_list}}
is_valid = ari_validate_list(response->message,
- ari_validate_{{snake_response_class_param}});
-{{/is_response_list}}
-{{^is_response_list}}
- is_valid = ari_validate_{{snake_response_class}}(
+ ari_validate_{{c_singular_name}});
+{{/is_list}}
+{{^is_list}}
+ is_valid = ari_validate_{{c_name}}(
response->message);
-{{/is_response_list}}
+{{/is_list}}
+{{/response_class}}
} else {
ast_log(LOG_ERROR, "Invalid error response %d for {{path}}\n", code);
is_valid = 0;
@@ -122,7 +124,7 @@
{{/has_path_parameters}}
{{> param_parsing}}
session = ari_websocket_session_create(ws_session,
- ari_validate_{{snake_response_class}});
+ ari_validate_{{response_class.c_name}});
if (!session) {
ast_log(LOG_ERROR, "Failed to create ARI session\n");
return;
Modified: team/dlee/ari-event-remodel2/rest-api-templates/swagger_model.py
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/rest-api-templates/swagger_model.py?view=diff&rev=392389&r1=392388&r2=392389
==============================================================================
--- team/dlee/ari-event-remodel2/rest-api-templates/swagger_model.py (original)
+++ team/dlee/ari-event-remodel2/rest-api-templates/swagger_model.py Thu Jun 20 17:42:19 2013
@@ -41,6 +41,7 @@
SWAGGER_VERSIONS=["1.1", "1.2"]
SWAGGER_PRIMITIVES=[
+ 'void',
'string',
'boolean',
'number',
@@ -163,6 +164,22 @@
"""Post process a Property object.
@param property: Property object.
+ @param context: Current context in the API.
+ """
+ pass
+
+ def process_type(self, swagger_type, context):
+ """Post process a SwaggerType object.
+
+ @param swagger_type: ResourceListing object.
+ @param context: Current context in the API.
+ """
+ pass
+
+ def process_resource_listing(self, resource_listing, context):
+ """Post process the overall ResourceListing object.
+
+ @param resource_listing: ResourceListing object.
@param context: Current context in the API.
"""
pass
@@ -270,6 +287,38 @@
self.reason = err_json.get('reason')
return self
+class SwaggerType(Stringify):
+ """Model of a data type.
+ """
+
+ def __init__(self):
+ self.name = None
+ self.is_discriminator = None
+ self.is_list = None
+ self.singular_name = None
+ self.is_primitive = None
+
+ def load(self, type_name, processor, context):
+ # Some common errors
+ if type_name == 'integer':
+ raise SwaggerError("The type for integer should be 'int'", context)
+
+ self.name = type_name
+ self.is_discriminator = self.name == 'DISCRIMINATOR'
+ if self.is_discriminator:
+ self.name = 'string'
+ if context.is_version("1.1"):
+ raise SwaggerError(
+ "DISCRIMINATOR support added in Swagger 1.2", context)
+ type_param = get_list_parameter_type(self.name)
+ self.is_list = type_param is not None
+ if self.is_list:
+ self.singular_name = type_param
+ else:
+ self.singular_name = self.name
+ self.is_primitive = self.singular_name in SWAGGER_PRIMITIVES
+ processor.process_type(self, context)
+ return self
class Operation(Stringify):
"""Model of an operation on an API
@@ -293,11 +342,9 @@
validate_required_fields(op_json, self.required_fields, context)
self.http_method = op_json.get('httpMethod')
self.nickname = op_json.get('nickname')
- self.response_class = op_json.get('responseClass')
- response_class_param = get_list_parameter_type(self.response_class)
- self.is_response_list = response_class_param is not None
- if self.is_response_list:
- self.response_class_param = response_class_param
+ response_class = op_json.get('responseClass')
+ self.response_class = response_class and SwaggerType().load(
+ response_class, processor, context)
# Specifying WebSocket URL's is our own extension
self.is_websocket = op_json.get('upgrade') == 'websocket'
@@ -387,29 +434,15 @@
validate_required_fields(property_json, self.required_fields, context)
# Bit of a hack, but properties do not self-identify
context = context.next_stack({'name': self.name}, 'name')
- self.type = property_json.get('type')
self.description = property_json.get('description') or ''
self.required = property_json.get('required') or False
- type_param = get_list_parameter_type(self.type)
- self.is_list = type_param is not None
- if self.is_list:
- self.type_param = type_param
- self.is_primitive_type = type_param in SWAGGER_PRIMITIVES
- else:
- self.is_primitive_type = self.type in SWAGGER_PRIMITIVES
-
- self.is_discriminator = self.type == 'DISCRIMINATOR'
- if self.is_discriminator:
+
+ type = property_json.get('type')
+ self.type = type and SwaggerType().load(type, processor, context)
+ if self.type.is_discriminator:
# Discriminators are always required
- self.type = "string"
self.required = True
- if context.is_version("1.1"):
- raise SwaggerError(
- "DISCRIMINATOR support added in Swagger 1.2", context)
-
- # Some common errors
- if self.type == 'integer':
- raise SwaggerError("The type for integer should be 'int'", context)
+
processor.process_property(self, context)
return self
@@ -449,7 +482,7 @@
Property(k).load(j, processor, context) for (k, j) in props]
self.__properties = sorted(self.__properties, key=lambda p: p.name)
- discriminators = [p for p in self.__properties if p.is_discriminator]
+ discriminators = [p for p in self.__properties if p.type.is_discriminator]
if len(discriminators) > 1:
raise SwaggerError("Model may have at most one discriminator",
context)
@@ -651,6 +684,7 @@
apis_json = resources_json['apis']
self.apis = [
ResourceApi().load(j, processor, context) for j in apis_json]
+ processor.process_resource_listing(self, context)
return self
Added: team/dlee/ari-event-remodel2/rest-api-templates/type_link.mustache
URL: http://svnview.digium.com/svn/asterisk/team/dlee/ari-event-remodel2/rest-api-templates/type_link.mustache?view=auto&rev=392389
==============================================================================
--- team/dlee/ari-event-remodel2/rest-api-templates/type_link.mustache (added)
+++ team/dlee/ari-event-remodel2/rest-api-templates/type_link.mustache Thu Jun 20 17:42:19 2013
@@ -1,0 +1,21 @@
+{{!
+ * Asterisk -- An open source telephony toolkit.
+ *
+ * Copyright (C) 2013, Digium, Inc.
+ *
+ * David M. Lee, II <dlee at 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.
+}}
+{{!
+ * Snippet to emit a linked type for the wiki
+}}
+{{#is_primitive}}{{name}}{{/is_primitive}}{{^is_primitive}}[{{name}}|{{wiki_prefix}} REST Data Models#{{singular_name}}]{{/is_primitive}}
Propchange: team/dlee/ari-event-remodel2/rest-api-templates/type_link.mustache
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: team/dlee/ari-event-remodel2/rest-api-templates/type_link.mustache
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: team/dlee/ari-event-remodel2/rest-api-templates/type_link.mustache
------------------------------------------------------------------------------
svn:mime-type = text/plain
More information about the asterisk-commits
mailing list