EGitでPullができなーい

調べた。

プロジェクト\.git\configに下記を追加

[remote "origin"]
 url = git@github.com:ユーザ名/リポジトリ名.git
 fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
 remote = origin
 merge = refs/heads/master

Eclipseにてウィンドウ→設定→チーム→Git→構成→リポジトリー設定で反映されていることを確認すること

参考:
http://blawat2015.no-ip.com/~mieki256/diary/201206084.html

githubを使ってみた

ローカルのソースを登録した。
1.プロジェクトで右クリックして「チーム」→「プロジェクトの共用」
2.Aptana GitまたはGitを選択。(Aptana Gitの方が単純でわかりやすいかも)
3.Gitリポジトリーの構成でプロジェクトを選択して、作成ボタン押下。完了。
4.「チーム」→「コミット」でローカルGitにコミット  ※このへんはSVNのファイル追加みたいなものかな
5.「チーム」→「リモート」で、あらかじめGitHubに登録していたプロジェクトのURIを登録(SSHの形式)
6.「チーム」→「リモート」→「プッシュ」でGitHubに登録
だと思われ。

なお、自分のアカウントにはSSHで接続するための鍵が必要。

SVN使ってたので直感的に使えた。けどまあ、もうちょっとうまく使えそうな気はする。

参考:
https://github.com/hybitz/AndroidInfo/wiki/Egit%E3%81%A7GitHub%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%99%E3%82%8B
http://www.ne.jp/asahi/hishidama/home/tech/git/egit.html

リストの中の一行を消したい

removeは駄目ー。
updateを使い給え。

from pymongo import Connection
con = Connection('localhost', 27017)
db = con['gazodb']
tbl = db['log']
tbl.update({'no': 95}, {'$pull': {'res':{'no':97}}})

no.95のデータにある、resのなかのno.97のデータのみを削除する。

なお、こちらだとno.95がまるっと消える。

tbl.remove({'res.no':97})

そういうことをしたい場合は、いいんじゃないでしょうか。

参考:
http://stackoverflow.com/questions/7846109/how-to-remove-a-item-from-a-listlistfield-by-id-in-mongoengine


だんだんDBを取り扱うクラスがぐちゃぐちゃしてきた・・・。

さてmockを試そう

よし、datetime.datetime.now()をmockで上書きするぞ!


TypeError: can't set attributes of built-in/extension type 'datetime.datetime'
ですって・・・。

どうもdatetime自体は上書きする事が出来ない。
なので、patchを使って解決して下さいとのこと。

    def setUp(self):
        self.config = testing.setUp()
        self.time = datetime.datetime(2012, 10, 1, 20, 0)

        class fakedatetime(datetime.datetime):
            @classmethod
            def now(cls):
                return self.time
        patcher = patch('datetime.datetime', fakedatetime)
        self.addCleanup(patcher.stop)
        patcher.start()

    def test_now(self):
        print(datetime.datetime.now())

実行結果:
Finding files... done.
Importing test modules ... done.

2012-10-01 20:00:00


気になった点
・@classmethodって何だろう?
 →Javaでいうところのstaticメソッド。ここでは、now()がクラスメソッドなんでこんな感じ。
・@patchでなんとかならん?
 →def test_〜毎に設定しなきゃいけなそうなんで、setUpでやったほうがいいね。
・stop/startってなんだい?
 →patchの無効/有効。addCleanup()はtearDownの後に実行するメソッドを定義する

クラスメソッドって何だろう?って所で一番引っかかった。




参考:
http://docs.python.org/dev/library/unittest.mock-examples.html#partial-mocking
http://pastebin.com/uppEEihJ

クッキーその二

Cookieに日本語入るのにブラウザ側で取り出すとおかしくなるなどうなってんねん!とはまった。
普通に考えれば、日本語というか2バイト文字入らないよね・・・。
※そういえばUTF-8が標準になろうとしている現代においては
 2バイト文字と言うのも死語になりつつあるのではないだろうか?

駄目な例

    name = 'てすと'
    response.set_cookie('text', value=name, expires=expires)

バイト文字になってブラウザに返ってきます。

いけてる?例

    name = 'てすと'
    response.set_cookie('text', value=urllib.parse.quote(name), expires=expires)

URLでおなじみの形に変換してあげれば、とりあえずは正しく格納される。
なお取り出す時はJavascriptでdecodeURI()をかましてあげて下さい。
※ちょっと面倒。。。

Python便利だPyramid便利だって事で適当に実装していると
痛い目見るよっていうお話でした。

画面遷移の妙

フレキシブルな画面遷移の設定が出来ます。
てかまあ、Strutsよりは楽だわね。StrutsにはStrutsの良さがあるけどさ。

__init__.py

    config.add_route('gazo_bbs', '/board')
    config.add_route('gazo_bbs_page', '/board/{page}')
    config.add_route('gazo_bbs_res', '/board/res/{res}')
    config.scan('gazobbs')

views.py

@view_config(route_name='gazo_bbs', renderer='log.mak')
@view_config(route_name='gazo_bbs_page', renderer='log.mak')
@view_config(route_name='gazo_bbs_res', renderer='log.mak')
def show_bbs(request):

    #パラメータ受け取り
    try:
        res = int(request.matchdict['res'])
    except (KeyError, ValueError):
        res = 0

    try:
        page = int(request.matchdict['page'])
    except (KeyError, ValueError):
        page = 0

    # 返却処理へ続く

これで、
http://www.test.com/board
http://www.test.com/board/1
http://www.test.com/board/res/1
で全部同じメソッドに飛ぶ。
ページ(と定義した数字)があればページを受け取り、レス番号(と定義した数字)があったらレス番号を受け取れる。