1. Makeを消極的にタスクランナーとして使う

    タイトルについて誤解のないよう初めに書きますが、makeは良いビルドツールです。

    私は最近、開発環境をLXCに移行してAnsibleを使ってプロビジョニングをしています(カタカナでプロビジョニングと書いたのは初めてです。違和感がすごいです)。そのため、頻繁に長い複数のコマンドを入力しています。

    $ sudo lxc-create -t ubuntu container_name
    $ sudo lxc-start container_name
    $ ansible-playbook -v -i provision/hosts/development/inventory provision/dev.yaml
    

    これを楽にするためにタスクランナーが欲しかったのです。

    続きを読む


  2. Pythonのオブジェクトの継承関係

    isinstance(object, classinfo) を使ってPythonの object について確認します。isinstance のドキュメントはこれです。

    isinstance(object, classinfo)
    object 引数が classinfo 引数のインスタンスであるか、 (直接、間接、または 仮想) サブクラスのインスタンスの場合に真を返します。 object が与えられた型のオブジェクトでない場合、この関数は常に偽を返します。 classinfo が型オブジェクトのタプル (あるいは再帰的に複数のタプル) の場合、 object がそれらのいずれかのインスタンスであれば真を返します。
    

    Python 3.5.2です。

    続きを読む

  3. PyramidでテンプレートエンジンとしてMakoを使うことを考えた話

    普段、Pyramidに限らずPythonではJinja2をテンプレートエンジンとして使用している。それは、Djangoをよく使っていた私にとって、Djangoのテンプレートエンジンとよく似たJinja2は使いやすかったからである。 だが今回は、新しくWebアプリケーションを作るに際し、Pyramidの標準的なテンプレートエンジンであるMakoを試してみた。

    私はPyramidの設定ファイル(development.iniやproduction.ini)にこのように書き、開発中かどうかをJinja2に知らせていた。

    jinja2.globals =
        is_debug = app.helpers.true
        # is_debug = app.helpers.false
    

    この設定は、例えばGoogle Analyticsを本番でのみ有効にするために使用している。

    {% if not is_debug %}
    <script>
       // AnalyticsのJavaScript
    </script>
    {% endif %}
    

    どうやらMakoでこれを実現するには、Pyramidアプリケーション内で関数を登録していかなければならないようだ。となると、同じことを実現するには、設定ファイルの内容を自作関数の中で読み、値を返すことになりそうだ。

    続きを読む

  4. mypyでクラスを返す関数の戻り値の型をどう書くのか

    mypyでクラスを返す関数の戻り値の型を書く方法が分かりません。具体的に言うと、この get_language 関数はLanguageの子クラスを返したいのですが、それを指定する方法が分かりません。

    -> Language: と書くと、Languageのインスタンスを期待されてしまいます。

    class Language:
        ...
    
    
    class English(Language):
        ...
    
    
    class Japanese(Language):
        ...
    
    
    def get_language(language_code: str):
        return {
            'en': English,
            'ja': Japanese,
        }[language_code]
    
    続きを読む


2015 - 2017 (c) 成瀬基樹