Skip to content

Instantly share code, notes, and snippets.

@bbqsrc
Created October 15, 2011 12:30
Show Gist options
  • Save bbqsrc/1289491 to your computer and use it in GitHub Desktop.
Save bbqsrc/1289491 to your computer and use it in GitHub Desktop.
Pirate Party Member CSV Generator
#!/usr/bin/env python
from __future__ import print_function, unicode_literals
import sys, readline
try:
input = raw_input
from StringIO import StringIO
except:
from io import StringIO
class MemberRegister:
def __init__(self):
self.fields = [
"Given name(s)",
"Surname",
"Street",
"Suburb",
"State",
"Postcode",
"Postal Street",
"Postal Suburb",
"Postal State",
"Postal Postcode",
"Telephone (Home)",
"Telephone (Work)",
"Telephone (Mobile)",
"Fax",
"Email address",
"Date of Birth (YYYY-MM-DD)",
"Gender",
"Date Signed",
"Another party? (Y/N)",
"Party",
"Donation",
"Total"
]
self.members = []
def menu(self):
select = {
"add": self.create_member,
"print": self.output_members,
"quit": lambda: self.output_members() and sys.exit()
}
while 1:
print("Options:")
print("add, print, quit")
try:
opt = input("> ")
except EOFError:
self.output_members()
sys.exit()
select.get(opt, lambda: print("No."))()
def output_members(self):
def d2l(member):
output = []
for field in self.fields:
output.append(member[field])
return output
out = StringIO()
out.write(",".join(self.fields))
out.write('\n')
for member in self.members:
out.write(",".join(d2l(member)))
out.write('\n')
print("\n" + out.getvalue().strip())
def print_member(self, member):
line = """--
%s %s
Residential:
%s
%s\t%s %s
Postal:
%s
%s\t%s %s
Home: %s\t\tWork: %s
Mobile: %s\tFax: %s
Email: %s
Date of birth: %s\t Gender: %s
Signed: %s
Other party? %s [%s]
Donated: %s
Total: %s"""
output = []
for field in self.fields:
output.append(member[field])
print(line % tuple(output))
def add_member(self, member):
self.members.append(member)
def create_member(self):
kgo = True
while kgo:
member = {}
for field in self.fields:
while 1:
try:
member[field] = input("%s: " % field).strip()
if member.get(field,"").strip() == "quit":
self.output_members()
sys.exit()
break
except (EOFError, KeyboardInterrupt):
print("\n> There is no escape (type quit!).")
self.print_member(member)
while 1:
res = input("Is this correct? (y/N)")
if res.strip().lower() in ("n", ""):
print("Member will not be added.")
break
elif res.strip().lower() == "y":
self.add_member(member)
print("Member added.")
break
while 1:
res = input("Add another? (Y/n)")
if res.strip().lower() == "n":
kgo = False
break
elif res.strip().lower() in ("y", ""):
break
if __name__ == "__main__":
try:
MemberRegister().menu()
except KeyboardInterrupt:
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment