Added tests for resources and their methods. Also added tests for the json model.

This commit is contained in:
Joe Gregorio
2010-08-19 15:49:04 -04:00
parent 21f11678f1
commit ba9ea7faea
9 changed files with 1748 additions and 3 deletions

View File

@@ -1,2 +1,5 @@
pep8: pep8:
find apiclient samples -name "*.py" | xargs pep8 --ignore=E111,E202 find apiclient samples -name "*.py" | xargs pep8 --ignore=E111,E202
test:
python runtests.py

View File

@@ -80,12 +80,12 @@ class JsonModel(object):
def request(self, headers, params): def request(self, headers, params):
model = params.get('body', None) model = params.get('body', None)
query = '?alt=json&prettyprint=true' query = '?alt=json&prettyprint=true'
headers['Accept'] = 'application/json' headers['accept'] = 'application/json'
if model == None: if model == None:
return (headers, params, query, None) return (headers, params, query, None)
else: else:
model = {'data': model} model = {'data': model}
headers['Content-Type'] = 'application/json' headers['content-type'] = 'application/json'
del params['body'] del params['body']
return (headers, params, query, simplejson.dumps(model)) return (headers, params, query, simplejson.dumps(model))
@@ -176,7 +176,7 @@ def createResource(http, baseUrl, model, resourceName, resourceDesc):
for name, regex in pattern.iteritems(): for name, regex in pattern.iteritems():
if name in kwargs: if name in kwargs:
if re.match(regex, kwargs[name]) is None: if re.match(regex, kwargs[name]) is None:
raise TypeError('Parameter "%s" value "%s" does match the pattern "%s"' % (name, kwargs[name], regex)) raise TypeError('Parameter "%s" value "%s" does not match the pattern "%s"' % (name, kwargs[name], regex))
params = {} params = {}
for key, value in kwargs.iteritems(): for key, value in kwargs.iteritems():

988
tests/data/buzz.json Normal file
View File

@@ -0,0 +1,988 @@
{
"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
}
}
}
}
},
"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
}
}
}
}
},
"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
}
}
}
}
},
"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
}
}
}
}
},
"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
}
}
},
"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": "POST",
"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
},
"postId": {
"parameterType": "path",
"pattern": ".*",
"required": true
},
"hl": {
"parameterType": "query",
"required": false
}
}
}
}
},
"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
}
}
},
"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
}
}
},
"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
}
}
}
}
},
"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
}
}
}
}
},
"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
}
}
}
}
}
}
}
}
}
}

103
tests/data/latitude.json Normal file
View File

@@ -0,0 +1,103 @@
{
"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
}
}
}
}
},
"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
}
}
}
}
}
}
}
}
}
}

528
tests/data/moderator.json Normal file
View File

@@ -0,0 +1,528 @@
{
"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
}
}
}
}
}
}
}
}
}
}

78
tests/test_discovery.py Normal file
View File

@@ -0,0 +1,78 @@
#!/usr/bin/python2.4
#
# Copyright 2010 Google Inc. All Rights Reserved.
"""Discovery document tests
Unit tests for objects created from discovery documents.
"""
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
from apiclient.discovery import build
import httplib2
import os
import unittest
DATA_DIR = os.path.join(os.path.dirname(__file__), 'data')
class HttpMock(object):
def __init__(self, filename, headers):
f = file(os.path.join(DATA_DIR, filename), 'r')
self.data = f.read()
f.close()
self.headers = headers
def request(self, uri, method="GET", body=None, headers=None, redirections=1, connection_type=None):
return httplib2.Response(self.headers), self.data
class Discovery(unittest.TestCase):
def test_method_error_checking(self):
self.http = HttpMock('buzz.json', {'status': '200'})
buzz = build('buzz', 'v1', self.http)
# Missing required parameters
try:
buzz.activities().list()
self.fail()
except TypeError, e:
self.assertTrue('Missing' in str(e))
# Parameter doesn't match regex
try:
buzz.activities().list(scope='@self', userId='')
self.fail()
except TypeError, e:
self.assertTrue('does not match' in str(e))
# Parameter doesn't match regex
try:
buzz.activities().list(scope='not@', userId='foo')
self.fail()
except TypeError, e:
self.assertTrue('does not match' in str(e))
# Unexpected parameter
try:
buzz.activities().list(flubber=12)
self.fail()
except TypeError, e:
self.assertTrue('unexpected' in str(e))
def test_resources(self):
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'))
self.assertTrue(getattr(buzz, 'groups'))
self.assertTrue(getattr(buzz, 'comments'))
self.assertTrue(getattr(buzz, 'related'))
if __name__ == '__main__':
unittest.main()

45
tests/test_json_model.py Normal file
View File

@@ -0,0 +1,45 @@
#!/usr/bin/python2.4
#
# Copyright 2010 Google Inc. All Rights Reserved.
"""Discovery document tests
Unit tests for objects created from discovery documents.
"""
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
from apiclient.discovery import JsonModel
import os
import unittest
class Model(unittest.TestCase):
def test_json_no_body(self):
model = JsonModel()
headers = {}
params = {}
headers, params, query, body = model.request(headers, params)
self.assertEqual(headers['accept'], 'application/json')
self.assertTrue('content-type' not in headers)
self.assertNotEqual(query, '')
self.assertEqual(body, None)
def test_json_body(self):
model = JsonModel()
headers = {}
params = {'body': {}}
headers, params, query, body = model.request(headers, params)
self.assertEqual(headers['accept'], 'application/json')
self.assertEqual(headers['content-type'], 'application/json')
self.assertNotEqual(query, '')
self.assertEqual(body, '{"data": {}}')
if __name__ == '__main__':
unittest.main()

View File