【Django】DynamicにFormsetを生成するJavaScriptのライブラリを作ったよ【Mootools】
DjangoのFormsetを動的に増やしたり削除したり並び替えたりしたかったんです。。
調べたとろこjQueryにしかそういうライブラリがなかったので、Mootools好きな私と致しましては居ても立ってもいられず、こうしてライブラリを作成した次第でありますです。
って事で、内容に関する説明は面倒なのでしませんw
みんな頑張っていじくって使い方模索してね!
気が向いたらドキュメント書きますー。
[Django Dynamic Formset with Mootools]
https://bitbucket.org/odoku/django-dynamic-formset-with-mootools/
あ、一応動くと思うけど例に漏れずあんまりテストしてないのでお気をつけを。。
[ScreenShots]
【JavaScript】時間と秒の相互変換【Mootools】
JSってなんか時間まわりの使い勝手がイマイチな気がするのです。
PHPが使いやすいってだけなのかもしれませんけども。。
という訳でお題の通り「時間と秒の相互変換」を行う関数を書きました。
普通に関数書くのじゃつまらないので、StringクラスとNumberクラスに盛り込んでみましたとさ。
Number.implement({
secToTime: function(hour) {
if (arguments.length == 0) hour = true;
var sec = this.toFloat();
if (hour) {
var hours = ("0" + Math.floor(sec / 3600).toString()).slice(-2);
var minutes = ("0" + Math.floor(sec % 3600 / 60).toString()).slice(-2);
var seconds = ("0" + Math.floor(sec % 60).toString()).slice(-2);
return hours + ':' + minutes + ':' + seconds;
} else {
var minutes = ("0" + Math.floor(sec / 60).toString()).slice(-2);
var seconds = ("0" + Math.floor(sec % 60).toString()).slice(-2);
return minutes + ':' + seconds;
}
}
})
String.implement({
timeToSec: function() {
var regexp = /^(?:(?:(\d+):)?(\d+):)?(\d+)$/;
var timeString = this.toString();
var matches = timeString.match(regexp);
if (matches == null) return false;
var sec = 0;
if (matches[1]) sec += matches[1].toInt() * 3600;
if (matches[2]) sec += matches[2].toInt() * 60;
sec += matches[3].toInt();
return sec;
},
secToTime: function(hour) {
if (arguments.length == 0) hour = true;
var sec = this.toInt();
return sec.secToTime(hour);
}
})
var sec1 = '60'.timeToSec();
var sec2 = '30:00'.timeToSec();
var sec3 = '01:00:00'.timeToSec();
console.log(sec1); // 60
console.log(sec2); // 1800
console.log(sec3); // 3600
var time1 = sec1.secToTime();
var time2 = sec2.secToTime();
var time3 = sec3.secToTime();
console.log(time1); // 00:01:00
console.log(time2); // 00:30:00
console.log(time3); // 01:00:00
time1 = sec1.secToTime(false);
time2 = sec2.secToTime(false);
time3 = sec3.secToTime(false);
console.log(time1); // 01:00
console.log(time2); // 30:00
console.log(time3); // 60:00
あんまりテストしてないけど、多分大丈夫◎
【Python】プロパティに対して動的にアクセスする方法
まだまだ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に変換する方法
なんか毎回調べてる気がするので覚え書きとして残しておく。。
タイムゾーンの変換を行うときにはpython-dateutilを使うと便利だとの事。
ダウンロードとリファレンスは以下の所です。
あ、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 でテスト自動化のための環境構築
Jenkins + Seleniumを使ってリポジトリにコードをプッシュした際に、テストもやっちまいましょうよーってお誘いが来たので手順メモとして書いておく。
環境
- ubuntu10.04
- python2.6
- django1.3
必要なモノ
サーバー
- selenium-server-standalone.jar
- jenkins.jar
アプリケーション
Pythonライブラリ
手順
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 を動かす
ダウンロード
起動
java -jar jenkins.jar
プラグインの導入
TOP > Jenkinsの管理 > プラグインの管理 > 利用可能 > Jenkins Mercurial pluginにチェック > インストール
設定
新規ジョブ作成
フリースタイルプロジェクトのビルド
ソースコード管理システム > Mercurial
リポジトリブラウザ > Bitbucket
ビルドトリガ > 定期的に実行(1時間毎に実行する様に設定)
* */1 * * *
ビルド手順の追加 > シェルの実行
python manage.py test
ビルド後の処理 > JUnitテスト結果の集計にチェック
xmlrunner/*.xml
これで多分動くはず。。
思い出しながら書いたので間違ってる箇所もあるかも知れないので、飽くまで参考程度に。。
あとはBitbucketにpushしたらビルドが走る様にすれば完璧ですなー。