Drkcore

20 04 2012 Python Tweet

PyJade(jade)の更新を検知してコンパイルするスクリプトを書いた

jQuery Mobile用のHTMLをPyJadeで書いているんだけど、いちいちファイルを修正するたびに手でコマンド打つのもめんどくさくなったので、ファイルの更新を検知して自動的にコンパイルするようにしてみた。

import jinja2
import time
import sys
import watchdog.events
import watchdog.observers
env = jinja2.Environment(extensions=['pyjade.ext.jinja.PyJadeExtension'])
env.loader = jinja2.FileSystemLoader('.')

class JadeHandler(watchdog.events.FileSystemEventHandler):
    def __init__(self, file):
        self.file = file
        html = file
        self.html = html.replace('.jade', '') + '.html'

    def on_modified(self, event):
        if event.src_path.endswith(self.file):
            template = env.get_template(self.file)
            with open(self.html, 'w') as f:
                f.write(template.render().encode('utf-8'))
            print "file modified (re-compiled)"

def main():
    file = sys.argv[1]
    event_handler = JadeHandler(file)
    observer = watchdog.observers.Observer()
    observer.schedule(event_handler, path=".")

    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

if __name__ == "__main__":
    main()

これでなかなか快適にはなったんだけど、jadeで書いてみて思うのはdata-属性多すぎで見栄えが悪い。いっそdata-は@に置換してしまったらどうだろうかと。

  div(@theme='a', @role='footer', @position="fixed")
    div(@role="navbar")
      ul
        li: a(href="#", @icon="home") Home
        li: a(href="#", @icon="search") Search
        li: a(href="#info",  @icon="info") Info

これでいけそうなカンジがするので、Jinjaにテンプレートを読ませる前に@をdata-に置換する処理をかましておけば、jqm用のHTMLを快適に書けそうだ。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021