When it’s ready.

出来るまで出来ない

忘れっぽい自分のために、Google App Engineのリンクリストを自動生成する

GAEは、10個前でしかサブドメインが取れない制限がある為、一つのAppIDの中にパスを切ってアプリを複数詰め込むと言う使い方をしている。app.yamlに飛び先を書くだけで、サブディレクトリ以下で完全に分かれて動作するので簡単に作れるくせに、ちゃんと動く。

ただ、簡単にできてしまうためにディレクトリが乱発気味になり、なんというパスを作ったのかが分からなくなる問題があった。(管理出来てなさ過ぎる自分が悪いのだが・・)これが、普通のWebサーバだったらsshで入ってディレクトリ構造見るなりソース見ればいいのだが、Deploy先がGAEだとsshで入る事やソースをDLする事すら出来ない。ちゃんとはじめからLinkの一覧を作っておけばいいのだけど、思いついてババッと作りたい時にイチイチそんなめんどくさい事をやってられない。

GAE上で、app.yamlを読み取ってリンク一覧を作成出来ればいいのだが、うまくアクセス出来ない為ローカルでファイルを作っておいて上げるようなファイルを作ってみた。app.yamlを書き換えたら一回実行するだけで
リンクファイルが生成される。今は、スタティックなhtmlファイル。
以下のファイルをapp.yamlと同じ階層に置いてから、

python mkLinkList.py

すると、app.yamlと同じ階層のtemplatesにlinklist.htmlが生成される。linkは、aap.yamlの中からscriptsのパスだけ抜き出した物になっています。

python

# mkLinkList.py
#!/usr/bin/env python
# coding:utf-8

import yaml

html = '''
<html><head><title>Link List</title></head>
<body>
<h2>LinkList</h2>
<ul>
%s
</ul>
</body></html>
'''


def readYaml():
  string = open('app.yaml').read()
  string = string.decode('utf8')      # 日本語を含む場合はデコードする
  data = yaml.load(string)
  return data

def mkLinkListHtml(linkList):
  file_name = 'templates/linklist.html'
  linkHTML = ''
  for i in linkList:
    linkName = i.split('.')[0]
    linkHTML += '<li><a href="%s">%s</a></li>\n'%(linkName ,linkName)
  linklistStr = html%(linkHTML)
  file = open(file_name, 'w')
  file.write( linklistStr )
  file.close()
  
if __name__ == '__main__':
  myYaml =  readYaml()
  linkList = []
  for url in myYaml['handlers']:
    if 'script' in url.keys():
      linkList.append(url['url'])
  mkLinkListHtml(linkList)