diff options
author | David M. Lee <dlee@digium.com> | 2013-07-03 16:32:00 +0000 |
---|---|---|
committer | David M. Lee <dlee@digium.com> | 2013-07-03 16:32:00 +0000 |
commit | dcf03554a0b38806bf1fe258acc423b070533d6e (patch) | |
tree | 150af1502fcf5576c1bae7cc43f0595f46456883 /rest-api-templates/swagger_model.py | |
parent | 85ba0633298e42e723ce136e867780c115c7fb6e (diff) |
Shuffle RESTful URL's around.
This patch moves the RESTful URL's around to more appropriate
locations for release.
The /stasis URL's are moved to /ari, since Asterisk REST Interface was
a more appropriate name than Stasis-HTTP. (Most of the code still has
stasis_http references, but they will be cleaned up after there are no
more outstanding branches that would have merge conflicts with such a
change).
A larger change was moving the ARI events WebSocket off of the shared
/ws URL to its permanent home on /ari/events. The Swagger code
generator was extended to handle "upgrade: websocket" and
"websocketProtocol:" attributes on an operation.
The WebSocket module was modified to better handle WebSocket servers
that have a single registered protocol handler. If a client
connections does not specify the Sec-WebSocket-Protocol header, and
the server has a single protocol handler registered, the WebSocket
server will go ahead and accept the client for that subprotocol.
(closes issue ASTERISK-21857)
Review: https://reviewboard.asterisk.org/r/2621/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393528 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'rest-api-templates/swagger_model.py')
-rw-r--r-- | rest-api-templates/swagger_model.py | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/rest-api-templates/swagger_model.py b/rest-api-templates/swagger_model.py index c58a5f09b..47461b406 100644 --- a/rest-api-templates/swagger_model.py +++ b/rest-api-templates/swagger_model.py @@ -218,6 +218,16 @@ class Operation(Stringify): self.http_method = op_json.get('httpMethod') self.nickname = op_json.get('nickname') self.response_class = op_json.get('responseClass') + # Specifying WebSocket URL's is our own extension + self.is_websocket = op_json.get('upgrade') == 'websocket' + self.is_req = not self.is_websocket + + if self.is_websocket: + self.websocket_protocol = op_json.get('websocketProtocol') + if self.http_method != 'GET': + raise ValueError( + "upgrade: websocket is only valid on GET operations") + params_json = op_json.get('parameters') or [] self.parameters = [ Parameter().load(j, processor, context) for j in params_json] @@ -262,6 +272,8 @@ class Api(Stringify): op_json = api_json.get('operations') self.operations = [ Operation().load(j, processor, context) for j in op_json] + self.has_websocket = \ + filter(lambda op: op.is_websocket, self.operations) != [] return self @@ -353,7 +365,8 @@ class ApiDeclaration(Stringify): .replace(".json", ".{format}") if self.resource_path != expected_resource_path: - print "%s != %s" % (self.resource_path, expected_resource_path) + print >> sys.stderr, \ + "%s != %s" % (self.resource_path, expected_resource_path) raise SwaggerError("resourcePath has incorrect value", context) return self |