Commits

Shinya Okano committed 1a84959

tokky.appengine.coreドキュメントを更新

  • Participants
  • Parent commits 6708620

Comments (0)

Files changed (14)

tokky.appengine.core/_sources/application.txt

-======================
-プロジェクトを作成する
-======================
-
-GAE用のプロジェクトを作成します。
-
-新規にプロジェクトを作成する
-================================
-
-新規プロジェクトの作成はnew_project_templateディレクトリをコピーして使用します。
-ここでは `engineapp` という名前のプロジェクトを作成するので、コピーしたディレクトリの名前を変更します。
-
-.. image:: static/rename_project_template.png
-
-GAEの開発サーバを起動して、確認してみます。
-
-::
-
-   $ cd engineapp
-   $ dev_appserver.py .
-
-起動したアドレスをウェブブラウザで開いてみてください。
-何も設定していない状態では `404 Not Found` と表示されるはずです。
-
-.. note::
-
-   プロジェクトディレクトリのパスに日本語(マルチバイト文字)が含まれていると、テンプレートファイルの読み込み等でエラーになる可能性があります。
-
-テンプレート使ってページを表示する
-==================================
-
-`Django テンプレート`_ を使ってページを表示してみましょう。
-
-engineapp/apps ディレクトリ内に ``toppage.py`` というファイルを以下の内容で作成します。
-
-.. code-block:: python
-
-   from core import wsgi as core_wsgi
-   from core.generics import TemplatePageHandler
-
-   import config
-
-
-   # テンプレートファイルを使ってページを表示するクラスの定義
-   class TopPageHandler(TemplatePageHandler):
-       template_name = 'static/index.html'
-
-
-   # このトップページアプリケーションのエントリーポイント(WSGIアプリケーションを返す関数)
-   def application_factory():
-       # core_wsgi.WSGIApplicationでアプリケーションを作成して返します
-       application = core_wsgi.WSGIApplication([
-           (r'/', TopPageHandler),
-       ], debug=config.DEBUG)
-       return application
-
-ソースコード中で指定した ``static/index.html`` テンプレートファイルを作成します。
-
-.. code-block:: html
-
-   <html>
-   <head>
-     <title>hello world!</title>
-   </head>
-   <body>
-     <h1>hello world!</h1>
-   </body>
-   </html>
-
-engineapp ディレクトリ内の ``config.py`` というファイルをエディタで開き、 ``APPS`` にマッチするURLとアプリケーションを返す関数名をタプルで追記します。
-
-.. code-block:: python
-
-   # installed apps
-   APPS = [
-       (r'^/_ah/warmup$', 'apps.warmup.handlers.application_factory'),  # ウォームアップ用アプリケーション
-       (r'^/$', 'apps.toppage.application_factory'),  # 追記
-   ]
-
-``APPS`` のリスト内には、正規表現とアプリケーションハンドラ(WSGIアプリケーション)のインポート名をタプルで記述しています。
-tokky.appengine.core では、このリスト内のタプルを順に参照し、URLに最初にマッチしたアプリケーションハンドラをロードして実行します。
-アプリケーションハンドラはURLにマッチしない限り、ロードされません。これは、スピンアップ時のパフォーマンス向上と、メモリ使用量の節約にも貢献しています。
-
-これでトップページが有効になりました。
-保存して、ウェブブラウザでもう一度開いてみると、 `hello world!` と表示されます。
-
-.. image:: static/helloworld.png
-
-.. _`Django テンプレート`: https://docs.djangoproject.com/en/dev/topics/templates/

tokky.appengine.core/_sources/index.txt

    :maxdepth: 2
 
    intro
-   application
+   new_project
+   unittest
+   shell
    changes
 
 索引

tokky.appengine.core/_sources/intro.txt

 
 * 機能単位のURLルーティング
 * 設定によるアプリケーションの自動ロード
-* unittestの実行
+* ユニットテストの実行
 * Python2.7ランタイム用の設定
 
 .. _`GoogleAppEngine`: http://code.google.com/appengine/

tokky.appengine.core/_sources/new_project.txt

+==================
+プロジェクトの作成
+==================
+
+GAE用のプロジェクトを作成します。
+
+新規にプロジェクトを作成する
+============================
+
+新規プロジェクトの作成はnew_project_templateディレクトリをコピーして使用します。
+ここでは `engineapp` という名前のプロジェクトを作成するので、コピーしたディレクトリの名前を変更します。
+
+.. image:: static/rename_project_template.png
+
+GAEの開発サーバを起動して、確認してみます。
+
+.. code-block:: bash
+
+   $ cd engineapp
+   $ dev_appserver.py .
+
+起動したアドレスをウェブブラウザで開いてみてください。
+何も設定していない状態では `404 Not Found` と表示されるはずです。
+
+.. note::
+
+   プロジェクトディレクトリのパスに日本語(マルチバイト文字)が含まれていると、テンプレートファイルの読み込み等でエラーになる可能性があります。
+
+テンプレート使ってページを表示する
+==================================
+
+`Django テンプレート`_ を使ってページを表示してみましょう。
+
+engineapp/apps ディレクトリ内に ``toppage.py`` というファイルを以下の内容で作成します。
+
+.. code-block:: python
+
+   from core import wsgi as core_wsgi
+   from core.generics import TemplatePageHandler
+
+   import config
+
+
+   # テンプレートファイルを使ってページを表示するクラスの定義
+   class TopPageHandler(TemplatePageHandler):
+       template_name = 'static/index.html'
+
+
+   # このトップページアプリケーションのエントリーポイント(WSGIアプリケーションを返す関数)
+   def application_factory():
+       # core_wsgi.WSGIApplicationでアプリケーションを作成して返します
+       application = core_wsgi.WSGIApplication([
+           (r'/', TopPageHandler),
+       ], debug=config.DEBUG)
+       return application
+
+ソースコード中で指定した ``static/index.html`` テンプレートファイルを作成します。
+
+.. code-block:: html
+
+   <html>
+   <head>
+     <title>hello world!</title>
+   </head>
+   <body>
+     <h1>hello world!</h1>
+   </body>
+   </html>
+
+engineapp ディレクトリ内の ``config.py`` というファイルをエディタで開き、 ``APPS`` にマッチするURLとアプリケーションを返す関数名をタプルで追記します。
+
+.. code-block:: python
+
+   # installed apps
+   APPS = [
+       (r'^/_ah/warmup$', 'apps.warmup.handlers.application_factory'),  # ウォームアップ用アプリケーション
+       (r'^/$', 'apps.toppage.application_factory'),  # 追記
+   ]
+
+tokky.appengine.core では、 ``APPS`` リスト内のタプルを順に参照し、URLに最初にマッチしたアプリケーションファクトリーをロードして実行します。アプリケーションファクトリーはWSGIアプリケーションを返します。
+アプリケーションファクトリーはURLにマッチしない限り、ロードされません。これは、スピンアップ時のパフォーマンス向上と、メモリ使用量の節約にも貢献しています。
+
+これでトップページが有効になりました。
+保存して、ウェブブラウザでもう一度開いてみると、 `hello world!` と表示されます。
+
+.. image:: static/helloworld.png
+
+.. _`Django テンプレート`: https://docs.djangoproject.com/en/dev/topics/templates/

tokky.appengine.core/_sources/shell.txt

