OS X で admin.site.register の一覧を作るスクリプト

使い方

$ # models.py のみの場合
$ sh print_imports.sh my_app/models.py
$ sh print_admin_site_registers.sh my_app/models.py
$
$ # models ディレクトリ配下に model を分割、記述している場合
$ sh print_imports.sh my_app/models
$ sh print_admin_site_registers.sh my_app/models

 



スクリプト
いずれも "class" と言う文字が行頭にあることが前提。
 

1) print_imports.sh
import を自動で書くスクリプト

path=${1}
find ${path} -name "*.py" | while read file_path
do
  class_names=$(cat $file_path | grep ^class | sed -e "s/(.*//" | awk '{print $2}')
  echo "${class_names}" | while read class_name
  do
    if test "${class_name}" = ""; then continue; fi
    import="from ${file_path} import ${class_name}"
    import=$(echo ${import} | sed -e "s|//|.|g")
    import=$(echo ${import} | sed -e "s|/|.|g")
    import=$(echo ${import} | sed -e "s|.py||")
    echo $import
  done
done

 

2) print_admin_site_registers.sh

path=${1}
find ${path} -name "*.py" | while read file_path
do
  cat $file_path | grep ^class | sed -e "s/(.*//" | awk '{printf("admin.site.register(%s)\n",$2)}'
done


なんで Python じゃなくて shell で作ったんだろう orz