pyceo/pylib/csc/apps/urwid/search.py

87 lines
2.4 KiB
Python

import urwid
from csc.apps.urwid.widgets import *
from csc.apps.urwid.window import *
from csc.adm import members, terms
from csc.common.excep import InvalidArgument
class TermPage(WizardPanel):
def init_widgets(self):
self.term = SingleEdit("Term: ")
self.widgets = [
urwid.Text( "Terms Members" ),
urwid.Divider(),
self.term,
]
def check(self):
try:
self.state['term'] = self.term.get_edit_text()
terms.parse( self.state['term'] )
except:
self.focus_widget( self.term )
set_status( "Invalid term" )
return True
mlist = members.list_term( self.state['term'] ).values()
pop_window()
member_list( mlist )
class NamePage(WizardPanel):
def init_widgets(self):
self.name = SingleEdit("Name: ")
self.widgets = [
urwid.Text( "Members by Name" ),
urwid.Divider(),
self.name,
]
def check(self):
self.state['name'] = self.name.get_edit_text()
if not self.state['name']:
self.focus_widget( self.name )
set_status( "Invalid name" )
return True
mlist = members.list_name( self.state['name'] ).values()
pop_window()
member_list( mlist )
class GroupPage(WizardPanel):
def init_widgets(self):
self.group = SingleEdit("Group: ")
self.widgets = [
urwid.Text( "Members by Group" ),
urwid.Divider(),
self.group,
]
def check(self):
self.state['group'] = self.group.get_edit_text()
if not self.state['group']:
self.focus_widget( self.group )
set_status( "Invalid group" )
return True
mlist = members.list_group( self.state['group'] ).values()
pop_window()
member_list( mlist )
def member_list(mlist):
mlist = list(mlist)
mlist.sort( lambda x, y: cmp(x['uid'], y['uid']) )
buf = ''
for member in mlist:
if 'uid' in member:
uid = member['uid'][0]
else:
uid = None
if 'program' in member:
program = member['program'][0]
else:
program = None
attrs = ( uid, member['cn'][0], program )
buf += "%10s %30s\n%41s\n\n" % attrs
set_status("Press escape to return to the menu")
push_window(urwid.ListBox([urwid.Text(buf)]))