+======================
+開発用対話シェルの実行
+======================
+
+ローカル環境で対話シェルを使用するためには、 ``shell.py`` スクリプトを実行します。IPythonにも対応しています。
+
+.. code-block:: bash
+
+   $ python shell.py
+
+.. note::
+
+   shell.pyスクリプトは、dev_appserverと同じデータベースファイルを使用するため、dev_appserverを起動した状態では対話シェル上でのデータの変更はdev_appserver側に反映されません。

tokky.appengine.core/_sources/unittest.txt

+==========================
+ユニットテストの作成と実行
+==========================
+
+ユニットテストの実行
+====================
+
+ユニットテストを実行するためには ``unittests.py`` スクリプトを実行します。
+
+.. code-block:: bash
+
+   $ python unittests.py
+   test_ok (apps.warmup.tests.WarmupHandlerTest) ... ok
+   
+   ----------------------------------------------------------------------
+   Ran 1 test in 0.610s
+   
+   OK
+
+warmupアプリケーションには、 ``tests.py`` という名前のモジュールに ``unittests.HandlerTestCase`` クラスを継承したユニットテストが書かれています。HandlerTestCaseクラスは継承ツリーにunittestモジュールのTestCaseクラスを含んでいます。
+
+``unittests.py`` はTestCaseクラスを継承したユニットテストを見つけて実行します。
+
+また、引数にディレクトリパスを指定することで、任意のディレクトリ以下のテストのみを実行することができます。
+
+.. code-block:: bash
+
+   $ python unittests.py apps/warmup
+
+.. note::
+
+   tokky.appengine.core では、テスト対象のユニットテストを見つけるためにunittest2(Python2.7では標準モジュールのunittest)モジュールのdiscover関数を使用しています。
+
+ユニットテストの作成
+====================
+
+GAEのDatastoreやMemcacheなどのサービスを使用するテストは、 ``unittests`` モジュールのクラスを継承して実装します。
+
+TestbedTestCase
+---------------
+
+``unittest.TestCase`` クラスを継承しています。 ``setUp`` メソッド内でTestbed(``google.appengine.ext.testbed``)を有効にしています。
+
+HandlerTestCase
+---------------
+
+``TestBedTestCase`` クラスを継承しています。

tokky.appengine.core/application.html

