PostgreSQLのルールシステムを使ってDELETEが発行されたときに論理削除をするようにしてみた。
Storm(のようなORM)を使うときに、store.remove(object)と削除は削除として実行できるからよい感じ。
PostgreSQLのルールシステムを使ってDELETEが発行されたときに論理削除をするようにしてみた。
Storm(のようなORM)を使うときに、store.remove(object)と削除は削除として実行できるからよい感じ。
2011.8.25追記:
そりゃあありますよね。ターゲットのプラットフォームで標準で使えるようならば可読性も高いしこちらの方がよいと思います。
僕はこれから作るものはたぶんreadlinkに乗り換えます。masaruyokoi様ありがとうございました。
コメントで教えていただきました。
masaruyokoi on 2011年8月25日(木曜日) at 12:06 said
readlink -f や -e を使うと良いですよ。
Debian や FreeBSD では realpath というコマンドもあります。
以下はオリジナルエントリです。
シェルスクリプトで自分の絶対パスを知る方法はこんな方法しかないんだろうか?
#!/bin/sh D=`dirname $0` echo `cd $D;pwd`
Pythonだとしょっちゅう書いてるアレ。
#!/usr/bin/env/ python from os import path print(path.abspath(path.dirname(__file__)))
お、こういう書き方があるのか。
#!/bin/sh echo $(cd $(dirname $0);pwd)
先輩に聞く前に、
という癖をつけないとなあ。厳しいぞ。
/* Oracle PL/SQLで日付からその月の1日を求める*/ /* to_date、to_charを使えるなら、考えればできる */ create or replace function first_day(thedate date) return date is begin return to_date(to_char(thedate,'YYYY-MM')||'-01','YYYY-MM-DD'); end; /* 調べてみれば、こっちがスマートだとわかる */ create or replace function first_day(thedate date) return date is begin return trunc(thedate,'MONTH'); end; /***** ついでに *****/ /* 年の最初の日 1月1日 */ create or replace function first_day2(thedate date) return date is begin return trunc(thedate,'YEAR'); end; /* 週の始まり日曜日(※NLSの設定次第) */ create or replace function first_day3(thedate date) return date is begin return trunc(thedate,'DAY'); end;
最後に問題。月の日数を求めるにはどうする?
urllib.urlopenはステータス404でも例外を発生してくれない。
urllib2.urlopenは404で例外を発生してくれるけれど、そのままだと環境変数のプロキシ設定を参照するようで、ちょっと困る場合があった。
というわけで、urllib2.urlopenでプロキシを設定|参照しないようにする方法を調べてみた。
#!/usr/bin/env python """Python urllib2 proxy usage sample """ import urllib2 #今回はプロキシ設定を空にしておく #proxies = {'http': 'http://www.example.com:3128/'} proxies = {} #プロキシハンドラーを作成して handler = urllib2.ProxyHandler(proxies) #プロキシハンドラーを指定してURL Openerを作成して opener = urllib2.build_opener(handler) #作成したURL Openerをインストールしてから urllib2.install_opener(opener) #普通にurlopenすると例外が発生してくれる try: u = urllib2.urlopen('http://www.example.com/404NotFound.html') print u.read() except IOError,error: print error
Pythonカテゴリ作ってみた。
月初はまあいいとしても、月末、月の足し引きは、こんな方法しか思いつかず。
カッコ悪いが使えることは使える、と思う。
それほどカッコ悪くはなくなったんじゃないかと思う。修正の経緯
#!/usr/bin/env python # -*- coding: utf-8 -*- """月末、月初のdatetime.dateオブジェクトを返す。 Oracleのadd_months互換の月加減。 """ import datetime from calendar import monthrange def first_day(date): """月初を返す""" return datetime.date(date.year, date.month, 1) def is_last_day(date): """月末日付ならTrueを返す""" return days_of_month(date.year, date.month) == date.day def days_of_month(year,month): """年,月の日数を返す""" return monthrange(year, month)[1] def last_day(date): """月末を返す""" return datetime.date(year=date.year, month=date.month, day=days_of_month(date.year, date.month)) def add_months(date,months): """月を加減する。 dateにはdatetime.dateクラスのオブジェクト monthsには整数で月数を指定する。 月末をOracleのadd_months互換の方法で処理する。 例えば、 2007年2月28日(月末)に1ヶ月足すと3月31日(月末)。 2008年2月29日(月末)に1ヶ月足すと2008年3月31日(月末)。 2008年2月28日(月末ではない)に1ヶ月足すと2008年3月28日(同じ日)。 """ if months==0: return date year, month = divmod(date.month + months, 12) year = year + date.year #ちょうど割り切れたら12月で、マイナス1年。 if month == 0: month = 12 year = year - 1 #入力日付がその月の月末なら、加算後月の日数を。 #そうじゃなければ入力日付の日。 day = date.day if date.day > days_of_month(year, month): day = days_of_month(year, month) return datetime.date(year=year, month=month, day=day)
最新版はGist:227554をどうぞ。
MoinMoinを仕事で使いたい。今すでに使っている社内の認証機構を使ってユーザ管理を楽するためにはどうすればいいか? Pythonのちょっとしたスクリプトを書けばなんとかなるようだ。
ということで調べてみたら、
の2つの手順でできることがわかった。MoinMoin-1.6で動くことを確認した。
以下、やってみて上手くいった手順を記録しておく。
この例では、
wikiconfig.pyの編集
class Config(DefaultConfig): """MoinMoinのカスタム認証スクリプトmyauth.loginを使うようにwikiconfig.py で認証方法を指定。 """ from MoinMoin.auth import moin_session,myauth auth = [myauth.login, moin_session] #MoinMoin内のPreferenceを自動的に作成する user_autocreate = True
カスタム認証スクリプト MoinMoin/auth/myauth.py
# -*- coding: utf-8 -*- """MoinMoin custom user authentication sample """ from MoinMoin import user #User Database _USER_MAP = {'user1,pass1' : ('user1@example.com',u'user1'), 'user2,pass2' : ('user2@example.com','user2')} def login(request, **kw): username = kw.get('name') password = kw.get('password') login = kw.get('login') user_obj = kw.get('user_obj') if not login: return user_obj, True u = None user_info = _USER_MAP.get("%s,%s" % (username,password),False) if user_info: u = user.User(request, name=username, auth_username=username, password=password, auth_method='myauth', auth_attribs=('name', 'auth_username', 'password', 'email', 'aliasname', )) u.email = user_info[0] u.aliasname = user_info[1] u.create_or_update(True) request.log("Login OK. user=%s, email=%s, aliasname=%s." % (username,user_info[0],user_info[1])) return u, True