タグ

ブックマーク / imagawa.hatenadiary.jp (9)

  • OpenAMのシングルサインオン機能 - 今川館

  • fabricとbuildoutで環境構築 第1章 fabricで再利用可能なレシピを書こう - 今川館

    Python, fabric, buildout | 10:03わたしはインフラとかOSのインストールがとても苦手で、仕事で新しい案件にアサインされる度に仮想環境を作って諸々インストールするのが面倒で嫌いです。例えばnginxのインストール・セットアップをしようと思ったとき、やり方をぐぐって手順書としてメモします。しかし、手順書を見ながらコマンドをコピペすること自体やめてしまいたいと思う事が多いです。環境構築手順をレシピとして作っておくnginxのインストールならば nginx_install.sh 、セットアップは nginx_setup.sh みたいに、環境構築手順をシェルに書いておいて使い回し可能にできたら楽なんじゃないかと思います。こういうものをレシピを呼ぶらしいです。Pythonで開発するのだから、レシピPythonで書ければ楽でしょう。具体的なイメージとしては、レシピを書いた

  • PyramidとDjangoでメモ化(memoize) - 今川館

    Python, Pyramid, Django | 10:05Pyramidの場合はreifyデコレータを使うまたshirlyのソースコードを読んでいたのですが、"?"と思うことがありました。 from pyramid.decorator import reify class ShirlyResource(object): …(中略) def query_project(self): return Project.query def add_project(self, project): return DBSession.add(project) @reify def project(self): if 'project_name' not in self.request.matchdict: return None try: project = self.query_project().

  • かっこ悪くて面倒でもテストコードを書こう - 今川館

    Python | 10:08わたしはプログラマーではありませんが、いくつかの仕事でテストコードを見たり書いたりすることがあったので、その過程で思ったことをメモとして残しておきます。コーディングとテストを分けて工数を言う癖をやめようどっちもコードを書くのだから分けて考える必要はないテストコードの重要性は理解しているけど、工数も厳しいし客がテストコードを書くことに工数を割くことを認めてくれない。ありがちな話ですが、それがテストを書かないことの根拠であるならば少し考え直しましょう。コーディングとテストを異なる工程と考えるのをやめてしまえばそんなことに悩む必要はなくなります。つまり、「テストを書きながらコーディングする」のです。だいたい、普段プログラムを書いているときだって手元で動かしながらものを作っているでしょう。それと同じことをプログラムを書いてやればいいだけです。客がテストを書かせてくれない

  • 何段にも深くなるループを絶対に一段で書く方法 - 今川館

    ループの中でループを回す処理は読みにくい 例えば友達が5人いて、サンドイッチが3種類あって、2種類の飲み物を配る処理を作るとします。 こういう場合、for文を何段にもネストするプログラムを書かざるを得ないときがありますよね。 for friend in friends: for sandwich in sandwiches: for drink in drinks: do_something(friend, sandwich, drink) そもそも、こういうプログラムを書く前は、当にそういう処理で正しいのか考えた方がいいですが、とにかくこんなコードは読みにくいです。 ループの中でループを回すプログラムを字下げして書くことが読みにくさに寄与していると思うのですが、pythonだと字下げは必須なので悩ましいものです。 itertools.productを使えば絶対に1段で書ける しかし、こ

    何段にも深くなるループを絶対に一段で書く方法 - 今川館
  • PyramidのResource Factoryを使ってビューにデータを与える - 今川館

    Pyramid, Python | 13:26ビューからモデルのコードを追い出したいwebアプリを作るとき、デコレータをビューにくっつけるスタイルでプログラムを書くことがよくある。Djangoを例に取ると、 from django.shortcuts import get_object_or_404 from django.template.response import TemplateResponse from shop.models import Shop def show_person(request): id = request.GET.get("id") shop = get_object_or_404(Shop, id=id) return TemplateResponse(request, "shop/show.html", {"shop" : shop}) これをget_

  • Pyramidのサブルートの付け方: Djangoのurls.pyみたいなやつ - 今川館

    Pyramid, Python | 21:37PyramidでビューとURLのPathを紐づける方法PyramidでビューとURLのPathを紐づける為には以下の二つの手順を踏む。pyramid.config.Configurator.add_routeを呼んでルートの名前を登録する。pyramid.config.Configurator.add_viewを呼んで予め登録したルートの名前とビューを紐づける。コードを書くときはこんな感じになる。 from pyramid.config import Configurator from pyramid.response import Response config = Configurator() config.add_route("bucho", "/bucho") def show(request): return Response("Bu

  • Pyramidでイベントを使う : Djangoのシグナルみたいなやつ - 今川館

    Pyramid, Python | 01:09Djangoにシグナルってあるよねー Pyramidではそれをイベントと呼びますDjangoに「シグナル」という仕組みがある。これは、JavaScriptなどのイベントハンドラと同じように、特定のイベントをトリガーとして任意の処理を連動させる仕組みである。いわゆる、Observerパターンとか、「Publisher-Subscriber」などと言われる仕組みのことだ。Djangoのドキュメントを引用すると、ここではrequest_finishedというシグナルにmy_callbackという関数を紐づけている。 from django.core.signals import request_finished request_finished.connect(my_callback) ...(中略) from django.core.signals

    heavenshell
    heavenshell 2012/01/15
    あーこれは良いな。
  • minimockの使い方 - 今川館

    pythonのモックとしてminimockというライブラリがある。 日語のドキュメント・ブログが見当たらないので使い方をここに書いておく。 minimockを構成するモジュール mock関数 -- モックを当てる。 restore関数 -- 当てたモックを解除する。 Mockクラス -- mockより詳細にモックを当てるために使うオブジェクト。 mock関数とrestore関数でモックを当てる・解除するというのはわかりやすい。 しかし、複雑なケースではMockオブジェクトを使う必要があるのでここで説明する。 あと、minimockを使う上ではまりやすい点を書く。 基的な使い方 minimockの基は モックに差し替えるモジュールをインポートする。 mock関数を呼ぶ。或いはMockインスタンスを代入する。 使い終わったらrestoreで戻す。 である。 例えば、以下のphilosop

    minimockの使い方 - 今川館
  • 1