我试图让图标部分包含我自己的图标,而不是通过尝试猴子补丁ApiConfigGenerator.get_descriptor_defaults
来搜索谷歌。不幸的是,在完成发现文档时会忽略/丢弃这些文件。
{
"kind": "discovery#restDescription",
"etag": "...",
"discoveryVersion": "v1",
"id": "acme:v1",
"name": "acme",
"version": "v1",
"description": "Acme API",
"ownerDomain": "google.com",
"ownerName": "Google",
"icons": {
"x16": "http://www.google.com/images/icons/product/search-16.gif", # <-- acme icon url here!
"x32": "http://www.google.com/images/icons/product/search-32.gif" # <--
},
"protocol": "rest",
"baseUrl": "http://acme.appspot.com/_ah/api/acme/v1/",
"basePath": "/_ah/api/acme/v1/",
"rootUrl": "http://acme.appspot.com/_ah/api/",
"servicePath": "acme/v1/",
"batchPath": "batch",
"parameters": {
如果有的话,我该如何解决这个问题?
答案 0 :(得分:2)
google.appengine.api.endpoints
库中尚不支持此功能,但如果您在API配置中指定icon16
和icon32
,则可以使用此功能。为此,您可以在pretty_print_config_to_json
类上修补ApiConfigGenerator
方法,或者对其进行子类化,并在google.appengine.ext.endpoints.api_config
模块中修补该类。
例如,我们在猴子修补模块之前导入模块并保存原始类:
import json
from google.appengine.ext.endpoints import api_config
OriginalConfigGenerator = api_config.ApiConfigGenerator
然后我们定义一个子类来替换它:
class NewConfigGenerator(OriginalConfigGenerator):
然后覆盖生成API配置的方法:
def pretty_print_config_to_json(self, services, hostname=None):
descriptor = super(NewConfigGenerator, self).pretty_print_config_to_json(
services, hostname=hostname)
descriptor = json.loads(descriptor)
获得配置字典后,您可以添加自己的密钥并将其返回:
descriptor['icon16'] = 'YOUR-16x16-ICON-LINK'
descriptor['icon32'] = 'YOUR-32x32-ICON-LINK'
# This will be slower than overwriting __api_descriptor
# due to the json.parse/json.loads having to occur twice
# but hacking around private methods is a pain.
return json.dumps(descriptor, sort_keys=True, indent=2)
最后,确保在实际创建API之前修补模块:
api_config.ApiConfigGenerator = NewConfigGenerator
这可以通过将这个猴子补丁放在像monkey_patch.py
这样的文件然后使用
import monkey_patch
在定义API类的文件中。希望这会有所帮助。