Switch over to using discovery format v0.2beta1.
diff --git a/TODO b/TODO
index c88756b..f95e6b2 100644
--- a/TODO
+++ b/TODO
@@ -1,30 +1,13 @@
TODO
====
- - Unit tests against copies of current discovery docs
-
- - Flag required parameters
-
- - Check the regex when accepting values
+ - LICENSE file
- OAuth cmdline sample should start local http server to catch response.
- Caching of discovery doc
-
- - Layered user-agent header, ala 'my-buzz-client/1.0 google-api-python-client/0.2 httplib2/0.6'
-
-
- - Requests for multiple APIs at one time.
+ - Examples of caching
- 2.x and 3.x compatible
-
-
-DONE
-====
-
- - Implement requests as Command objects, either for immediate
- execution, or for batching.
-
- - Add in 'Extra Discovery' for pagination
\ No newline at end of file
diff --git a/apiclient/contrib/buzz/future.json b/apiclient/contrib/buzz/future.json
index 81b61bf..05018e8 100644
--- a/apiclient/contrib/buzz/future.json
+++ b/apiclient/contrib/buzz/future.json
@@ -1,7 +1,4 @@
{
- "data": {
- "buzz": {
- "v1": {
"baseUrl": "https://www.googleapis.com/",
"auth": {
"request": {
@@ -142,7 +139,4 @@
}
}
}
- }
- }
- }
}
diff --git a/apiclient/contrib/latitude/future.json b/apiclient/contrib/latitude/future.json
index 4ba2a8f..7b2bfa0 100644
--- a/apiclient/contrib/latitude/future.json
+++ b/apiclient/contrib/latitude/future.json
@@ -1,7 +1,4 @@
{
- "data": {
- "latitude": {
- "v1": {
"baseUrl": "https://www.googleapis.com/",
"auth": {
"request": {
@@ -81,7 +78,4 @@
}
}
}
- }
- }
- }
}
diff --git a/apiclient/contrib/moderator/future.json b/apiclient/contrib/moderator/future.json
index 87d525b..106bc06 100644
--- a/apiclient/contrib/moderator/future.json
+++ b/apiclient/contrib/moderator/future.json
@@ -1,7 +1,4 @@
{
- "data": {
- "moderator": {
- "v1": {
"baseUrl": "https://www.googleapis.com/",
"auth": {
"request": {
@@ -107,7 +104,4 @@
}
}
}
- }
- }
- }
}
diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index 73a87da..3084810 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -54,8 +54,8 @@
pass
-DISCOVERY_URI = ('http://www.googleapis.com/discovery/0.1/describe'
- '{?api,apiVersion}')
+DISCOVERY_URI = ('https://www.googleapis.com/discovery/v0.2beta1/describe/'
+ '{api}/{apiVersion}')
def key2param(key):
@@ -132,18 +132,21 @@
requested_url = uritemplate.expand(discoveryServiceUrl, params)
logging.info('URL being requested: %s' % requested_url)
resp, content = http.request(requested_url)
- d = simplejson.loads(content)
- service = d['data'][serviceName][version]
+ service = simplejson.loads(content)
fn = os.path.join(os.path.dirname(__file__), "contrib",
serviceName, "future.json")
- f = file(fn, "r")
- d = simplejson.load(f)
- f.close()
- future = d['data'][serviceName][version]['resources']
- auth_discovery = d['data'][serviceName][version]['auth']
+ try:
+ f = file(fn, "r")
+ d = simplejson.load(f)
+ f.close()
+ future = d['resources']
+ auth_discovery = d['auth']
+ except IOError:
+ future = {}
+ auth_discovery = {}
- base = service['baseUrl']
+ base = urlparse.urljoin(discoveryServiceUrl, service['restBasePath'])
resources = service['resources']
class Service(object):
@@ -168,7 +171,7 @@
setattr(theclass, methodName, method)
for methodName, methodDesc in resources.iteritems():
- createMethod(Service, methodName, methodDesc, future[methodName])
+ createMethod(Service, methodName, methodDesc, future.get(methodName, {}))
return Service()
@@ -185,7 +188,7 @@
self._developerKey = developerKey
def createMethod(theclass, methodName, methodDesc, futureDesc):
- pathUrl = methodDesc['pathUrl']
+ pathUrl = methodDesc['restPath']
pathUrl = re.sub(r'\{', r'{+', pathUrl)
httpMethod = methodDesc['httpMethod']
@@ -207,9 +210,9 @@
pattern_params[param] = desc['pattern']
if desc.get('required', False):
required_params.append(param)
- if desc.get('parameterType') == 'query':
+ if desc.get('restParameterType') == 'query':
query_params.append(param)
- if desc.get('parameterType') == 'path':
+ if desc.get('restParameterType') == 'path':
path_params[param] = param
def method(self, **kwargs):
@@ -308,13 +311,36 @@
setattr(theclass, methodName, method)
# Add basic methods to Resource
- for methodName, methodDesc in resourceDesc['methods'].iteritems():
- future = futureDesc['methods'].get(methodName, {})
- createMethod(Resource, methodName, methodDesc, future)
+ if 'methods' in resourceDesc:
+ for methodName, methodDesc in resourceDesc['methods'].iteritems():
+ if futureDesc:
+ future = futureDesc['methods'].get(methodName, {})
+ else:
+ future = None
+ createMethod(Resource, methodName, methodDesc, future)
+
+ # Add in nested resources
+ if 'resources' in resourceDesc:
+ def createMethod(theclass, methodName, methodDesc, futureDesc):
+
+ def method(self):
+ return createResource(self._http, self._baseUrl, self._model,
+ methodName, self._developerKey, methodDesc, futureDesc)
+
+ setattr(method, '__doc__', 'A description of how to use this function')
+ setattr(theclass, methodName, method)
+
+ for methodName, methodDesc in resourceDesc['resources'].iteritems():
+ if futureDesc and 'resources' in futureDesc:
+ future = futureDesc['resources'].get(methodName, {})
+ else:
+ future = {}
+ createMethod(Resource, methodName, methodDesc, future.get(methodName, {}))
# Add <m>_next() methods to Resource
- for methodName, methodDesc in futureDesc['methods'].iteritems():
- if 'next' in methodDesc and methodName in resourceDesc['methods']:
- createNextMethod(Resource, methodName + "_next", methodDesc['next'])
+ if futureDesc:
+ for methodName, methodDesc in futureDesc['methods'].iteritems():
+ if 'next' in methodDesc and methodName in resourceDesc['methods']:
+ createNextMethod(Resource, methodName + "_next", methodDesc['next'])
return Resource()
diff --git a/samples/local/main.py b/samples/local/main.py
new file mode 100644
index 0000000..7c62fef
--- /dev/null
+++ b/samples/local/main.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+"""Simple command-line example for running against a
+ local server.
+
+"""
+
+__author__ = 'jcgregorio@google.com (Joe Gregorio)'
+
+# Enable this sample to be run from the top-level directory
+import os
+import sys
+sys.path.insert(0, os.getcwd())
+
+from apiclient.discovery import build
+
+import httplib2
+# httplib2.debuglevel = 4
+import pickle
+import pprint
+
+DISCOVERY_URI = ('http://gregorio-ub.i:3990/discovery/v0.2beta1/describe/'
+ '{api}/{apiVersion}')
+
+def main():
+ http = httplib2.Http()
+
+ p = build("buzz", "v1", http=http, discoveryServiceUrl=DISCOVERY_URI)
+ help(p.activities().list)
+ print p.activities().list(userId='@self', scope='@me', c='foo').uri
+
+if __name__ == '__main__':
+ main()
diff --git a/tests/data/buzz.json b/tests/data/buzz.json
index 62af35c..c58cddd 100644
--- a/tests/data/buzz.json
+++ b/tests/data/buzz.json
@@ -1,1009 +1,1021 @@
{
- "data": {
- "buzz": {
- "v1": {
- "baseUrl": "https://www.googleapis.com/",
- "resources": {
- "photos": {
- "methods": {
- "insert": {
- "pathUrl": "buzz/v1/photos/{userId}/{albumId}",
- "rpcName": "buzz.photos.insert",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "albumId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "resource": {
- "parameterType": "query",
- "required": false
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- }
+ "name": "buzz",
+ "version": "v1",
+ "description": "Buzz APIs for Buzz Posts, etc.",
+ "restBasePath": "/buzz/v1/",
+ "rpcPath": "/rpc",
+ "resources": {
+ "activities": {
+ "methods": {
+ "delete": {
+ "restPath": "activities/{userId}/{scope}/{postId}",
+ "rpcMethod": "chili.activities.delete",
+ "httpMethod": "DELETE",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "postId": {
+ "restParameterType": "path",
+ "pattern": ".*",
+ "required": true
+ },
+ "scope": {
+ "restParameterType": "path",
+ "pattern": "@.*",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
}
- },
- "feeds": {
- "methods": {
- "insert": {
- "pathUrl": "buzz/v1/feeds/{userId}/@self",
- "rpcName": "buzz.feeds.insert",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "update": {
- "pathUrl": "buzz/v1/feeds/{userId}/@self/{siteId}",
- "rpcName": "buzz.feeds.update",
- "httpMethod": "PUT",
- "methodType": "rest",
- "parameters": {
- "siteId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "c": {
- "parameterType": "query",
- "required": false
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "list": {
- "pathUrl": "buzz/v1/feeds/{userId}/{scope}",
- "rpcName": "buzz.feeds.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "scope": {
- "parameterType": "path",
- "pattern": "@.*",
- "required": true
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "delete": {
- "pathUrl": "buzz/v1/feeds/{userId}/@self/{siteId}",
- "rpcName": "buzz.feeds.delete",
- "httpMethod": "DELETE",
- "methodType": "rest",
- "parameters": {
- "siteId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- }
+ }
+ },
+ "extractPeopleFromSearch": {
+ "restPath": "activities/search/@people",
+ "rpcMethod": "chili.activities.extractPeopleFromSearch",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "bbox": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "c": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "lat": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "lon": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "pid": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "q": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "radius": {
+ "restParameterType": "query",
+ "required": false
}
- },
- "search": {
- "methods": {
- "extractPeople": {
- "pathUrl": "buzz/v1/activities/search/@people",
- "rpcName": "buzz.activities.search.extractPeople",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "lon": {
- "parameterType": "query",
- "required": false
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "c": {
- "parameterType": "query",
- "required": false
- },
- "bbox": {
- "parameterType": "query",
- "required": false
- },
- "q": {
- "parameterType": "query",
- "required": false
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "pid": {
- "parameterType": "query",
- "required": false
- },
- "radius": {
- "parameterType": "query",
- "required": false
- },
- "lat": {
- "parameterType": "query",
- "required": false
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- }
+ }
+ },
+ "get": {
+ "restPath": "activities/{userId}/@self/{postId}",
+ "rpcMethod": "chili.activities.get",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "postId": {
+ "restParameterType": "path",
+ "pattern": ".*",
+ "required": true
+ },
+ "targetLang": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
}
- },
- "activities": {
- "methods": {
- "update": {
- "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}",
- "rpcName": "buzz.activities.update",
- "httpMethod": "PUT",
- "methodType": "rest",
- "parameters": {
- "scope": {
- "parameterType": "path",
- "pattern": "@.*",
- "required": true
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "postId": {
- "parameterType": "path",
- "pattern": ".*",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- },
- "abuseType": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "delete": {
- "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}",
- "rpcName": "buzz.activities.delete",
- "httpMethod": "DELETE",
- "methodType": "rest",
- "parameters": {
- "scope": {
- "parameterType": "path",
- "pattern": "@.*",
- "required": true
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "postId": {
- "parameterType": "path",
- "pattern": ".*",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "insert": {
- "pathUrl": "buzz/v1/activities/{userId}/@self",
- "rpcName": "buzz.activities.insert",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "preview": {
- "parameterType": "query",
- "required": false
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "resource": {
- "parameterType": "query",
- "required": false
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "list": {
- "pathUrl": "buzz/v1/activities/{userId}/{scope}",
- "rpcName": "buzz.activities.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "max-comments": {
- "parameterType": "query",
- "required": false
- },
- "scope": {
- "parameterType": "path",
- "pattern": "@(self|public|consumption|liked|comments)*",
- "required": true
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "c": {
- "parameterType": "query",
- "required": false
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "max-liked": {
- "parameterType": "query",
- "required": false
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "get": {
- "pathUrl": "buzz/v1/activities/{userId}/@self/{postId}",
- "rpcName": "buzz.activities.get",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "postId": {
- "parameterType": "path",
- "pattern": ".*",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "search": {
- "pathUrl": "buzz/v1/activities/search",
- "rpcName": "buzz.activities.search",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "lon": {
- "parameterType": "query",
- "required": false
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "c": {
- "parameterType": "query",
- "required": false
- },
- "bbox": {
- "parameterType": "query",
- "required": false
- },
- "q": {
- "parameterType": "query",
- "required": false
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "pid": {
- "parameterType": "query",
- "required": false
- },
- "radius": {
- "parameterType": "query",
- "required": false
- },
- "lat": {
- "parameterType": "query",
- "required": false
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- }
+ }
+ },
+ "insert": {
+ "restPath": "activities/{userId}/@self",
+ "rpcMethod": "chili.activities.insert",
+ "httpMethod": "POST",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "photo": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "preview": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
}
- },
- "people": {
- "methods": {
- "get": {
- "pathUrl": "buzz/v1/people/{userId}/@self",
- "rpcName": "buzz.people.get",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "search": {
- "pathUrl": "buzz/v1/people/search",
- "rpcName": "buzz.people.search",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "c": {
- "parameterType": "query",
- "required": false
- },
- "q": {
- "parameterType": "query",
- "required": false
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "list": {
- "pathUrl": "buzz/v1/people/{userId}/@groups/{groupId}",
- "rpcName": "buzz.people.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "groupId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "c": {
- "parameterType": "query",
- "required": false
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "relatedToUri": {
- "pathUrl": "buzz/v1/people/{userId}/@related",
- "rpcName": "buzz.people.relatedToUri",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "uri": {
- "parameterType": "query",
- "required": false
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "reshared": {
- "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}/{groupId}",
- "rpcName": "buzz.people.reshared",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "groupId": {
- "parameterType": "path",
- "pattern": "@reshared",
- "required": true
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "c": {
- "parameterType": "query",
- "required": false
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "postId": {
- "parameterType": "path",
- "pattern": ".*",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "delete": {
- "pathUrl": "buzz/v1/people/{userId}/@groups/{groupId}/{personId}",
- "rpcName": "buzz.people.delete",
- "httpMethod": "DELETE",
- "methodType": "rest",
- "parameters": {
- "groupId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "personId": {
- "parameterType": "path",
- "pattern": "(?!@self).*",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "update": {
- "pathUrl": "buzz/v1/people/{userId}/@groups/{groupId}/{personId}",
- "rpcName": "buzz.people.update",
- "httpMethod": "PUT",
- "methodType": "rest",
- "parameters": {
- "groupId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "personId": {
- "parameterType": "path",
- "pattern": "(?!@self).*",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "liked": {
- "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}/{groupId}",
- "rpcName": "buzz.people.liked",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "groupId": {
- "parameterType": "path",
- "pattern": "@liked",
- "required": true
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "c": {
- "parameterType": "query",
- "required": false
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "scope": {
- "parameterType": "path",
- "pattern": "@.*",
- "required": true
- },
- "postId": {
- "parameterType": "path",
- "pattern": ".*",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- }
+ }
+ },
+ "list": {
+ "restPath": "activities/{userId}/{scope}",
+ "rpcMethod": "chili.activities.list",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "c": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-comments": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-liked": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "scope": {
+ "restParameterType": "path",
+ "pattern": "@(self|public|consumption|liked|comments)*",
+ "required": true
+ },
+ "targetLang": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
}
- },
- "groups": {
- "methods": {
- "get": {
- "pathUrl": "buzz/v1/people/{userId}/@groups/{groupId}/@self",
- "rpcName": "buzz.groups.get",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "groupId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "list": {
- "pathUrl": "buzz/v1/people/{userId}/@groups",
- "rpcName": "buzz.groups.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "c": {
- "parameterType": "query",
- "required": false
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "delete": {
- "pathUrl": "buzz/v1/people/{userId}/@groups/{groupId}",
- "rpcName": "buzz.groups.delete",
- "httpMethod": "DELETE",
- "methodType": "rest",
- "parameters": {
- "groupId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "update": {
- "pathUrl": "buzz/v1/people/{userId}/@groups/{groupId}/@self",
- "rpcName": "buzz.groups.update",
- "httpMethod": "PUT",
- "methodType": "rest",
- "parameters": {
- "groupId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "insert": {
- "pathUrl": "buzz/v1/people/{userId}/@groups",
- "rpcName": "buzz.groups.insert",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- }
+ }
+ },
+ "search": {
+ "restPath": "activities/search",
+ "rpcMethod": "chili.activities.search",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "bbox": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "c": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "lat": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "lon": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "pid": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "q": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "radius": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "targetLang": {
+ "restParameterType": "query",
+ "required": false
}
- },
- "comments": {
- "methods": {
- "update": {
- "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}/@comments/{commentId}",
- "rpcName": "buzz.comments.update",
- "httpMethod": "PUT",
- "methodType": "rest",
- "parameters": {
- "scope": {
- "parameterType": "path",
- "pattern": "@.*",
- "required": true
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "commentId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "postId": {
- "parameterType": "path",
- "pattern": ".*",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- },
- "abuseType": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "list": {
- "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}/@comments",
- "rpcName": "buzz.comments.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "scope": {
- "parameterType": "path",
- "pattern": "@.*",
- "required": true
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "c": {
- "parameterType": "query",
- "required": false
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "postId": {
- "parameterType": "path",
- "pattern": ".*",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "delete": {
- "pathUrl": "buzz/v1/activities/{userId}/@self/{postId}/@comments/{commentId}",
- "rpcName": "buzz.comments.delete",
- "httpMethod": "DELETE",
- "methodType": "rest",
- "parameters": {
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "commentId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "postId": {
- "parameterType": "path",
- "pattern": ".*",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "insert": {
- "pathUrl": "buzz/v1/activities/{userId}/@self/{postId}/@comments",
- "rpcName": "buzz.comments.insert",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "postId": {
- "parameterType": "path",
- "pattern": ".*",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "get": {
- "pathUrl": "buzz/v1/activities/{userId}/@self/{postId}/@comments/{commentId}",
- "rpcName": "buzz.comments.get",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "commentId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "postId": {
- "parameterType": "path",
- "pattern": ".*",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- }
- }
- }
+ }
+ },
+ "update": {
+ "restPath": "activities/{userId}/{scope}/{postId}",
+ "rpcMethod": "chili.activities.update",
+ "httpMethod": "PUT",
+ "parameters": {
+ "abuseType": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "postId": {
+ "restParameterType": "path",
+ "pattern": ".*",
+ "required": true
+ },
+ "scope": {
+ "restParameterType": "path",
+ "pattern": "@.*",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
}
- },
- "related": {
- "methods": {
- "list": {
- "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}/@related",
- "rpcName": "buzz.related.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "scope": {
- "parameterType": "path",
- "pattern": "@.*",
- "required": true
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "c": {
- "parameterType": "query",
- "required": false
- },
- "alt": {
- "parameterType": "query",
- "required": false
- },
- "userId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "hl": {
- "parameterType": "query",
- "required": false
- },
- "postId": {
- "parameterType": "path",
- "pattern": ".*",
- "required": true
- }
- }
- }
+ }
+ }
+ }
+ },
+ "comments": {
+ "methods": {
+ "delete": {
+ "restPath": "activities/{userId}/@self/{postId}/@comments/{commentId}",
+ "rpcMethod": "chili.comments.delete",
+ "httpMethod": "DELETE",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "commentId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "postId": {
+ "restParameterType": "path",
+ "pattern": ".*",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "get": {
+ "restPath": "activities/{userId}/@self/{postId}/@comments/{commentId}",
+ "rpcMethod": "chili.comments.get",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "commentId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "postId": {
+ "restParameterType": "path",
+ "pattern": ".*",
+ "required": true
+ },
+ "targetLang": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "insert": {
+ "restPath": "activities/{userId}/@self/{postId}/@comments",
+ "rpcMethod": "chili.comments.insert",
+ "httpMethod": "POST",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "postId": {
+ "restParameterType": "path",
+ "pattern": ".*",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "list": {
+ "restPath": "activities/{userId}/{scope}/{postId}/@comments",
+ "rpcMethod": "chili.comments.list",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "c": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "postId": {
+ "restParameterType": "path",
+ "pattern": ".*",
+ "required": true
+ },
+ "scope": {
+ "restParameterType": "path",
+ "pattern": "@.*",
+ "required": true
+ },
+ "targetLang": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "update": {
+ "restPath": "activities/{userId}/{scope}/{postId}/@comments/{commentId}",
+ "rpcMethod": "chili.comments.update",
+ "httpMethod": "PUT",
+ "parameters": {
+ "abuseType": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "commentId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "postId": {
+ "restParameterType": "path",
+ "pattern": ".*",
+ "required": true
+ },
+ "scope": {
+ "restParameterType": "path",
+ "pattern": "@.*",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ }
+ }
+ },
+ "feeds": {
+ "methods": {
+ "delete": {
+ "restPath": "feeds/{userId}/@self/{siteId}",
+ "rpcMethod": "chili.feeds.delete",
+ "httpMethod": "DELETE",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "siteId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "insert": {
+ "restPath": "feeds/{userId}/@self",
+ "rpcMethod": "chili.feeds.insert",
+ "httpMethod": "POST",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "list": {
+ "restPath": "feeds/{userId}/{scope}",
+ "rpcMethod": "chili.feeds.list",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "scope": {
+ "restParameterType": "path",
+ "pattern": "@.*",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "update": {
+ "restPath": "feeds/{userId}/@self/{siteId}",
+ "rpcMethod": "chili.feeds.update",
+ "httpMethod": "PUT",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "c": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "siteId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ }
+ }
+ },
+ "groups": {
+ "methods": {
+ "delete": {
+ "restPath": "people/{userId}/@groups/{groupId}",
+ "rpcMethod": "chili.groups.delete",
+ "httpMethod": "DELETE",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "groupId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "get": {
+ "restPath": "people/{userId}/@groups/{groupId}/@self",
+ "rpcMethod": "chili.groups.get",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "groupId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "insert": {
+ "restPath": "people/{userId}/@groups",
+ "rpcMethod": "chili.groups.insert",
+ "httpMethod": "POST",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "list": {
+ "restPath": "people/{userId}/@groups",
+ "rpcMethod": "chili.groups.list",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "c": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "update": {
+ "restPath": "people/{userId}/@groups/{groupId}/@self",
+ "rpcMethod": "chili.groups.update",
+ "httpMethod": "PUT",
+ "parameters": {
+ "groupId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ }
+ }
+ },
+ "people": {
+ "methods": {
+ "delete": {
+ "restPath": "people/{userId}/@groups/{groupId}/{personId}",
+ "rpcMethod": "chili.people.delete",
+ "httpMethod": "DELETE",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "groupId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "personId": {
+ "restParameterType": "path",
+ "pattern": "(?!@self).*",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "get": {
+ "restPath": "people/{userId}/@self",
+ "rpcMethod": "chili.people.get",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "liked": {
+ "restPath": "activities/{userId}/{scope}/{postId}/{groupId}",
+ "rpcMethod": "chili.people.liked",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "c": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "groupId": {
+ "restParameterType": "path",
+ "pattern": "@liked",
+ "required": true
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "postId": {
+ "restParameterType": "path",
+ "pattern": ".*",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "list": {
+ "restPath": "people/{userId}/@groups/{groupId}",
+ "rpcMethod": "chili.people.list",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "c": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "groupId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "relatedToUri": {
+ "restPath": "people/{userId}/@related",
+ "rpcMethod": "chili.people.relatedToUri",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "uri": {
+ "restParameterType": "query",
+ "required": false
+ }
+ }
+ },
+ "reshared": {
+ "restPath": "activities/{userId}/{scope}/{postId}/{groupId}",
+ "rpcMethod": "chili.people.reshared",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "c": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "groupId": {
+ "restParameterType": "path",
+ "pattern": "@reshared",
+ "required": true
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "postId": {
+ "restParameterType": "path",
+ "pattern": ".*",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "search": {
+ "restPath": "people/search",
+ "rpcMethod": "chili.people.search",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "c": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "q": {
+ "restParameterType": "query",
+ "required": false
+ }
+ }
+ },
+ "update": {
+ "restPath": "people/{userId}/@groups/{groupId}/{personId}",
+ "rpcMethod": "chili.people.update",
+ "httpMethod": "PUT",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "groupId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "personId": {
+ "restParameterType": "path",
+ "pattern": "(?!@self).*",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ }
+ }
+ },
+ "photoAlbums": {
+ "methods": {
+ "get": {
+ "restPath": "photos/{userId}/@self/{albumId}",
+ "rpcMethod": "chili.photoAlbums.get",
+ "httpMethod": "GET",
+ "parameters": {
+ "albumId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ }
+ }
+ },
+ "photos": {
+ "methods": {
+ "get": {
+ "restPath": "photos/{userId}/@self/{albumId}/@photos/{photoId}",
+ "rpcMethod": "chili.photos.get",
+ "httpMethod": "GET",
+ "parameters": {
+ "albumId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "photoId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ }
+ }
+ },
+ "related": {
+ "methods": {
+ "list": {
+ "restPath": "activities/{userId}/{scope}/{postId}/@related",
+ "rpcMethod": "chili.related.list",
+ "httpMethod": "GET",
+ "parameters": {
+ "alt": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "c": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "hl": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "postId": {
+ "restParameterType": "path",
+ "pattern": ".*",
+ "required": true
+ },
+ "scope": {
+ "restParameterType": "path",
+ "pattern": "@.*",
+ "required": true
+ },
+ "userId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
}
}
}
diff --git a/tests/data/latitude.json b/tests/data/latitude.json
index 29dc80f..46f82f2 100644
--- a/tests/data/latitude.json
+++ b/tests/data/latitude.json
@@ -1,99 +1,90 @@
{
- "data": {
- "latitude": {
- "v1": {
- "baseUrl": "https://www.googleapis.com/",
- "resources": {
- "location": {
- "methods": {
- "insert": {
- "pathUrl": "latitude/v1/location",
- "rpcName": "latitude.location.insert",
- "httpMethod": "POST",
- "methodType": "rest"
- },
- "list": {
- "pathUrl": "latitude/v1/location",
- "rpcName": "latitude.location.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "max-time": {
- "parameterType": "query",
- "required": false
- },
- "min-time": {
- "parameterType": "query",
- "required": false
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "granularity": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "get": {
- "pathUrl": "latitude/v1/location/{locationId}",
- "rpcName": "latitude.location.get",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "granularity": {
- "parameterType": "query",
- "required": false
- },
- "locationId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "delete": {
- "pathUrl": "latitude/v1/location/{locationId}",
- "rpcName": "latitude.location.delete",
- "httpMethod": "DELETE",
- "methodType": "rest",
- "parameters": {
- "locationId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- }
+ "name": "latitude",
+ "version": "v1",
+ "description": "Google Latitude API",
+ "restBasePath": "/latitude/v1",
+ "rpcPath": "/rpc",
+ "resources": {
+ "currentLocation": {
+ "methods": {
+ "delete": {
+ "restPath": "/currentLocation",
+ "rpcMethod": "latitude.currentLocation.delete",
+ "httpMethod": "DELETE"
+ },
+ "get": {
+ "restPath": "/currentLocation",
+ "rpcMethod": "latitude.currentLocation.get",
+ "httpMethod": "GET",
+ "parameters": {
+ "granularity": {
+ "restParameterType": "query",
+ "required": false
}
- },
- "currentLocation": {
- "methods": {
- "insert": {
- "pathUrl": "latitude/v1/currentLocation",
- "rpcName": "latitude.currentLocation.insert",
- "httpMethod": "POST",
- "methodType": "rest"
- },
- "delete": {
- "pathUrl": "latitude/v1/currentLocation",
- "rpcName": "latitude.currentLocation.delete",
- "httpMethod": "DELETE",
- "methodType": "rest"
- },
- "get": {
- "pathUrl": "latitude/v1/currentLocation",
- "rpcName": "latitude.currentLocation.get",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "granularity": {
- "parameterType": "query",
- "required": false
- }
- }
- }
+ }
+ },
+ "insert": {
+ "restPath": "/currentLocation",
+ "rpcMethod": "latitude.currentLocation.insert",
+ "httpMethod": "POST"
+ }
+ }
+ },
+ "location": {
+ "methods": {
+ "delete": {
+ "restPath": "/location/{locationId}",
+ "rpcMethod": "latitude.location.delete",
+ "httpMethod": "DELETE",
+ "parameters": {
+ "locationId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "get": {
+ "restPath": "/location/{locationId}",
+ "rpcMethod": "latitude.location.get",
+ "httpMethod": "GET",
+ "parameters": {
+ "granularity": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "locationId": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "insert": {
+ "restPath": "/location",
+ "rpcMethod": "latitude.location.insert",
+ "httpMethod": "POST"
+ },
+ "list": {
+ "restPath": "/location",
+ "rpcMethod": "latitude.location.list",
+ "httpMethod": "GET",
+ "parameters": {
+ "granularity": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "max-time": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "min-time": {
+ "restParameterType": "query",
+ "required": false
}
}
}
diff --git a/tests/data/moderator.json b/tests/data/moderator.json
index 3ac3f2c..e69de29 100644
--- a/tests/data/moderator.json
+++ b/tests/data/moderator.json
@@ -1,528 +0,0 @@
-{
- "data": {
- "moderator": {
- "v1": {
- "baseUrl": "https://www.googleapis.com/",
- "resources": {
- "tags": {
- "methods": {
- "delete": {
- "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/tags/{tagId}",
- "rpcName": "moderator.tags.delete",
- "httpMethod": "DELETE",
- "methodType": "rest",
- "parameters": {
- "tagId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "submissionId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "list": {
- "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/tags",
- "rpcName": "moderator.tags.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "submissionId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "insert": {
- "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/tags",
- "rpcName": "moderator.tags.insert",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "submissionId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- }
- }
- },
- "series": {
- "methods": {
- "list": {
- "pathUrl": "moderator/v1/series/@me/mine",
- "rpcName": "moderator.my.series.list",
- "httpMethod": "GET",
- "methodType": "rest"
- },
- "list": {
- "pathUrl": "moderator/v1/series",
- "rpcName": "moderator.series.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "start-index": {
- "parameterType": "query",
- "required": false
- }
- }
- },
- "list": {
- "pathUrl": "moderator/v1/series/@me/recent",
- "rpcName": "moderator.myrecent.series.list",
- "httpMethod": "GET",
- "methodType": "rest"
- },
- "update": {
- "pathUrl": "moderator/v1/series/{seriesId}",
- "rpcName": "moderator.series.update",
- "httpMethod": "PUT",
- "methodType": "rest",
- "parameters": {
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "insert": {
- "pathUrl": "moderator/v1/series",
- "rpcName": "moderator.series.insert",
- "httpMethod": "POST",
- "methodType": "rest"
- },
- "get": {
- "pathUrl": "moderator/v1/series/{seriesId}",
- "rpcName": "moderator.series.get",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "list": {
- "pathUrl": "moderator/v1/series/featured",
- "rpcName": "moderator.featured.series.list",
- "httpMethod": "GET",
- "methodType": "rest"
- }
- }
- },
- "topics": {
- "methods": {
- "list": {
- "pathUrl": "moderator/v1/series/{seriesId}/topics",
- "rpcName": "moderator.topics.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "start-index": {
- "parameterType": "query",
- "required": false
- },
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "insert": {
- "pathUrl": "moderator/v1/series/{seriesId}/topics",
- "rpcName": "moderator.topics.insert",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "get": {
- "pathUrl": "moderator/v1/series/{seriesId}/topics/{topicId}",
- "rpcName": "moderator.topics.get",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "topicId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- }
- }
- },
- "votes": {
- "methods": {
- "update": {
- "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/votes/@me",
- "rpcName": "moderator.votes.update",
- "httpMethod": "PUT",
- "methodType": "rest",
- "parameters": {
- "userId": {
- "parameterType": "query",
- "required": false
- },
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "submissionId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "list": {
- "pathUrl": "moderator/v1/series/{seriesId}/votes/@me",
- "rpcName": "moderator.votes.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "start-index": {
- "parameterType": "query",
- "required": false
- },
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "get": {
- "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/votes/@me",
- "rpcName": "moderator.votes.get",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "userId": {
- "parameterType": "query",
- "required": false
- },
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "submissionId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "insert": {
- "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/votes/@me",
- "rpcName": "moderator.votes.insert",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "submissionId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- }
- }
- },
- "submissions": {
- "methods": {
- "get": {
- "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}",
- "rpcName": "moderator.submissions.get",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "submissionId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "list": {
- "pathUrl": "moderator/v1/series/{seriesId}/submissions",
- "rpcName": "moderator.series.submissions.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "author": {
- "parameterType": "query",
- "required": false
- },
- "sort": {
- "parameterType": "query",
- "required": false
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "q": {
- "parameterType": "query",
- "required": false
- },
- "hasAttachmentVideo": {
- "parameterType": "query",
- "required": false
- },
- "start-index": {
- "parameterType": "query",
- "required": false
- },
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "insert": {
- "pathUrl": "moderator/v1/series/{seriesId}/topics/{topicId}/submissions",
- "rpcName": "moderator.submissions.insert",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "topicId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "list": {
- "pathUrl": "moderator/v1/series/{seriesId}/topics/{topicId}/submissions",
- "rpcName": "moderator.topics.submissions.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "author": {
- "parameterType": "query",
- "required": false
- },
- "hasAttachedVideo": {
- "parameterType": "query",
- "required": false
- },
- "sort": {
- "parameterType": "query",
- "required": false
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "q": {
- "parameterType": "query",
- "required": false
- },
- "topicId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "start-index": {
- "parameterType": "query",
- "required": false
- },
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- }
- }
- },
- "profiles": {
- "methods": {
- "get": {
- "pathUrl": "moderator/v1/profiles/@me",
- "rpcName": "moderator.profiles.get",
- "httpMethod": "GET",
- "methodType": "rest"
- },
- "update": {
- "pathUrl": "moderator/v1/profiles/@me",
- "rpcName": "moderator.profiles.update",
- "httpMethod": "PUT",
- "methodType": "rest"
- }
- }
- },
- "responses": {
- "methods": {
- "insert": {
- "pathUrl": "moderator/v1/series/{seriesId}/topics/{topicId}/submissions/{parentSubmissionId}/responses",
- "rpcName": "moderator.responses.insert",
- "httpMethod": "POST",
- "methodType": "rest",
- "parameters": {
- "parentSubmissionId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "topicId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "list": {
- "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/responses",
- "rpcName": "moderator.responses.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "author": {
- "parameterType": "query",
- "required": false
- },
- "hasAttachedVideo": {
- "parameterType": "query",
- "required": false
- },
- "sort": {
- "parameterType": "query",
- "required": false
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "q": {
- "parameterType": "query",
- "required": false
- },
- "start-index": {
- "parameterType": "query",
- "required": false
- },
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- },
- "submissionId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- },
- "list": {
- "pathUrl": "moderator/v1/series/{seriesId}/responses",
- "rpcName": "moderator.series.responses.list",
- "httpMethod": "GET",
- "methodType": "rest",
- "parameters": {
- "author": {
- "parameterType": "query",
- "required": false
- },
- "hasAttachedVideo": {
- "parameterType": "query",
- "required": false
- },
- "sort": {
- "parameterType": "query",
- "required": false
- },
- "max-results": {
- "parameterType": "query",
- "required": false
- },
- "q": {
- "parameterType": "query",
- "required": false
- },
- "start-index": {
- "parameterType": "query",
- "required": false
- },
- "seriesId": {
- "parameterType": "path",
- "pattern": "[^/]+",
- "required": true
- }
- }
- }
- }
- }
- }
- }
- }
- }
-}
diff --git a/tests/data/zoo.json b/tests/data/zoo.json
new file mode 100644
index 0000000..9a5e44a
--- /dev/null
+++ b/tests/data/zoo.json
@@ -0,0 +1,113 @@
+{
+ "name": "zoo",
+ "version": "v1",
+ "description": "Zoo API used for Apiary testing",
+ "restBasePath": "/zoo",
+ "rpcPath": "/rpc",
+ "resources": {
+ "animals": {
+ "methods": {
+ "crossbreed": {
+ "restPath": "/animals/crossbreed",
+ "rpcMethod": "zoo.animals.crossbreed",
+ "httpMethod": "GET",
+ "parameters": {
+ "father": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "mother": {
+ "restParameterType": "query",
+ "required": false
+ }
+ }
+ },
+ "delete": {
+ "restPath": "/animals/{name}",
+ "rpcMethod": "zoo.animals.delete",
+ "httpMethod": "DELETE",
+ "parameters": {
+ "name": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ }
+ }
+ },
+ "get": {
+ "restPath": "/animals/{name}",
+ "rpcMethod": "zoo.animals.get",
+ "httpMethod": "GET",
+ "parameters": {
+ "name": {
+ "restParameterType": "path",
+ "pattern": "[^/]+",
+ "required": true
+ },
+ "projection": {
+ "restParameterType": "query",
+ "required": false
+ }
+ }
+ },
+ "insert": {
+ "restPath": "/animals",
+ "rpcMethod": "zoo.animals.insert",
+ "httpMethod": "POST",
+ "parameters": {
+ "photo": {
+ "restParameterType": "query",
+ "required": false
+ }
+ }
+ },
+ "list": {
+ "restPath": "/animals",
+ "rpcMethod": "zoo.animals.list",
+ "httpMethod": "GET",
+ "parameters": {
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "name": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "projection": {
+ "restParameterType": "query",
+ "required": false
+ },
+ "start-token": {
+ "restParameterType": "query",
+ "required": false
+ }
+ }
+ },
+ "update": {
+ "restPath": "/animals/{animal.name}",
+ "rpcMethod": "zoo.animals.update",
+ "httpMethod": "PUT"
+ }
+ }
+ },
+ "load": {
+ "methods": {
+ "list": {
+ "restPath": "/load",
+ "rpcMethod": "zoo.load.list",
+ "httpMethod": "GET"
+ }
+ }
+ },
+ "loadNoTemplate": {
+ "methods": {
+ "list": {
+ "restPath": "/loadNoTemplate",
+ "rpcMethod": "zoo.loadNoTemplate.list",
+ "httpMethod": "GET"
+ }
+ }
+ }
+ }
+}
diff --git a/tests/test_discovery.py b/tests/test_discovery.py
index 14ff498..7d52b3d 100644
--- a/tests/test_discovery.py
+++ b/tests/test_discovery.py
@@ -35,6 +35,7 @@
DATA_DIR = os.path.join(os.path.dirname(__file__), 'data')
+
class HttpMock(object):
def __init__(self, filename, headers):
@@ -54,6 +55,7 @@
class Discovery(unittest.TestCase):
+
def test_method_error_checking(self):
self.http = HttpMock('buzz.json', {'status': '200'})
buzz = build('buzz', 'v1', self.http)
@@ -90,7 +92,6 @@
self.http = HttpMock('buzz.json', {'status': '200'})
buzz = build('buzz', 'v1', self.http)
self.assertTrue(getattr(buzz, 'activities'))
- self.assertTrue(getattr(buzz, 'search'))
self.assertTrue(getattr(buzz, 'feeds'))
self.assertTrue(getattr(buzz, 'photos'))
self.assertTrue(getattr(buzz, 'people'))
@@ -104,6 +105,19 @@
auth = buzz.auth_discovery()
self.assertTrue('request' in auth)
+ def test_full_featured(self):
+ # Zoo should exercise all discovery facets
+ # and should also have no future.json file.
+ self.http = HttpMock('zoo.json', {'status': '200'})
+ zoo = build('zoo', 'v1', self.http)
+ self.assertTrue(getattr(zoo, 'animals'))
+ request = zoo.animals().list(name="bat", projection="size")
+ parsed = urlparse.urlparse(request.uri)
+ q = parse_qs(parsed[4])
+ self.assertEqual(q['name'], ['bat'])
+ self.assertEqual(q['projection'], ['size'])
+
+
class Next(unittest.TestCase):
def test_next_for_people_liked(self):
diff --git a/tests/test_json_model.py b/tests/test_json_model.py
index 01015f1..a8da2b6 100644
--- a/tests/test_json_model.py
+++ b/tests/test_json_model.py
@@ -33,7 +33,6 @@
from cgi import parse_qs
-
class Model(unittest.TestCase):
def test_json_no_body(self):
model = JsonModel()