Google App Engine で「フリーソフトウェアライセンス診断」

いまさらって感じだけどGAE始めた。
ついでにPythonも、
ということでお勉強のためのアプリ書いた。

PythonもGAEも思ってたよりも簡単。(というか簡単なことしかやってないから...)

ソースも晒しとく

# coding=utf-8
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class TopPage(webapp.RequestHandler):
  def get(self):
    self.response.out.write(u"""
      <h1>フリーソフトウェアライセンス診断</h1>
      <ul>
        <li><a href="/question?page=q1">start</a></li>
        <li><a href="/about">About this app</a></li>
      </ul>
      """)

pages = {
    "q1" : {
      "subject" : u"問1:あなたのコードを商用ソフトウェアに組み込まれて販売されてもかまわない?",
      "options" : [ (u"はい", "/question?page=q2"),
                    (u"いいえ", "/question?page=a1") ]
    },
    "q2" : {
      "subject" : u"問2:ストールマンのフリーソフトウェア運動に心から賛同している?",
      "options" : [ (u"はい", "/question?page=a1"),
                    (u"いいえ", "/question?page=q3") ]
    },
    "q3" : {
      "subject" : u"問3:あなたはそのソフトウェアを将来ある特定のソフトウェアの一部として配布してもらいたいか?",
      "options" : [ (u"はい", "/question?page=a2"),
                    (u"いいえ", "/question?page=a3") ]
    },
    "a1" : {
      "subject" : u"答え:迷わずGPLにしといたほうがいいよ",
      "options" : [ (u"トップへ", "/") ],
      "links"   : [ (u"Open Source Initiative OSI - The GPL:Licensing(原文)",
                      "http://opensource.org/licenses/gpl-2.0.php"),
                    (u"licenses/GNU_General_Public_License(日本語訳)",
                      "http://sourceforge.jp/projects/opensource/wiki/licenses%2FGNU_General_Public_License")]
    },
    "a2" : {
      "subject" : u"答え:組み込んでもらいたいソフトウェアが採用しているライセンスと同じにしとけば無難かも",
      "options" : [ (u"トップへ", "/") ],
    },
    "a3" : {
      "subject" : u"答え:じゃあ、とりあえず、MITライセンスか修正BSDライセンスでいいよ",
      "options" : [ (u"トップへ", "/") ],
      "links"   : [ (u"Open Source Initiative OSI - The BSD License(原文)",
                      "http://opensource.org/licenses/bsd-license.php"),
                    (u"licenses/new_BSD_license(日本語訳)",
                      "http://sourceforge.jp/projects/opensource/wiki/licenses%2Fnew_BSD_license"),
                    (u"Open Source Initiative OSI - The MIT License(原文)",
                      "http://opensource.org/licenses/mit-license.php"),
                    (u"licenses/MIT_license(日本語訳)",
                      "http://sourceforge.jp/projects/opensource/wiki/licenses%2FMIT_license") ]
    },
  }

class Question(webapp.RequestHandler):
  def get(self):
    page = pages[self.request.get("page")]
    question = page["subject"]
    opts = page["options"]
    links = page["links"] if page.has_key("links") else []

    self.response.out.write(u"<h1>%s</h1>" % question
                          + u"<ul>")
    for option in opts:
      self.response.out.write(u"<li><a href='%s'>%s</a></li>" %
                               (option[1], option[0]))
    self.response.out.write(u"</ul>")

    if len(links) > 0:
      self.response.out.write(u"<h2>参考リンク:</h2>"
                              +"<ul>")
    for link in links:
      self.response.out.write(u"<li><a href='%s'>%s</a></li>" %
                               (link[1], link[0]))

class About(webapp.RequestHandler):
  def get(self):
    self.response.out.write(
        u"""
        <ul>
          <li>作者 - Author : snaka &lt;snaka.gml@gmail.com&gt;</li>
          <li>日記 - blog   : <a href="http://d.hatena.ne.jp/snaka72/">今日もスミマセン。</a></li>
          <li>元ネタ - inspired from : <a href="http://www.rubyist.net/~matz/?date=20030608#p02">Matzにっき(2003-06-08)</a></li>
        </ul>
        """)

app = webapp.WSGIApplication([
                              ('/', TopPage),
                              ('/question', Question),
                              ('/about', About),
                             ],
                             debug=True)

def main():
  run_wsgi_app(app)

if __name__ == "__main__":
  main()