【Python】プロパティに対して動的にアクセスする方法

2011年8月11日木曜日 17:38 By Unknown , In


まだまだPythonはぺーぺー極まり無いのでメモメモ。。

お代の通り、インスタンス変数等に文字列を使って動的に値を取得する方法で御座います。
getattrっていう関数を使うらしいよ。

getattr (object, name[, default])

指定された object の属性を返します。name は文字列で なくてはなりません。文字列がオブジェクトの属性名の一つであった 場合、戻り値はその属性の値になります。例えば、 getattr(x, 'foobar') は x.foobar と等価です。 指定された属性が存在しない場合、default が与えられている 場合にはしれが返されます。そうでない場合には AttributeError が送出されます。

サンプルソース

class Hoge:
    piyo = 10

instance = Hoge()
print getattr(instance, 'piyo')

ちなみに、逆に値をセットする場合はsetattrってのを使うそうです。

setattr (object, name, value)

getattr() と対をなす関数です。引数はそれぞれオブジェクト、 文字列、そして任意の値です。文字列はすでに存在する属性の名前でも、 新たな属性の名前でもかまいません。この関数は指定した値を指定した属性に 関連付けますが、指定したオブジェクトにおいて可能な場合に限ります。 例えば、setattr(x, 'foobar', 123) は x.foobar = 123 と等価です。

サンプルソース

class Hoge:
    piyo = 10

instance = Hoge()
setattr(instance, 'piyo', 200000)

print instance.piyo

【Python】datetimeでタイムゾーンをUTCに変換する方法

2011年8月10日水曜日 18:01 By Unknown , In

なんか毎回調べてる気がするので覚え書きとして残しておく。。

タイムゾーンの変換を行うときにはpython-dateutilを使うと便利だとの事。
ダウンロードとリファレンスは以下の所です。

python-dateutil - Labi

あ、pipとかeasy_installでも入るみたい

sudo pip install python-dateutil

サンプルソースを載せておきますねー。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import datetime
import dateutil.tz

# 日本時間 2011年08月10日 16時00分00秒 を指定
date = datetime.datetime(2011, 8, 10, 16, 0, 0, 0, dateutil.tz.gettz('Asia/Tokyo'))
print date

# UTC表記に変換
date = date.astimezone(dateutil.tz.tzutc())
print date

これでばっちり。

Jenkins + Selenium + Django でテスト自動化のための環境構築

11:05 By Unknown , In , ,


Jenkins + Seleniumを使ってリポジトリにコードをプッシュした際に、テストもやっちまいましょうよーってお誘いが来たので手順メモとして書いておく。

環境

  • ubuntu10.04
  • python2.6
  • django1.3


必要なモノ

サーバー

  • selenium-server-standalone.jar
  • jenkins.jar

アプリケーション

  • Xvfb(仮想フレームバッファ)
  • Firefox

Pythonライブラリ

  • selenium
  • unittest-xml-reporting


手順

1, Ubuntu Serverにて、FireFoxを仮想フレームバッファで動かす

GUI環境のある場所でやる人はやらなくても良い部分。
Xvfbという仮想フレームバッファを使ってCUIでもFirefoxを動かせるようにしようぜってものだと思う。

インストール
sudo apt-get install xvfb
sudo apt-get install firefox	
環境変数の指定
export DISPLAY=:1.0
起動
Xvfb :1 -screen 0 1024x768x24 > /dev/null &

2, Selenium Serverを動かす

ダウンロード

http://seleniumhq.org/download/

起動
java -jar selenium-server-standalone.jar > /tmp/selenium.log 2>&1 &

3, djangoに必要なライブラリを入れる

seleniumを使ったテストの書き方は多分説明してるサイトが沢山あるので割愛。。

インストール
sudo pip install selenium
sudo pip install unittest-xml-reporting
settings.py の編集
# 追加
TEST_RUNNER = 'xmlrunner.extra.djangotestrunner.XMLTestRunner'
TEST_OUTPUT_VERBOSE = True
TEST_OUTPUT_DESCRIPTIONS = True
TEST_OUTPUT_DIR = 'xmlrunner'

4, Jenkins を動かす

ダウンロード

http://jenkins-ci.org/

起動
java -jar jenkins.jar
プラグインの導入

TOP > Jenkinsの管理 > プラグインの管理 > 利用可能 > Jenkins Mercurial pluginにチェック > インストール

設定

新規ジョブ作成
フリースタイルプロジェクトのビルド

ソースコード管理システム > Mercurial
リポジトリブラウザ > Bitbucket

ビルドトリガ > 定期的に実行(1時間毎に実行する様に設定)

* */1 * * *

ビルド手順の追加 > シェルの実行

python manage.py test

ビルド後の処理 > JUnitテスト結果の集計にチェック

xmlrunner/*.xml


これで多分動くはず。。
思い出しながら書いたので間違ってる箇所もあるかも知れないので、飽くまで参考程度に。。
あとはBitbucketにpushしたらビルドが走る様にすれば完璧ですなー。