2013-10-05 3 views
1

Я пытаюсь интегрировать компилятор закрытия в мой процесс развертывания. Я пришел через this online tool, что позволяет мне генерировать некоторые javascript из необходимых компонентов. Я вижу, что к инструменту можно получить доступ через API, поэтому я хочу интегрироваться в свои сценарии развертывания.Библиотека Python для доступа к API-интерфейсу компилятора Closure

Я не хочу изобретать велосипед, и мне было интересно, есть ли уже доступная оболочка python для этого API. Предоставленные examples очень низкоуровневые, и я не нашел альтернативы.

Может ли кто-нибудь указать мне на более высокоуровневую библиотеку питона для доступа к Goggle Closure Compiler Service API?

ответ

3

Примеры на developer.google.com действительно используют Python, так что это хорошая отправная точка. Однако, кажется, что API настолько мал, что даже официальный документ просто выбирает использовать встроенные модули Pи httplib. Обобщение этой логики в вспомогательную функцию или две действительно кажется тривиальной задачей.

... 

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 на самом деле.

Так отключив выше в питоновских 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' 
) 
+0

Великий, спасибо! Вы сделали через минуту то, что я планировал сделать сегодня сегодня, - это заняло бы у меня две минуты, надеюсь! – dangonfast

+0

@gonvaled: см. Также редактирование :) –

+0

, чтобы сообщить вам, я создал [этот gist] (https://gist.github.com/gonvaled/6840024) на основе вашего кода. – dangonfast

Смежные вопросы