Djangoのテンプレートエンジンを使ってcsvデータをフォーマットして出力する
ある程度量のあるLDIFを作る必要があり、一つ一つ手打ちしていくのもめんどくさい&ミスが恐いので、Excelでデータをまとめ、csvに変換後Djangoのテンプレートエンジンを使って生成しました。
ソース
csv2format.py
import sys,csv from django.conf import settings settings.configure(TEMPLATE_DIRS=('./',)) # テンプレートファイルの置き場所 from django.template import Context,loader if len(sys.argv) != 3: print "usage: template.py template_file csv_file" sys.exit() format = ( # csvのフォーマットを指定 'uidNumber', 'uid', 'givenName', 'sn', 'mail', 'userPassword', ) tmpl = loader.get_template(sys.argv[1]) csvdata = csv.reader(open(sys.argv[2])) for row in csvdata: data = Context(dict(zip(format,row))) # formatと値の辞書を作成 print tmpl.render(data)
使い方
% python csv2format.py テンプレートファイル csvファイル
以下のファイルを読み込ませて実行してみます。
ldap.tmpl (テンプレートファイル)
{{要素名}} が値に変換されて出力されます。
dn: uid={{uid}},ou=People,dc=example,dc=com objectClass: posixAccount objectClass: shadowAccount objectClass: inetOrgPerson uid: {{uid}} cn: {{givenName}} {{sn}} givenName: {{givenName}} sn: {{sn}} mail: {{mail}} shadowMax: 99999 shadowWarning: 7 uidNumber: {{uidNumber}} gidNumber: 100 loginShell: /bin/bash homeDirectory: /home/{{uid}} userPassword:: {{userPassword}}
users.csv
1001,joma,Namae,MYOUJI,[email protected],password-string
実行結果
[joma@brain:~]% python csv2format.py ldap.tmpl users.csv dn: uid=joma,ou=People,dc=example,dc=com objectClass: posixAccount objectClass: shadowAccount objectClass: inetOrgPerson uid: joma cn: Namae MYOUJI givenName: Namae sn: MYOUJI mail: [email protected] shadowMax: 99999 shadowWarning: 7 uidNumber: 1001 gidNumber: 100 loginShell: /bin/bash homeDirectory: /home/joma userPassword:: password-string
感想
- LDIF以外にも使えて便利かも
- スーパーpre記法がLDIFにも対応してることに感心