-
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
-    <title>プロジェクトを作成する &mdash; tokky.appengine.core 0.1dev documentation</title>
-    
-    <link rel="stylesheet" href="_static/default.css" type="text/css" />
-    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    
-    <script type="text/javascript">
-      var DOCUMENTATION_OPTIONS = {
-        URL_ROOT:    '',
-        VERSION:     '0.1dev',
-        COLLAPSE_INDEX: false,
-        FILE_SUFFIX: '.html',
-        HAS_SOURCE:  true
-      };
-    </script>
-    <script type="text/javascript" src="_static/jquery.js"></script>
-    <script type="text/javascript" src="_static/underscore.js"></script>
-    <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="_static/translations.js"></script>
-    <link rel="top" title="tokky.appengine.core 0.1dev documentation" href="index.html" />
-    <link rel="next" title="変更履歴" href="changes.html" />
-    <link rel="prev" title="はじめに" href="intro.html" /> 
-  </head>
-  <body>
-    <div class="related">
-      <h3>ナビゲーション</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="総合索引"
-             accesskey="I">索引</a></li>
-        <li class="right" >
-          <a href="changes.html" title="変更履歴"
-             accesskey="N">次へ</a> |</li>
-        <li class="right" >
-          <a href="intro.html" title="はじめに"
-             accesskey="P">前へ</a> |</li>
-        <li><a href="index.html">tokky.appengine.core 0.1dev documentation</a> &raquo;</li> 
-      </ul>
-    </div>  
-
-    <div class="document">
-      <div class="documentwrapper">
-        <div class="bodywrapper">
-          <div class="body">
-            
-  <div class="section" id="id1">
-<h1>プロジェクトを作成する<a class="headerlink" href="#id1" title="このヘッドラインへのパーマリンク">¶</a></h1>
-<p>GAE用のプロジェクトを作成します。</p>
-<div class="section" id="id2">
-<h2>新規にプロジェクトを作成する<a class="headerlink" href="#id2" title="このヘッドラインへのパーマリンク">¶</a></h2>
-<p>新規プロジェクトの作成はnew_project_templateディレクトリをコピーして使用します。
-ここでは <cite>engineapp</cite> という名前のプロジェクトを作成するので、コピーしたディレクトリの名前を変更します。</p>
-<img alt="_images/rename_project_template.png" src="_images/rename_project_template.png" />
-<p>GAEの開発サーバを起動して、確認してみます。</p>
-<div class="highlight-python"><pre>$ cd engineapp
-$ dev_appserver.py .</pre>
-</div>
-<p>起動したアドレスをウェブブラウザで開いてみてください。
-何も設定していない状態では <cite>404 Not Found</cite> と表示されるはずです。</p>
-<div class="admonition note">
-<p class="first admonition-title">ノート</p>
-<p class="last">プロジェクトディレクトリのパスに日本語(マルチバイト文字)が含まれていると、テンプレートファイルの読み込み等でエラーになる可能性があります。</p>
-</div>
-</div>
-<div class="section" id="id3">
-<h2>テンプレート使ってページを表示する<a class="headerlink" href="#id3" title="このヘッドラインへのパーマリンク">¶</a></h2>
-<p><a class="reference external" href="https://docs.djangoproject.com/en/dev/topics/templates/">Django テンプレート</a> を使ってページを表示してみましょう。</p>
-<p>engineapp/apps ディレクトリ内に <tt class="docutils literal"><span class="pre">toppage.py</span></tt> というファイルを以下の内容で作成します。</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">core</span> <span class="kn">import</span> <span class="n">wsgi</span> <span class="k">as</span> <span class="n">core_wsgi</span>
-<span class="kn">from</span> <span class="nn">core.generics</span> <span class="kn">import</span> <span class="n">TemplatePageHandler</span>
-
-<span class="kn">import</span> <span class="nn">config</span>
-
-
-<span class="c"># テンプレートファイルを使ってページを表示するクラスの定義</span>
-<span class="k">class</span> <span class="nc">TopPageHandler</span><span class="p">(</span><span class="n">TemplatePageHandler</span><span class="p">):</span>
-    <span class="n">template_name</span> <span class="o">=</span> <span class="s">&#39;static/index.html&#39;</span>
-
-
-<span class="c"># このトップページアプリケーションのエントリーポイント(WSGIアプリケーションを返す関数)</span>
-<span class="k">def</span> <span class="nf">application_factory</span><span class="p">():</span>
-    <span class="c"># core_wsgi.WSGIApplicationでアプリケーションを作成して返します</span>
-    <span class="n">application</span> <span class="o">=</span> <span class="n">core_wsgi</span><span class="o">.</span><span class="n">WSGIApplication</span><span class="p">([</span>
-        <span class="p">(</span><span class="s">r&#39;/&#39;</span><span class="p">,</span> <span class="n">TopPageHandler</span><span class="p">),</span>
-    <span class="p">],</span> <span class="n">debug</span><span class="o">=</span><span class="n">config</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>
-    <span class="k">return</span> <span class="n">application</span>
-</pre></div>
-</div>
-<p>ソースコード中で指定した <tt class="docutils literal"><span class="pre">static/index.html</span></tt> テンプレートファイルを作成します。</p>
-<div class="highlight-html"><div class="highlight"><pre><span class="nt">&lt;html&gt;</span>
-<span class="nt">&lt;head&gt;</span>
-  <span class="nt">&lt;title&gt;</span>hello world!<span class="nt">&lt;/title&gt;</span>
-<span class="nt">&lt;/head&gt;</span>
-<span class="nt">&lt;body&gt;</span>
-  <span class="nt">&lt;h1&gt;</span>hello world!<span class="nt">&lt;/h1&gt;</span>
-<span class="nt">&lt;/body&gt;</span>
-<span class="nt">&lt;/html&gt;</span>
-</pre></div>
-</div>
-<p>engineapp ディレクトリ内の <tt class="docutils literal"><span class="pre">config.py</span></tt> というファイルをエディタで開き、 <tt class="docutils literal"><span class="pre">APPS</span></tt> にマッチするURLとアプリケーションを返す関数名をタプルで追記します。</p>
-<div class="highlight-python"><div class="highlight"><pre><span class="c"># installed apps</span>
-<span class="n">APPS</span> <span class="o">=</span> <span class="p">[</span>
-    <span class="p">(</span><span class="s">r&#39;^/_ah/warmup$&#39;</span><span class="p">,</span> <span class="s">&#39;apps.warmup.handlers.application_factory&#39;</span><span class="p">),</span>  <span class="c"># ウォームアップ用アプリケーション</span>
-    <span class="p">(</span><span class="s">r&#39;^/$&#39;</span><span class="p">,</span> <span class="s">&#39;apps.toppage.application_factory&#39;</span><span class="p">),</span>  <span class="c"># 追記</span>
-<span class="p">]</span>
-</pre></div>
-</div>
-<p><tt class="docutils literal"><span class="pre">APPS</span></tt> のリスト内には、正規表現とアプリケーションハンドラ(WSGIアプリケーション)のインポート名をタプルで記述しています。
-tokky.appengine.core では、このリスト内のタプルを順に参照し、URLに最初にマッチしたアプリケーションハンドラをロードして実行します。
-アプリケーションハンドラはURLにマッチしない限り、ロードされません。これは、スピンアップ時のパフォーマンス向上と、メモリ使用量の節約にも貢献しています。</p>
-<p>これでトップページが有効になりました。
-保存して、ウェブブラウザでもう一度開いてみると、 <cite>hello world!</cite> と表示されます。</p>
-<img alt="_images/helloworld.png" src="_images/helloworld.png" />
-</div>
-</div>
-
-
-          </div>
-        </div>
-      </div>
-      <div class="sphinxsidebar">
-        <div class="sphinxsidebarwrapper">
-  <h3><a href="index.html">目次</a></h3>
-  <ul>
-<li><a class="reference internal" href="#">プロジェクトを作成する</a><ul>
-<li><a class="reference internal" href="#id2">新規にプロジェクトを作成する</a></li>
-<li><a class="reference internal" href="#id3">テンプレート使ってページを表示する</a></li>
-</ul>
-</li>
-</ul>
-
-  <h4>前のトピックへ</h4>
-  <p class="topless"><a href="intro.html"
-                        title="前の章へ">はじめに</a></p>
-  <h4>次のトピックへ</h4>
-  <p class="topless"><a href="changes.html"
-                        title="次の章へ">変更履歴</a></p>
-  <h3>このページ</h3>
-  <ul class="this-page-menu">
-    <li><a href="_sources/application.txt"
-           rel="nofollow">ソースコードを表示</a></li>
-  </ul>
-<div id="searchbox" style="display: none">
-  <h3>クイック検索</h3>
-    <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
-      <input type="submit" value="検索" />
-      <input type="hidden" name="check_keywords" value="yes" />
-      <input type="hidden" name="area" value="default" />
-    </form>
-    <p class="searchtip" style="font-size: 90%">
-    モジュール、クラス、または関数名を入力してください
-    </p>
-</div>
-<script type="text/javascript">$('#searchbox').show(0);</script>
-        </div>
-      </div>
-      <div class="clearer"></div>
-    </div>
-    <div class="related">
-      <h3>ナビゲーション</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="総合索引"
-             >索引</a></li>
-        <li class="right" >
-          <a href="changes.html" title="変更履歴"
-             >次へ</a> |</li>
-        <li class="right" >
-          <a href="intro.html" title="はじめに"
-             >前へ</a> |</li>
-        <li><a href="index.html">tokky.appengine.core 0.1dev documentation</a> &raquo;</li> 
-      </ul>
-    </div>
-    <div class="footer">
-        &copy; Copyright 2012, Shinya Okano.
-      このドキュメントは <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3 で生成しました。
-    </div>
-  </body>
-</html>

tokky.appengine.core/changes.html

     <script type="text/javascript" src="_static/doctools.js"></script>
     <script type="text/javascript" src="_static/translations.js"></script>
     <link rel="top" title="tokky.appengine.core 0.1dev documentation" href="index.html" />
-    <link rel="prev" title="プロジェクトを作成する" href="application.html" /> 
+    <link rel="prev" title="開発用対話シェルの実行" href="shell.html" /> 
   </head>
   <body>
     <div class="related">
           <a href="genindex.html" title="総合索引"
              accesskey="I">索引</a></li>
         <li class="right" >
-          <a href="application.html" title="プロジェクトを作成する"
+          <a href="shell.html" title="開発用対話シェルの実行"
              accesskey="P">前へ</a> |</li>
         <li><a href="index.html">tokky.appengine.core 0.1dev documentation</a> &raquo;</li> 
       </ul>
 </ul>
 
   <h4>前のトピックへ</h4>
-  <p class="topless"><a href="application.html"
-                        title="前の章へ">プロジェクトを作成する</a></p>
+  <p class="topless"><a href="shell.html"
+                        title="前の章へ">開発用対話シェルの実行</a></p>
   <h3>このページ</h3>
   <ul class="this-page-menu">
     <li><a href="_sources/changes.txt"
           <a href="genindex.html" title="総合索引"
              >索引</a></li>
         <li class="right" >
-          <a href="application.html" title="プロジェクトを作成する"
+          <a href="shell.html" title="開発用対話シェルの実行"
              >前へ</a> |</li>
         <li><a href="index.html">tokky.appengine.core 0.1dev documentation</a> &raquo;</li> 
       </ul>

tokky.appengine.core/index.html

 <li class="toctree-l2"><a class="reference internal" href="intro.html#id4">ライセンス</a></li>
 </ul>
 </li>
-<li class="toctree-l1"><a class="reference internal" href="application.html">プロジェクトを作成する</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="application.html#id2">新規にプロジェクトを作成する</a></li>
-<li class="toctree-l2"><a class="reference internal" href="application.html#id3">テンプレート使ってページを表示する</a></li>
+<li class="toctree-l1"><a class="reference internal" href="new_project.html">プロジェクトの作成</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="new_project.html#id2">新規にプロジェクトを作成する</a></li>
+<li class="toctree-l2"><a class="reference internal" href="new_project.html#id3">テンプレート使ってページを表示する</a></li>
 </ul>
 </li>
+<li class="toctree-l1"><a class="reference internal" href="unittest.html">ユニットテストの作成と実行</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="unittest.html#id2">ユニットテストの実行</a></li>
+<li class="toctree-l2"><a class="reference internal" href="unittest.html#id3">ユニットテストの作成</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="shell.html">開発用対話シェルの実行</a></li>
 <li class="toctree-l1"><a class="reference internal" href="changes.html">変更履歴</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="changes.html#id2">2012-03-18</a></li>
 </ul>

tokky.appengine.core/intro.html

     <script type="text/javascript" src="_static/doctools.js"></script>
     <script type="text/javascript" src="_static/translations.js"></script>
     <link rel="top" title="tokky.appengine.core 0.1dev documentation" href="index.html" />
-    <link rel="next" title="プロジェクト作成する" href="application.html" />
+    <link rel="next" title="プロジェクト作成" href="new_project.html" />
     <link rel="prev" title="tokky.appengine.core ドキュメント" href="index.html" /> 
   </head>
   <body>
           <a href="genindex.html" title="総合索引"
              accesskey="I">索引</a></li>
         <li class="right" >
-          <a href="application.html" title="プロジェクト作成する"
+          <a href="new_project.html" title="プロジェクト作成"
              accesskey="N">次へ</a> |</li>
         <li class="right" >
           <a href="index.html" title="tokky.appengine.core ドキュメント"
 <ul class="simple">
 <li>機能単位のURLルーティング</li>
 <li>設定によるアプリケーションの自動ロード</li>
-<li>unittestの実行</li>
+<li>ユニットテストの実行</li>
 <li>Python2.7ランタイム用の設定</li>
 </ul>
 </div>
   <p class="topless"><a href="index.html"
                         title="前の章へ">tokky.appengine.core ドキュメント</a></p>
   <h4>次のトピックへ</h4>
-  <p class="topless"><a href="application.html"
-                        title="次の章へ">プロジェクトを作成する</a></p>
+  <p class="topless"><a href="new_project.html"
+                        title="次の章へ">プロジェクトの作成</a></p>
   <h3>このページ</h3>
   <ul class="this-page-menu">
     <li><a href="_sources/intro.txt"
           <a href="genindex.html" title="総合索引"
              >索引</a></li>
         <li class="right" >
-          <a href="application.html" title="プロジェクト作成する"
+          <a href="new_project.html" title="プロジェクト作成"
              >次へ</a> |</li>
         <li class="right" >
           <a href="index.html" title="tokky.appengine.core ドキュメント"

tokky.appengine.core/new_project.html

+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>プロジェクトの作成 &mdash; tokky.appengine.core 0.1dev documentation</title>
+    
+    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '',
+        VERSION:     '0.1dev',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <script type="text/javascript" src="_static/translations.js"></script>
+    <link rel="top" title="tokky.appengine.core 0.1dev documentation" href="index.html" />
+    <link rel="next" title="ユニットテストの作成と実行" href="unittest.html" />
+    <link rel="prev" title="はじめに" href="intro.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>ナビゲーション</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="総合索引"
+             accesskey="I">索引</a></li>
+        <li class="right" >
+          <a href="unittest.html" title="ユニットテストの作成と実行"
+             accesskey="N">次へ</a> |</li>
+        <li class="right" >
+          <a href="intro.html" title="はじめに"
+             accesskey="P">前へ</a> |</li>
+        <li><a href="index.html">tokky.appengine.core 0.1dev documentation</a> &raquo;</li> 
+      </ul>
+    </div>  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="id1">
+<h1>プロジェクトの作成<a class="headerlink" href="#id1" title="このヘッドラインへのパーマリンク">¶</a></h1>
+<p>GAE用のプロジェクトを作成します。</p>
+<div class="section" id="id2">
+<h2>新規にプロジェクトを作成する<a class="headerlink" href="#id2" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>新規プロジェクトの作成はnew_project_templateディレクトリをコピーして使用します。
+ここでは <cite>engineapp</cite> という名前のプロジェクトを作成するので、コピーしたディレクトリの名前を変更します。</p>
+<img alt="_images/rename_project_template.png" src="_images/rename_project_template.png" />
+<p>GAEの開発サーバを起動して、確認してみます。</p>
+<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span><span class="nb">cd </span>engineapp
+<span class="nv">$ </span>dev_appserver.py .
+</pre></div>
+</div>
+<p>起動したアドレスをウェブブラウザで開いてみてください。
+何も設定していない状態では <cite>404 Not Found</cite> と表示されるはずです。</p>
+<div class="admonition note">
+<p class="first admonition-title">ノート</p>
+<p class="last">プロジェクトディレクトリのパスに日本語(マルチバイト文字)が含まれていると、テンプレートファイルの読み込み等でエラーになる可能性があります。</p>
+</div>
+</div>
+<div class="section" id="id3">
+<h2>テンプレート使ってページを表示する<a class="headerlink" href="#id3" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p><a class="reference external" href="https://docs.djangoproject.com/en/dev/topics/templates/">Django テンプレート</a> を使ってページを表示してみましょう。</p>
+<p>engineapp/apps ディレクトリ内に <tt class="docutils literal"><span class="pre">toppage.py</span></tt> というファイルを以下の内容で作成します。</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">core</span> <span class="kn">import</span> <span class="n">wsgi</span> <span class="k">as</span> <span class="n">core_wsgi</span>
+<span class="kn">from</span> <span class="nn">core.generics</span> <span class="kn">import</span> <span class="n">TemplatePageHandler</span>
+
+<span class="kn">import</span> <span class="nn">config</span>
+
+
+<span class="c"># テンプレートファイルを使ってページを表示するクラスの定義</span>
+<span class="k">class</span> <span class="nc">TopPageHandler</span><span class="p">(</span><span class="n">TemplatePageHandler</span><span class="p">):</span>
+    <span class="n">template_name</span> <span class="o">=</span> <span class="s">&#39;static/index.html&#39;</span>
+
+
+<span class="c"># このトップページアプリケーションのエントリーポイント(WSGIアプリケーションを返す関数)</span>
+<span class="k">def</span> <span class="nf">application_factory</span><span class="p">():</span>
+    <span class="c"># core_wsgi.WSGIApplicationでアプリケーションを作成して返します</span>
+    <span class="n">application</span> <span class="o">=</span> <span class="n">core_wsgi</span><span class="o">.</span><span class="n">WSGIApplication</span><span class="p">([</span>
+        <span class="p">(</span><span class="s">r&#39;/&#39;</span><span class="p">,</span> <span class="n">TopPageHandler</span><span class="p">),</span>
+    <span class="p">],</span> <span class="n">debug</span><span class="o">=</span><span class="n">config</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">application</span>
+</pre></div>
+</div>
+<p>ソースコード中で指定した <tt class="docutils literal"><span class="pre">static/index.html</span></tt> テンプレートファイルを作成します。</p>
+<div class="highlight-html"><div class="highlight"><pre><span class="nt">&lt;html&gt;</span>
+<span class="nt">&lt;head&gt;</span>
+  <span class="nt">&lt;title&gt;</span>hello world!<span class="nt">&lt;/title&gt;</span>
+<span class="nt">&lt;/head&gt;</span>
+<span class="nt">&lt;body&gt;</span>
+  <span class="nt">&lt;h1&gt;</span>hello world!<span class="nt">&lt;/h1&gt;</span>
+<span class="nt">&lt;/body&gt;</span>
+<span class="nt">&lt;/html&gt;</span>
+</pre></div>
+</div>
+<p>engineapp ディレクトリ内の <tt class="docutils literal"><span class="pre">config.py</span></tt> というファイルをエディタで開き、 <tt class="docutils literal"><span class="pre">APPS</span></tt> にマッチするURLとアプリケーションを返す関数名をタプルで追記します。</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="c"># installed apps</span>
+<span class="n">APPS</span> <span class="o">=</span> <span class="p">[</span>
+    <span class="p">(</span><span class="s">r&#39;^/_ah/warmup$&#39;</span><span class="p">,</span> <span class="s">&#39;apps.warmup.handlers.application_factory&#39;</span><span class="p">),</span>  <span class="c"># ウォームアップ用アプリケーション</span>
+    <span class="p">(</span><span class="s">r&#39;^/$&#39;</span><span class="p">,</span> <span class="s">&#39;apps.toppage.application_factory&#39;</span><span class="p">),</span>  <span class="c"># 追記</span>
+<span class="p">]</span>
+</pre></div>
+</div>
+<p>tokky.appengine.core では、 <tt class="docutils literal"><span class="pre">APPS</span></tt> リスト内のタプルを順に参照し、URLに最初にマッチしたアプリケーションファクトリーをロードして実行します。アプリケーションファクトリーはWSGIアプリケーションを返します。
+アプリケーションファクトリーはURLにマッチしない限り、ロードされません。これは、スピンアップ時のパフォーマンス向上と、メモリ使用量の節約にも貢献しています。</p>
+<p>これでトップページが有効になりました。
+保存して、ウェブブラウザでもう一度開いてみると、 <cite>hello world!</cite> と表示されます。</p>
+<img alt="_images/helloworld.png" src="_images/helloworld.png" />
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="index.html">目次</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">プロジェクトの作成</a><ul>
+<li><a class="reference internal" href="#id2">新規にプロジェクトを作成する</a></li>
+<li><a class="reference internal" href="#id3">テンプレート使ってページを表示する</a></li>
+</ul>
+</li>
+</ul>
+
+  <h4>前のトピックへ</h4>
+  <p class="topless"><a href="intro.html"
+                        title="前の章へ">はじめに</a></p>
+  <h4>次のトピックへ</h4>
+  <p class="topless"><a href="unittest.html"
+                        title="次の章へ">ユニットテストの作成と実行</a></p>
+  <h3>このページ</h3>
+  <ul class="this-page-menu">
+    <li><a href="_sources/new_project.txt"
+           rel="nofollow">ソースコードを表示</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>クイック検索</h3>
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="検索" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    モジュール、クラス、または関数名を入力してください
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>ナビゲーション</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="総合索引"
+             >索引</a></li>
+        <li class="right" >
+          <a href="unittest.html" title="ユニットテストの作成と実行"
+             >次へ</a> |</li>
+        <li class="right" >
+          <a href="intro.html" title="はじめに"
+             >前へ</a> |</li>
+        <li><a href="index.html">tokky.appengine.core 0.1dev documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2012, Shinya Okano.
+      このドキュメントは <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3 で生成しました。
+    </div>
+  </body>
+</html>

tokky.appengine.core/searchindex.js

-Search.setIndex({objects:{},terms:{"\u8868\u793a":[0,3],"\u30b9\u30d4\u30f3\u30a2\u30c3\u30d7":0,"\u30a6\u30a9\u30fc\u30e0\u30a2\u30c3\u30d7":0,"\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8":3,"\u308c\u307e\u305b":0,"_wsgi":0,".appengine":[0,1,3],"\u3084\u3081":2,">hello":0,"\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af":1,"\u65e5\u672c\u8a9e":0,"\u8ffd\u52a0":2,"\u30e9\u30f3\u30bf\u30a4\u30e0":[1,2],"/tokibito":1,"\u306e\u3067":0,"\u30a2\u30c9\u30ec\u30b9":0,"\u3067\u304d\u308b":2,"([":0,".toppage":0,":\n":0,"\u8fd4\u3059":0,"\u8fd4\u3057":0,"\n ":0," installed":0,"\u308c\u308b":0,"\u3067\u3059":[0,1],"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea":0," as":0,"\u307f\u308b":0,"\u306a\u308a":0,"\u306a\u308b":0,Not:0," [":0,"\u307f\u307e\u3057\u3087":0,"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8":[0,3],"\u30e9\u30a4\u30bb\u30f3\u30b9":[3,1]," core":0,"  ":0," TopPageHandler":0,"return":0," '":0,"\u7bc0\u7d04":0,".handlers":0,"\u8ca2\u732e":0," .":0,Django:0,"()":0,"\u30af\u30e9\u30b9":0,"\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30cf\u30f3\u30c9\u30e9":0," import":0,"\u8a8d\u8a3c":2,"\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b3\u30d4\u30fc":2," config":0," =":0,"\u3068\u3057\u3066":1,".DEBUG":0,"\u5927\u304d\u3081":1,"\u307e\u305b":1,"'\n":0,APPS:0,".WSGIApplication":0,debug:0," world":0,"\n#":0,"\u697d\u304b":1," bitbucket":1,"\u30d1\u30b9":0,".generics":0,"# ":0,"\nfrom":0,"\u30b3\u30f3\u30c6\u30f3\u30c4":3,"\u30b3\u30d4\u30fc":0,".py":0,"\u30d5\u30a1\u30a4\u30eb":[0,2],"\u30bf\u30d7\u30eb":0,"\u4f7f\u7528":[0,2],New:1,"\u5c65\u6b74":[3,2],"\u65b0\u898f":[0,3],":/":1,"'^":0,"\u6a5f\u80fd":1," wsgi":0,"\u4e00\u5ea6":0,"\u5c11\u3057":1,"\u7ba1\u7406":1,"\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9":[0,1,3]," (r":0,TopPageHandler:0,"\u8aad\u307f\u8fbc\u307f":0,"\u8ffd\u8a18":0," cd":0,HTML:2,template:0,"new":0,"\u6700\u521d":0,"\u542b\u307e":[0,1],GAE:[0,1],body:0,core:0,engineapp:0,tokky:[0,1,3],"\u8868\u73fe":0,"_appserver":0,"\u30c7\u30a3\u30ec\u30af\u30c8\u30ea":0,"\u3057\u308c":1,"\u3042\u308a":0,"\u6307\u5b9a":0,"\u9650\u308a":0,"\u306f\u305a":0," application":0,"\u304b\u3051\u308b":2,"\u307f\u3066":0,"\u3053\u3053\u3067":0,"\u53c2\u7167":0,"\u305f\u3081":2,"\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0":1,"\u3067\u3082\u3046":0," engineapp":0,"   ":0,"\u63d0\u4f9b":1,title:0,"_name":0,"\u30e2\u30b8\u30e5\u30fc\u30eb":[3,2],"\u53ef\u80fd":0,"\u5185\u5bb9":0,"\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3":[0,1],"\u306a\u3044":0,"],":0,"\u5411\u4e0a":0,"  <":0,"):":0," License":1,"\u4f5c\u6210":[0,3],"\u30de\u30c3\u30c1":0,".core":[0,1,3],h1:0,"\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8":0,"\u4fdd\u5b58":0,"(TemplatePageHandler":0,"\u95a2\u6570":0,"),":0,webapp:1,"/warmup":0,"import":0,"!<":0," BSD":1,"\u4ee5\u964d":1,"\u78ba\u8a8d":0,from:0,"/tokky":1,"\u4f7f\u3063":[0,3],"\u30e1\u30e2\u30ea":0,apps:0,"\u5909\u66f4":[0,2,3],"\u3068\u3044\u3046":0,">\n":0,")\n":0,"\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6":0,https:1," Found":0,"\u30aa\u30ea\u30b8\u30ca\u30eb":1,"\u306f\u3058\u3081":[3,1],"\u3059\u308b":[0,1,2,3],"\u3044\u308b":[0,1],"\u3001 ":[0,1],"$'":0,"\u30de\u30eb\u30c1\u30d0\u30a4\u30c8":0,"\u5b9f\u884c":[0,1],"\u3053\u306e":0,"\u4fbf\u5229":1,"\u30d9\u30fc\u30b9":1,"\u6709\u52b9":0,"\u306a\u3069":1,"\u4ee5\u4e0b":0,"\u74b0\u5883":2,"\u3068\u3057":1,dev:0,".warmup":0,"\u8d77\u52d5":0,"\u3060\u3051":1,"\u691c\u7d22":3,"\u793a\u3059":1,"/index":0,"static":0,"_project":0,def:0,"\u6587\u5b57":0,"\u5b9a\u7fa9":0,WSGI:0,"\u72b6\u614b":0,".application":0,"\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9":0,ah:0,"\u30a8\u30e9\u30fc":0,head:0,"\u3002\n":[0,1],"_factory":0,"/_":0,"_template":0,"\u30c8\u30c3\u30d7\u30da\u30fc\u30b8":0,application:0,"\u5834\u5408":1,"\u958b\u767a":[0,2],"'/":0,"</":0,unittest:1,GoogleAppEngine:1,"\u30ce\u30fc\u30c8":0,"\u4f5c\u308b":1,"')":0,"=config":0,"\u30a8\u30c7\u30a3\u30bf":0,"',":0,"\u5bfe\u5fdc":2,"\u958b\u3044":0,"\u540d\u524d":0,"\nclass":0,"\u5358\u4f4d":1,"\u958b\u304d":0,"\u307e\u3057":0,"\u307e\u3059":[0,1],URL:[0,1],html:0,"\nAPPS":0,"\u30ea\u30b9\u30c8":0,"\n\n":0,"\u3053\u308c":[0,1,3],"\n$":0,".org":1,"\u8a18\u8ff0":0,config:[0,2],"\u30c8\u30c3\u30d7\u30da\u30fc\u30b8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3":0,"\u30b3\u30de\u30f3\u30c9":2,"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8":[0,3],"\n]":0,"\u30ed\u30fc\u30ab\u30eb":2,", '":0,"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb":0," apps":0,"<html":0,",  ":0,".html":0,"\u306b\u3088\u308b":1,toppage:0,"\u3060\u3055\u3044":0,"\u3088\u3046":2,"\u30ea\u30dd\u30b8\u30c8\u30ea":1,"\u8a2d\u5b9a":[0,1],bitbucket:1,Python:[1,2],"\u6b63\u898f":0,"\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af":1,"\u81ea\u52d5":1,"/$":0,"\u672c\u756a":2,"\u30da\u30fc\u30b8":[0,2,3],hello:0,"\u7d22\u5f15":3,"/apps":0,"\u30d9\u30fc\u30b7\u30c3\u30af":2," TemplatePageHandler":0,"\u30a4\u30f3\u30dd\u30fc\u30c8":0,"\u30b5\u30fc\u30d0":0,"\u30ed\u30fc\u30c9":[0,1],scaffold:2,SDK:1},objtypes:{},titles:["\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b","\u306f\u3058\u3081\u306b","\u5909\u66f4\u5c65\u6b74","tokky.appengine.core \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8"],objnames:{},filenames:["application","intro","changes","index"]})
+Search.setIndex({objects:{},terms:{"\u8868\u793a":[0,3],"\u30b9\u30d4\u30f3\u30a2\u30c3\u30d7":3,"\u30a6\u30a9\u30fc\u30e0\u30a2\u30c3\u30d7":3,"\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8":0,"\u53cd\u6620":1,"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8":[0,3],"\u5bfe\u8a71":1,"\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b3\u30d4\u30fc":5,">hello":3,"\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af":4,"\u65e5\u672c\u8a9e":3,"\u8ffd\u52a0":5,"\u30e9\u30f3\u30bf\u30a4\u30e0":[4,5],"/tokibito":4,config:[3,5],"\u5bfe\u8c61":2,"\u306e\u3067":3,"\u30a2\u30c9\u30ec\u30b9":3,"\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8":[0,2,4],"\u3067\u304d\u308b":5,"([":3,".toppage":3,":\n":3,"\u8fd4\u3059":3,"\u8fd4\u3057":3,".HandlerTestCase":2," installed":3,"\u308c\u308b":3,"\u3067\u3059":[3,4],"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea":3," as":3,"\u307f\u308b":3,"\u306a\u308a":3,"\u306a\u308b":3,Not:3," [":3,"\u3067\u304d":2,".core":[0,2,3,4],"\u30e9\u30a4\u30bb\u30f3\u30b9":[0,4]," core":3,"  ":3," TopPageHandler":3,"return":3," '":3,"\u7bc0\u7d04":3,URL:[3,4],"\u8ca2\u732e":3,"--\n":2," .":3,Django:3,"\u542b\u3093":2,"\n$":3,"()":3,"\u30af\u30e9\u30b9":[2,3],".appengine":[0,2,3,4]," import":3,"\u8a8d\u8a3c":5,"\u5c11\u3057":4,"\u3084\u3081":5," config":3," =":3," shell":1,"\u30b9\u30af\u30ea\u30d7\u30c8":[2,1],OK:2,"\u4ee5\u4e0b":[2,3],"\u3068\u3057\u3066":4,".DEBUG":3,"\u5927\u304d\u3081":4,"'\n":3,APPS:3,"--":2,".WSGIApplication":3," python":[2,1],debug:3," world":3,"\u30b3\u30de\u30f3\u30c9":5,"\u697d\u304b":4," bitbucket":4,google:2,"\u7528\u5bfe":[0,1],TestbedTestCase:2,"\u30d1\u30b9":3,".generics":3,"\u7d22\u5f15":0,"# ":3,"\u30c4\u30ea\u30fc":2,"\u30b3\u30f3\u30c6\u30f3\u30c4":0,"\u74b0\u5883":[1,5],".py":[3,2,1],"\u30d5\u30a1\u30a4\u30eb":[3,5],"\u30bf\u30d7\u30eb":3,"\u4f7f\u7528":[3,2,1,5],"\u8d77\u52d5":[3,1],New:4,"\u65b0\u898f":[0,3],":/":4,"\u66f8\u304b":2,"\u6a5f\u80fd":4," wsgi":3,"\u4e00\u5ea6":3,"\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af":4,"\u7ba1\u7406":4,"\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9":[0,3,4]," (r":3,scaffold:5,"\u30c7\u30fc\u30bf":1,"\u30e2\u30b8\u30e5\u30fc\u30eb":[0,2,5]," cd":3,"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb":3,"\u5834\u5408":4,Memcache:2,template:3,TopPageHandler:3,"new":3," BSD":4,"\u542b\u307e":[3,4],"\u72b6\u614b":[3,1],body:3,core:3,engineapp:3,"\u3057\u308c":4,"_appserver":[3,1],"\u30c6\u30b9\u30c8":2,tokky:[0,2,3,4],"\u3042\u308a":3," apps":[2,3],"\u9650\u308a":3,"\u30b5\u30fc\u30d3\u30b9":2,"\u306a\u3069":[2,4]," application":3,"\u304b\u3051\u308b":5,webapp:4,"\u3053\u3053\u3067":3,",  ":3,Datastore:2,"\u305f\u3081":[2,1,5],"\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0":4,"\u3067\u3082\u3046":3," engineapp":3,"   ":3,"\u30d9\u30fc\u30b7\u30c3\u30af":5,"\u30ea\u30b9\u30c8":3,"\u63d0\u4f9b":4,title:3,"\u672c\u756a":5,GoogleAppEngine:4,"\u53ef\u80fd":3,HandlerTestCase:2,".org":4,def:3,"\u7d99\u627f":2,"\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3":[2,3,4],"\u306a\u3044":3,"],":3,"\u5411\u4e0a":3,head:3,"  <":3,"):":3,"\u4f5c\u6210":[0,2,3],"\u30de\u30c3\u30c1":3,"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8":[0,3],h1:3,"\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8":3,"\u4fdd\u5b58":3,") ":2,"(TemplatePageHandler":3,"\u95a2\u6570":[2,3],"),":3,"\ntest":2,"\u30b3\u30d4\u30fc":3,"\u307f\u307e\u3057\u3087":3,"\u6307\u5b9a":[2,3],"!<":3,"\u6700\u521d":3,"\u4ee5\u964d":4,"\u78ba\u8a8d":3,"\u81ea\u52d5":4,from:3,"/tokky":4,"\u30da\u30fc\u30b8":[0,3,5]," \u30e1\u30bd\u30c3\u30c9":2,"\u4f7f\u3063":[0,3],"\u30e1\u30e2\u30ea":3,"\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb":1,apps:[2,3],"\u5909\u66f4":[0,1,5,3],"\u8ffd\u8a18":3,">\n":3,")\n":3,"\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6":3,https:4,"\u5f15\u6570":2,"\u30ed\u30fc\u30ab\u30eb":[1,5]," Found":3,"\u30aa\u30ea\u30b8\u30ca\u30eb":4,"\u306f\u3058\u3081":[0,4],"\u306b\u3088\u308b":4,"\u3059\u308b":[0,1,2,3,4,5],shell:1," in":2,"\u3001 ":[3,2,1,4],"$'":3,"\u307f\u3066":3,"\u30b7\u30a7\u30eb":[0,1],"\u30de\u30eb\u30c1\u30d0\u30a4\u30c8":3,".ext":2,"\u5b9f\u884c":[0,2,1,4,3],"\u3053\u306e":3,"\u308c\u307e\u305b":[3,1],SDK:4,"\u307e\u3059":[3,2,1,4],"\u30d9\u30fc\u30b9":4,"\u6709\u52b9":[2,3],".html":3," TemplatePageHandler":3,warmup:2,"\u4efb\u610f":2,"\u3068\u3057":4,dev:[3,1],"\u540c\u3058":1,".warmup":[2,3],"\u306f\u305a":3,"\u3060\u3051":4,"\u691c\u7d22":0,"\u793a\u3059":4,"import":3,"/index":3,setUp:2,"static":3,"_project":3," (":2,"\u958b\u767a":[0,1,5,3],"_ok":2,"\u6587\u5b57":3,WSGI:3,"/$":3,".application":3," ok":2,"...":2,ah:3,"\u30a8\u30e9\u30fc":3,tests:2,"\u3002\n":[3,4],"_factory":3,"/_":3,"_template":3,"\u30c8\u30c3\u30d7\u30da\u30fc\u30b8":3,application:3,"\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9":3,"\u5c65\u6b74":[0,5],"'/":3,"</":3,unittest:2,"',":3,"\u30ce\u30fc\u30c8":[3,2,1],"\u898b\u3064\u3051":2,"')":3,"\u3044\u308b":[3,4],"=config":3,"\u30a8\u30c7\u30a3\u30bf":3,"\u53c2\u7167":3,"\u5bfe\u5fdc":[1,5],"\u307e\u305f":2,"\u540d\u524d":[2,3],"\nclass":3,"\u5358\u4f4d":4,"\u898b\u3064\u3051\u308b":2,"\u958b\u304d":3,"\u307e\u3057":3,TestCase:2,".handlers":3,html:3,"\u4fbf\u5229":4,".py\u30b9\u30af\u30ea\u30d7\u30c8":1,"\n\n":[2,3],"\u306e\u307f":2,test:2,"\u5185\u5bb9":3,GAE:[2,3,4],"\u6a19\u6e96":2,"\n ":3,"\u30c8\u30c3\u30d7\u30da\u30fc\u30b8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3":3,"\n#":3,"\nAPPS":3,"\n]":3,".TestCase":2,HTML:5,"\u8aad\u307f\u8fbc\u307f":3,", '":3,Ran:2,"\nfrom":3," unittests":2,"\u3002IPython":1,"<html":3,"_name":3,discover:2,"\u3002HandlerTestCase":2,"\u958b\u3044":3,"\u307e\u305b":4,toppage:3,"\u3053\u308c":[0,3,4],"\u3060\u3055\u3044":3,"\u3002 ":2,"\u5b9f\u88c5":2,".tests":2,"\u3088\u3046":5,"\u30ea\u30dd\u30b8\u30c8\u30ea":4,"\u8a2d\u5b9a":[3,4],"\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30af\u30c8\u30ea\u30fc":3,"/warmup":[2,3],bitbucket:4,"\u5b9a\u7fa9":3,TestBedTestCase:2,"\u4f5c\u308b":4,"'^":3,".testbed":2,"_wsgi":3,"\u3068\u3044\u3046":[2,3],Python:[2,4,5],"/apps":3,"\u3053\u3068":2,"\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30d1\u30b9":2,Testbed:2," License":4,"\u30c7\u30a3\u30ec\u30af\u30c8\u30ea":[2,3],"\u30b5\u30fc\u30d0":3,"\u30ed\u30fc\u30c9":[3,4],unittests:2,hello:3,".WarmupHandlerTest":2},objtypes:{},titles:["tokky.appengine.core \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8","\u958b\u767a\u7528\u5bfe\u8a71\u30b7\u30a7\u30eb\u306e\u5b9f\u884c","\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u306e\u4f5c\u6210\u3068\u5b9f\u884c","\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210","\u306f\u3058\u3081\u306b","\u5909\u66f4\u5c65\u6b74"],objnames:{},filenames:["index","shell","unittest","new_project","intro","changes"]})

tokky.appengine.core/shell.html

+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>開発用対話シェルの実行 &mdash; tokky.appengine.core 0.1dev documentation</title>
+    
+    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '',
+        VERSION:     '0.1dev',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <script type="text/javascript" src="_static/translations.js"></script>
+    <link rel="top" title="tokky.appengine.core 0.1dev documentation" href="index.html" />
+    <link rel="next" title="変更履歴" href="changes.html" />
+    <link rel="prev" title="ユニットテストの作成と実行" href="unittest.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>ナビゲーション</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="総合索引"
+             accesskey="I">索引</a></li>
+        <li class="right" >
+          <a href="changes.html" title="変更履歴"
+             accesskey="N">次へ</a> |</li>
+        <li class="right" >
+          <a href="unittest.html" title="ユニットテストの作成と実行"
+             accesskey="P">前へ</a> |</li>
+        <li><a href="index.html">tokky.appengine.core 0.1dev documentation</a> &raquo;</li> 
+      </ul>
+    </div>  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="id1">
+<h1>開発用対話シェルの実行<a class="headerlink" href="#id1" title="このヘッドラインへのパーマリンク">¶</a></h1>
+<p>ローカル環境で対話シェルを使用するためには、 <tt class="docutils literal"><span class="pre">shell.py</span></tt> スクリプトを実行します。IPythonにも対応しています。</p>
+<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>python shell.py
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">ノート</p>
+<p class="last">shell.pyスクリプトは、dev_appserverと同じデータベースファイルを使用するため、dev_appserverを起動した状態では対話シェル上でのデータの変更はdev_appserver側に反映されません。</p>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h4>前のトピックへ</h4>
+  <p class="topless"><a href="unittest.html"
+                        title="前の章へ">ユニットテストの作成と実行</a></p>
+  <h4>次のトピックへ</h4>
+  <p class="topless"><a href="changes.html"
+                        title="次の章へ">変更履歴</a></p>
+  <h3>このページ</h3>
+  <ul class="this-page-menu">
+    <li><a href="_sources/shell.txt"
+           rel="nofollow">ソースコードを表示</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>クイック検索</h3>
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="検索" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    モジュール、クラス、または関数名を入力してください
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>ナビゲーション</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="総合索引"
+             >索引</a></li>
+        <li class="right" >
+          <a href="changes.html" title="変更履歴"
+             >次へ</a> |</li>
+        <li class="right" >
+          <a href="unittest.html" title="ユニットテストの作成と実行"
+             >前へ</a> |</li>
+        <li><a href="index.html">tokky.appengine.core 0.1dev documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2012, Shinya Okano.
+      このドキュメントは <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3 で生成しました。
+    </div>
+  </body>
+</html>

tokky.appengine.core/unittest.html

+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>ユニットテストの作成と実行 &mdash; tokky.appengine.core 0.1dev documentation</title>
+    
+    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '',
+        VERSION:     '0.1dev',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <script type="text/javascript" src="_static/translations.js"></script>
+    <link rel="top" title="tokky.appengine.core 0.1dev documentation" href="index.html" />
+    <link rel="next" title="開発用対話シェルの実行" href="shell.html" />
+    <link rel="prev" title="プロジェクトの作成" href="new_project.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>ナビゲーション</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="総合索引"
+             accesskey="I">索引</a></li>
+        <li class="right" >
+          <a href="shell.html" title="開発用対話シェルの実行"
+             accesskey="N">次へ</a> |</li>
+        <li class="right" >
+          <a href="new_project.html" title="プロジェクトの作成"
+             accesskey="P">前へ</a> |</li>
+        <li><a href="index.html">tokky.appengine.core 0.1dev documentation</a> &raquo;</li> 
+      </ul>
+    </div>  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="id1">
+<h1>ユニットテストの作成と実行<a class="headerlink" href="#id1" title="このヘッドラインへのパーマリンク">¶</a></h1>
+<div class="section" id="id2">
+<h2>ユニットテストの実行<a class="headerlink" href="#id2" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>ユニットテストを実行するためには <tt class="docutils literal"><span class="pre">unittests.py</span></tt> スクリプトを実行します。</p>
+<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>python unittests.py
+test_ok <span class="o">(</span>apps.warmup.tests.WarmupHandlerTest<span class="o">)</span> ... ok
+
+----------------------------------------------------------------------
+Ran 1 <span class="nb">test </span>in 0.610s
+
+OK
+</pre></div>
+</div>
+<p>warmupアプリケーションには、 <tt class="docutils literal"><span class="pre">tests.py</span></tt> という名前のモジュールに <tt class="docutils literal"><span class="pre">unittests.HandlerTestCase</span></tt> クラスを継承したユニットテストが書かれています。HandlerTestCaseクラスは継承ツリーにunittestモジュールのTestCaseクラスを含んでいます。</p>
+<p><tt class="docutils literal"><span class="pre">unittests.py</span></tt> はTestCaseクラスを継承したユニットテストを見つけて実行します。</p>
+<p>また、引数にディレクトリパスを指定することで、任意のディレクトリ以下のテストのみを実行することができます。</p>
+<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>python unittests.py apps/warmup
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">ノート</p>
+<p class="last">tokky.appengine.core では、テスト対象のユニットテストを見つけるためにunittest2(Python2.7では標準モジュールのunittest)モジュールのdiscover関数を使用しています。</p>
+</div>
+</div>
+<div class="section" id="id3">
+<h2>ユニットテストの作成<a class="headerlink" href="#id3" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>GAEのDatastoreやMemcacheなどのサービスを使用するテストは、 <tt class="docutils literal"><span class="pre">unittests</span></tt> モジュールのクラスを継承して実装します。</p>
+<div class="section" id="testbedtestcase">
+<h3>TestbedTestCase<a class="headerlink" href="#testbedtestcase" title="このヘッドラインへのパーマリンク">¶</a></h3>
+<p><tt class="docutils literal"><span class="pre">unittest.TestCase</span></tt> クラスを継承しています。 <tt class="docutils literal"><span class="pre">setUp</span></tt> メソッド内でTestbed(<tt class="docutils literal"><span class="pre">google.appengine.ext.testbed</span></tt>)を有効にしています。</p>
+</div>
+<div class="section" id="handlertestcase">
+<h3>HandlerTestCase<a class="headerlink" href="#handlertestcase" title="このヘッドラインへのパーマリンク">¶</a></h3>
+<p><tt class="docutils literal"><span class="pre">TestBedTestCase</span></tt> クラスを継承しています。</p>
+</div>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="index.html">目次</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">ユニットテストの作成と実行</a><ul>
+<li><a class="reference internal" href="#id2">ユニットテストの実行</a></li>
+<li><a class="reference internal" href="#id3">ユニットテストの作成</a><ul>
+<li><a class="reference internal" href="#testbedtestcase">TestbedTestCase</a></li>
+<li><a class="reference internal" href="#handlertestcase">HandlerTestCase</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+
+  <h4>前のトピックへ</h4>
+  <p class="topless"><a href="new_project.html"
+                        title="前の章へ">プロジェクトの作成</a></p>
+  <h4>次のトピックへ</h4>
+  <p class="topless"><a href="shell.html"
+                        title="次の章へ">開発用対話シェルの実行</a></p>
+  <h3>このページ</h3>
+  <ul class="this-page-menu">
+    <li><a href="_sources/unittest.txt"
+           rel="nofollow">ソースコードを表示</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>クイック検索</h3>
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="検索" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    モジュール、クラス、または関数名を入力してください
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>ナビゲーション</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="genindex.html" title="総合索引"
+             >索引</a></li>
+        <li class="right" >
+          <a href="shell.html" title="開発用対話シェルの実行"
+             >次へ</a> |</li>
+        <li class="right" >
+          <a href="new_project.html" title="プロジェクトの作成"
+             >前へ</a> |</li>
+        <li><a href="index.html">tokky.appengine.core 0.1dev documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2012, Shinya Okano.
+      このドキュメントは <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3 で生成しました。
+    </div>
+  </body>
+</html>