Chore App

I made this chore asigning application for a small college dorm. Its purpose is to randomly assign chores to residents with respect to gender. A male (m) will get a male chore or gender neutral chore (n) and female (f) will get a female chore or gender neutral chore. Note random is not fair. Good Luck

The files needed

  • list of residents
   gender firstname lastname
   m john smith
   f julie smith
   m tom appleseed
  • list of chores
  gender chore
  f clean womens bathroom
  n mop hallway
  m clean mens showers
  • ChoreApp.py

  • clean.icns - an icon file

Build the App

Setup Python Virtaul Environment

pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install xlwt py2app

Chore App Code

Please place chore app code in a seperate directory differnet to the python virtual environment.

import os, sys,random, xlwt, time, datetime
from xlwt import *

#file imports
chore_file=open("../../../chores.txt", "r")
chores = chore_file.readlines()
#print chores

resident_file=open("../../../residents.txt", "r")
residents = resident_file.readlines()
#print residents

#create a psueode final enum
# m equals male
# f equals female
# n equals neutral

#creates excel file
book = xlwt.Workbook(encoding="utf-8")
sheet1 = book.add_sheet("Sheet 1")

font0 = Font()
font0.bold = True

style0 = XFStyle()
style0.font = font0


#error check
if len(chores) != len(residents):
    print "Error:"
    if len(chores) > len(residents):
            sys.exit(" Too many chores")
    else:
            sys.exit(" Too many residents")

assignment = []
i = 0
while(residents):
    rand = random.randrange(0, len(residents))

    # retrieves the f or m before residents name
    resident = residents[rand]
    resident_gender = resident[0:1]
    chore_gender = chores[i][0:1]

    if(resident_gender == chore_gender) or (chore_gender == 'n'):
        len_chore = len(chores[i])
        len_resident = len(resident)
        print resident[2:len_resident] + " "  + chores[i][2:len_chore]
        tupl = [resident[2:len_resident].replace('\n',''), chores[i][2:len_chore].replace('\n','')]
        assignment.append(tupl)
        residents.pop(rand)
        i=i+1

#alphabetically sort
assignment.sort()
#write out alphabetically sorted chore list
j=1
date = datetime.datetime.now()
enddate = datetime.datetime.now() + datetime.timedelta(days=6)
sheet1.write(0,0,"Chore List For Week Of " + date.strftime('%m/%d') +" - "+ enddate.strftime('%m/%d'), style0)
for i in assignment:
    sheet1.write(j,0,i[0])
    sheet1.write(j,1,i[1])
    sheet1.write(j+1,0,'')
    j=j+2

#saves excell file
book.save("../../../chores"+ date.strftime('%Y_%m_%d') + ".xls")
#book.save("chores"+ date.strftime('%Y_%m_%d') + ".xls")


The Build

Change the the working direcotry to the chore_app and create a file called setup.py

cd chore_app
vim setup.py
   """
   This is a setup.py script generated by py2applet

   Usage:
   python setup.py py2app
   """
   from setuptools import setup

   APP = ['ChoreApp.py']
   DATA_FILES = ['chores.txt','residents.txt']
   OPTIONS = {
    'argv_emulation': True,
    'iconfile': 'clean.icns',
    'plist': {
        'CFBundleName': "ChoreApp",
        'CFBundleDisplayName': "ChoreApp",
        'CFBundleGetInfoString': "App for assigning chore",
        'CFBundleVersion': "0.2.0",
        'CFBundleShortVersionString': "0.2.0",
        'NSHumanReadableCopyright': u"Copyleft Devon Peel"
    }
}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)

Time to build the App

python setup.py py2app

Run ChoreApp

Place the ChoreApp file created in the above command with the chores.txt file and residents.txt file in the same directory. Then click on the ChoreApp to generate the output file assigning chores to residents.