用于访问Closure Compiler Service API的Python库

时间:2013-10-05 09:58:40

标签: python google-closure-compiler

我正在尝试将闭包编译器集成到我的部署过程中。我来到了this online tool,它允许我从所需的组件生成一些javascript。我看到可以通过API访问该工具,这就是我想要集成到我的部署脚本中的内容。

我不想重新发明轮子,并且想知道这个API是否已经有一个已经可用的python包装器。提供的examples非常低级,我还没有找到替代方案。

有人可以指向更高级别的python库来访问Goggle Closure Compiler Service API吗?

1 个答案:

答案 0 :(得分:3)

developer.google.com的示例实际上使用的是Python,因此这是一个很好的起点。 但是,似乎API太小了,甚至官方文档也只选择使用urllibhttplib Python内置模块。将该逻辑概括为一个或两个辅助函数实际上似乎是一项微不足道的任务。

...

params = urllib.urlencode([
    ('js_code', sys.argv[1]),
    ('compilation_level', 'WHITESPACE_ONLY'),
    ('output_format', 'text'),
    ('output_info', 'compiled_code'),
  ])

# Always use the following value for the Content-type header.
headers = {"Content-type": "application/x-www-form-urlencoded"}
conn = httplib.HTTPConnection('closure-compiler.appspot.com')
conn.request('POST', '/compile', params, headers)

...

请参阅https://developers.google.com/closure/compiler/docs/api-tutorial1

P.S。您还可以查看https://github.com/danielfm/closure-compiler-cli - 这是一个命令行工具,但源代码演示了API的简单程度。

将上述内容转换为Pythonic API:

import httplib
import sys
import urllib
from contextlib import closing


def call_closure_api(**kwargs):
    with closing(httplib.HTTPConnection('closure-compiler.appspot.com')) as conn:
        conn.request(
            'POST', '/compile',
            urllib.urlencode(kwargs.items()),
            headers={"Content-type": "application/x-www-form-urlencoded"}
        )
        return conn.getresponse().read()


call_closure_api(
    js_code=sys.argv[1],
    # feel free to introduce named constants for these
    compilation_level='WHITESPACE_ONLY',
    output_format='text',
    output_info='compiled_code'
)