Easy Django choices done right
In a [old, but still relevant post](http://www.b-list.org/weblog/2007/nov/02/handle-choices-right-way/) James Bennet argues for a way of handling the choice tuples used by Django. One of the reasons I haven't always followed that advice was that it was just a lot of extra mundane keystrokes, and I'm lazy. It was well suited for a quick Python hack, and I now use the script below as a TextMate bundle so that I can just type in a list and have it converted to "the right way".
Here is the snippet
#!/usr/bin/env python
# encoding: utf-8
import os
import re
from sys import stdout, stdin, exit
display_list = stdin.read()
explicit = 1
def sanitize_enum(s):
# @@ plenty to improve here
s = s.upper().strip(' ()')
s = re.sub('^[-\d ]+','',s)
s = re.sub('[./() \-]', "_",s)
while re.search('__',s):
s = s.replace('__','_')
return s
def format_choice(t):
return " ( %s, '%s' )," % t
choices = []
i = 1
for choice in display_list.split('\n'):
if choice:
if explicit:
sanitized = sanitize_enum(choice)
print "%s = %s" % (sanitized,i)
choices.append((sanitized,choice.strip()))
else:
choices.append((i,choice.strip()))
i+=1
print "choices = ("
for c in choices:
print format_choice(c)
print " )"