2011年2月18日金曜日

既存の関数に後からデコレート

django-axesでやっていたのでメモ
admin.site.loginに定義したwatch_loginをくっつける。middlewareの初期化でやっちゃう。

class FailedLoginMiddleware(object):

    def __init__(self, *args, **kwargs):
        super(FailedLoginMiddleware, self).__init__(*args, **kwargs)

        # watch the admin login page
        admin.site.login = watch_login(admin.site.login)

        # and the regular auth login page
        auth_views.login = watch_login(auth_views.login)

Djangoのadminのurlsは

django.admin.site.urls -> django.admin.site.get_urls

urlpatterns = patterns('',
    url(r'^$', wrap(self.index), name='index'),
    url(r'^logout/$', wrap(self.logout), name='logout'),
    url(r'^password_change/$', wrap(self.password_change, cacheable=True), name='password_change'),
    url(r'^password_change/done/$', wrap(self.password_change_done, cacheable=True), name='password_change_done'),
    url(r'^jsi18n/$', wrap(self.i18n_javascript, cacheable=True), name='jsi18n'),
    url(r'^r/(?P<content_type_id>\d+)/(?P<object_id>.+)/$', 'django.views.defaults.shortcut'),
    url(r'^(?P<app_label>\w+)/$', wrap(self.app_index), name='app_list')
)

    urlpatterns += patterns('',
        url(r'^%s/%s/' % (model._meta.app_label, model._meta.module_name), include(model_admin.urls))
    )
 

2011年2月17日木曜日

wxPythonでGUI調査

import wx.lib.inspection

app = wx.App()
frame = wx.Frame(None, -1, u'Frame')
frame.Show(True)
wx.lib.inspection.InspectionTool().Show()
app.MainLoop()

2011年2月16日水曜日

ファイル名一括変更

rename 's/.htm/.html/' *.htm
 
後方参照も使えるぞ
01hogehoge.mp3 -> 01-01 
rename 's/([0-9][0-9]).*\./01-$1\./' -v *.mp3
 

2011年2月15日火曜日

wxPythonをソースからインストール

本家はこちら
wxWidgetsのクラスをpythonに晒して、蛇に「窓使い」をさせるもの。
思ってたより簡単だった。のでメモ。
wxWidgetsは既にソースコードからビルドインストールしてあるので割愛。
ソースのtarボールを取ってきて展開。その下の、wxPythonディレクトリのsetup.pyでやっつけられる。

ちゃんとやろうとすれば、wxWidgetsのcurrent stable soruceも付いてくるから野良ビルトすればよい。

1)wxWidgets
cd wxWidgets-XXXXXXXXXX
mkdir gtkbuild
../configure --prefix=$HOME/XXXX/XXXX/wxWidgets --enable-unicode --with-opengl
make
make install
cd ./contrib/src/stc
make
make install
cd -
cd ./contrib/src/gizmos
make
make install
cd -

~/.bash_mine
export PATH=$PATH:$HOME/XXXX/XXXX/wxWidgets/bin/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/XXXX/XXXX/wxWidgets/lib/

2)wxPython
cd ./wxPython
python ./setup.py install

python ./demo/demo.py でテスト

C++でずいぶん使い倒した記憶があるが、ほとんど忘れていた。

2011年2月8日火曜日

django-axesでlogin lock

djangoでadminやloginに複数回のログイン失敗に対してlockをかけ設定した時間が経過しないとログインできないようにしたいならdjango-axes
ドキュメントとおりにインストールしてdjangoに設定すればOK

ソース読めば分かるけれど、ドキュメントにない設定もある。使うのは、
#失敗した後ロックされる時間
AXES_COOLOFF_TIME = 3 #hour
#ロックされたときに使うテンプレート
AXES_LOCKOUT_TEMPLATE = 'account_locked.html'

あと、
settings.pyで
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
と設定しているから
LOGFILE = os.path.join(settings.DIRNAME, 'axes.log')

LOGFILE = os.path.join(settings.PROJECT_ROOT, 'axes.log')
としてプロジェクトディレクトリにlogin履歴がaxes.logに書き込まれる。


AXES_LOCKOUT_TEMPLATEには
'cooloff_time': COOLOFF_TIME,
'failure_limit': FAILURE_LIMIT,
が渡されるので好きにしてよい。

デコレーターなので自前のログイン関数にも
from axes.decorators import watch_login
.......
@watch_login
def login(request):
でOK


本家はここ。 TNX!