import urwid, ldap from ceo import members, terms, ldapi from ceo.urwid.widgets import * from ceo.urwid.window import * class IntroPage(WizardPanel): def init_widgets(self): self.widgets = [ urwid.Text( "Renewing Membership" ), urwid.Divider(), urwid.Text( "CSC membership is $2.00 per term. You may pre-register " "for future terms if desired." ) ] def focusable(self): return False class ClubUserIntroPage(IntroPage): def init_widgets(self): self.widgets = [ urwid.Text( "Renewing Club User Account" ), urwid.Divider(), urwid.Text( "In order for clubs to maintain websites hosted by " "the Computer Science Club, they need access to our " "machines. We grant accounts to club users at no charge " "in order to provide this access. Registering a user " "in this way grants one term of free access to our " "machines, without any other membership privileges " "(they can't vote, hold office, etc). If such a user " "decides to join, use the Renew Membership option." ) ] class UserPage(WizardPanel): def init_widgets(self): self.userid = LdapWordEdit(csclub_uri, csclub_base, 'uid', "Username: ") self.widgets = [ urwid.Text( "Member Information" ), urwid.Divider(), self.userid, ] def check(self): self.state['userid'] = self.userid.get_edit_text() self.state['member'] = None if self.state['userid']: self.state['member'] = members.get(self.userid.get_edit_text()) if not self.state['member']: set_status("Member not found") self.focus_widget(self.userid) return True class TermPage(WizardPanel): def __init__(self, state, utype='member'): self.utype = utype WizardPanel.__init__(self, state) def init_widgets(self): self.start = SingleEdit("Start: ") self.count = SingleIntEdit("Count: ") self.widgets = [ urwid.Text( "Terms to Register" ), urwid.Divider(), self.start, self.count, ] def activate(self): if not self.start.get_edit_text(): self.terms = self.state['member'].get('term', []) self.nmterms = self.state['member'].get('nonMemberTerm', []) if self.utype == 'member': self.start.set_edit_text( terms.next_unregistered( self.terms ) ) else: self.start.set_edit_text( terms.next_unregistered( self.terms + self.nmterms ) ) self.count.set_edit_text( "1" ) def check(self): try: self.state['terms'] = terms.interval( self.start.get_edit_text(), self.count.value() ) except Exception, e: self.focus_widget( self.start ) set_status( "Invalid start term" ) return True for term in self.state['terms']: if self.utype == 'member': already = term in self.terms else: already = term in self.terms or term in self.nmterms if already: self.focus_widget( self.start ) set_status( "Already registered for " + term ) return True if len(self.state['terms']) == 0: self.focus_widget(self.count) set_status( "Registering for zero terms?" ) return True class PayPage(WizardPanel): def init_widgets(self): self.midtext = urwid.Text("") self.widgets = [ urwid.Text("Membership Fee"), urwid.Divider(), self.midtext, ] def focusable(self): return False def activate(self): regterms = self.state['terms'] plural = "term" if len(self.state['terms']) > 1: plural = "terms" self.midtext.set_text("You are registering for %d %s, and owe the " "Computer Science Club $%d.00 in membership fees. " "Please deposit the money in the safe before " "continuing. " % ( len(regterms), plural, len(regterms * 2))) class EndPage(WizardPanel): def __init__(self, state, utype='member'): self.utype = utype WizardPanel.__init__(self, state) def init_widgets(self): self.headtext = urwid.Text("") self.midtext = urwid.Text("") self.widgets = [ self.headtext, urwid.Divider(), self.midtext, ] def focusable(self): return False def activate(self): problem = None try: self.headtext.set_text("Registration Succeeded") if self.utype == 'member': members.register( self.state['userid'], self.state['terms'] ) self.midtext.set_text("The member has been registered for the following " "terms: " + ", ".join(self.state['terms']) + ".") else: members.register_nonmember( self.state['userid'], self.state['terms'] ) self.midtext.set_text("The club user has been registered for the following " "terms: " + ", ".join(self.state['terms']) + ".") except ldap.LDAPError, e: problem = ldapi.format_ldaperror(e) except members.MemberException, e: problem = str(e) if problem: self.headtext.set_text("Failed to Register") self.midtext.set_text("You may refund any fees paid or retry. " "The error was:\n\n%s" % problem) def check(self): pop_window()