Skip to content

Instantly share code, notes, and snippets.

View oyakata's full-sized avatar

Imagawa Yakata (oyakata) oyakata

  • Sumpu@Suruga
  • Japan/ the Age of Provincial Wars
View GitHub Profile
@oyakata
oyakata / adminuser.py
Created July 9, 2011 05:43
argparseでdjangoの管理コマンドを敢えて作る -- admin-userのlsとユーザー追加
# -*- coding:utf-8 -*-
import argparse
from django.core.management.base import handle_default_options
from django.utils import importlib
import csv
def is_noble(user):
"""があればTrueを返します。 """
if user.is_superuser:
@oyakata
oyakata / re_multibyte.py
Created July 9, 2011 08:05
マルチバイト文字を含む正規表現のパターンを定義するときはunicodeでパターンを書かないと予期せぬ結果をもたらす
# -*- coding:utf-8 -*-
import re
regex1 = re.compile(r"[  ]+")
regex2 = re.compile(ur"[  ]+")
def main(*args):
"""\
str でパターンを定義したregex1はおかしな分割がされてしまいます。
unicodeで定義したregex2は大丈夫です。
# -*- coding:utf-8 -*-
from argparse import ArgumentParser
psr = ArgumentParser()
add = psr.add_argument
add("--conf", default="foo")
add("--app", default="bar")
args = psr.parse_args("--conf=boo --app=zoo".split())
print args.conf, args.app
@oyakata
oyakata / genexp_sample.py
Created July 10, 2011 16:29
ジェネレータ式は引数が一つでない場合は括弧を付けなければなりません -- ただの英語の勉強です キリッ
def spam(spams):
for s in spams:
print "spam(%s)" % s
def ham(hams, num):
for h in hams:
print "ham(%s)" % (h + num)
spam(x + 3 for x in range(11))
ham(x + 3 for x in range(11), 9)
@oyakata
oyakata / generator_test.py
Created July 21, 2011 23:58
ジェネレータ式を使ったサンプルをいくつかメモ
# -*- coding:utf-8 -*-
# 総当りジェネレータ
round_robin = lambda L: ((i, j) for i in L for j in L if not i is j)
# タプル -> 辞書リスト
tpl2dcts = lambda L: (dict(zip(L[0], x)) for x in L[1:])
# 2要素ずつ取り出したタプルのジェネレータ
pairs = lambda L: ((L[x], L[x+1]) for x in xrange(0, len(L), 2))
@oyakata
oyakata / animals.py
Created July 24, 2011 07:08
シャチは決して人を襲わないことをminimockを使ってテスト
# -*- coding: utf-8 -*-
class Animal(object):
def ouch(self):
return u"あ痛"
class Human(Animal):
pass
class Shark(Animal):
@oyakata
oyakata / hgrc
Created July 29, 2011 08:10
hg branchで数値のブランチを作るとリビジョン番号と混同して紛らわしいので生成不可能にするエクステンション。
[extensions]
sb=~/work/hgsmpl/myhgext/safe_branch.py
# pyファイルを置いた場所を指定して下さい。
@oyakata
oyakata / forms.py
Created August 9, 2011 16:28
djangoのRegexFieldの使用例
# -*- coding:utf-8 -*-
import re
from django import forms
USERID_REGEX = re.compile(r"^[\w-]+$")
class UserForm(forms.Form):
userid = forms.RegexField(max_length=64, regex=USERID_REGEX)
@oyakata
oyakata / cntr.py
Created August 12, 2011 14:45
クラスを使わずカウンターを作ってみる
# -*- coding:utf-8 -*-
from collections import defaultdict
from functools import partial
def counter(*keys):
"""クラスを使わずにカウンターを作る。
>>> cnt = counter("foo", "bar", "baz")
>>> cnt.foo()
>>> cnt.foo()
>>> cnt.bar()
@oyakata
oyakata / intcomma.py
Created August 16, 2011 00:49
正規表現: 練習帳
# -*- coding:utf-8 -*-
import re
def result(ptn, S):
tokens = [re.sub(ptn, ",", x) for x in S.split()]
print " ".join(tokens)
def main():
"""数値文字列に3桁ごとにカンマを追加する。"""
cmm = r"(?<=\d)(?=(\d{3})+(\Z|\D))"