can close an event and set winner
This commit is contained in:
parent
3b990654cc
commit
f09f32c2ea
1 changed files with 75 additions and 4 deletions
|
|
@ -72,6 +72,7 @@ class Event(object):
|
||||||
self.begin = None
|
self.begin = None
|
||||||
self.end = None
|
self.end = None
|
||||||
self.location = None
|
self.location = None
|
||||||
|
self.winner = None
|
||||||
self.backend = backend
|
self.backend = backend
|
||||||
self.members = OrderedDict()
|
self.members = OrderedDict()
|
||||||
self.load()
|
self.load()
|
||||||
|
|
@ -85,6 +86,9 @@ class Event(object):
|
||||||
|
|
||||||
return self.begin < datetime.now() < self.end
|
return self.begin < datetime.now() < self.end
|
||||||
|
|
||||||
|
def is_closed(self):
|
||||||
|
return self.end < datetime.now()
|
||||||
|
|
||||||
def format_duration(self):
|
def format_duration(self):
|
||||||
if not self.begin or not self.end:
|
if not self.begin or not self.end:
|
||||||
return None
|
return None
|
||||||
|
|
@ -110,6 +114,12 @@ class Event(object):
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
if line.startswith('h1. '):
|
if line.startswith('h1. '):
|
||||||
self.title = line[4:]
|
self.title = line[4:]
|
||||||
|
elif line.startswith('h3=. '):
|
||||||
|
m = re.match('h3=. Event finished. Winner is "(.*)":/users/(\d+)\!', line)
|
||||||
|
if not m:
|
||||||
|
print 'Unable to parse h3=: %s' % line
|
||||||
|
continue
|
||||||
|
self.winner = Member(int(m.group(2)), m.group(1))
|
||||||
elif line.startswith('h2. '):
|
elif line.startswith('h2. '):
|
||||||
continue
|
continue
|
||||||
elif line.startswith('h3. '):
|
elif line.startswith('h3. '):
|
||||||
|
|
@ -120,6 +130,8 @@ class Event(object):
|
||||||
member = Member(int(m.group(2)), m.group(1))
|
member = Member(int(m.group(2)), m.group(1))
|
||||||
if member.id == self.my_id:
|
if member.id == self.my_id:
|
||||||
member.is_me = True
|
member.is_me = True
|
||||||
|
if member.id == self.winner.id:
|
||||||
|
self.winner = member
|
||||||
self.members[member.id] = member
|
self.members[member.id] = member
|
||||||
elif self.description is None and len(line) > 0 and line != '{{TOC}}':
|
elif self.description is None and len(line) > 0 and line != '{{TOC}}':
|
||||||
self.description = line
|
self.description = line
|
||||||
|
|
@ -188,10 +200,15 @@ class Event(object):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def save(self, message):
|
def save(self, message):
|
||||||
|
if self.winner:
|
||||||
|
finished = u'\nh3=. Event finished. Winner is "%s":/users/%d!\n' % (self.winner.name,
|
||||||
|
self.winner.id)
|
||||||
|
else:
|
||||||
|
finished = u''
|
||||||
s = u"""h1. %s
|
s = u"""h1. %s
|
||||||
|
|
||||||
{{TOC}}
|
{{TOC}}
|
||||||
|
%s
|
||||||
h2. Event
|
h2. Event
|
||||||
|
|
||||||
%s
|
%s
|
||||||
|
|
@ -205,6 +222,7 @@ h2. Event
|
||||||
h2. Attendees
|
h2. Attendees
|
||||||
|
|
||||||
""" % (self.title,
|
""" % (self.title,
|
||||||
|
finished,
|
||||||
self.description,
|
self.description,
|
||||||
self.date.strftime('%Y-%m-%d') if self.date else '_Unknown_',
|
self.date.strftime('%Y-%m-%d') if self.date else '_Unknown_',
|
||||||
self.begin.strftime('%H:%M') if self.begin else '_Unknown_',
|
self.begin.strftime('%H:%M') if self.begin else '_Unknown_',
|
||||||
|
|
@ -333,7 +351,15 @@ class Boobathon(ReplApplication):
|
||||||
"""
|
"""
|
||||||
self.event.load()
|
self.event.load()
|
||||||
for member in self.event.members.itervalues():
|
for member in self.event.members.itervalues():
|
||||||
s = u' %s %20s %s|' % ('->' if member.is_me else ' ', member.shortname(), self.BOLD)
|
if member.is_me and member is self.event.winner:
|
||||||
|
status = '\o/ ->'
|
||||||
|
elif member.is_me:
|
||||||
|
status = ' ->'
|
||||||
|
elif member is self.event.winner:
|
||||||
|
status = ' \o/'
|
||||||
|
else:
|
||||||
|
status = ' '
|
||||||
|
s = u' %s%20s %s|' % (status, member.shortname(), self.BOLD)
|
||||||
for task in member.tasks:
|
for task in member.tasks:
|
||||||
if task.status == task.STATUS_DONE:
|
if task.status == task.STATUS_DONE:
|
||||||
s += '##'
|
s += '##'
|
||||||
|
|
@ -420,6 +446,29 @@ class Boobathon(ReplApplication):
|
||||||
sys.stdout.write('\n')
|
sys.stdout.write('\n')
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
|
def complete_close(self, text, line, *ignored):
|
||||||
|
args = line.split(' ')
|
||||||
|
if len(args) == 2:
|
||||||
|
self.event.load()
|
||||||
|
return [member.name for member in self.event.members.itervalues()]
|
||||||
|
|
||||||
|
def do_close(self, name):
|
||||||
|
"""
|
||||||
|
close WINNER
|
||||||
|
|
||||||
|
Close the event and set the winner.
|
||||||
|
"""
|
||||||
|
self.event.load()
|
||||||
|
|
||||||
|
for member in self.event.members.itervalues():
|
||||||
|
if member.name == name:
|
||||||
|
self.winner = member
|
||||||
|
if self.save_event('Close event'):
|
||||||
|
print 'Event is now closed. Winner is %s!' % self.winner.name
|
||||||
|
return
|
||||||
|
|
||||||
|
print '"%s" not found' % name
|
||||||
|
|
||||||
def complete_edit(self, text, line, *ignored):
|
def complete_edit(self, text, line, *ignored):
|
||||||
args = line.split(' ')
|
args = line.split(' ')
|
||||||
if len(args) == 2:
|
if len(args) == 2:
|
||||||
|
|
@ -489,6 +538,8 @@ class Boobathon(ReplApplication):
|
||||||
if task.status == task.STATUS_DONE:
|
if task.status == task.STATUS_DONE:
|
||||||
accompl += 1
|
accompl += 1
|
||||||
print '%d tasks (%d accomplished)' % (len(member.tasks), accompl)
|
print '%d tasks (%d accomplished)' % (len(member.tasks), accompl)
|
||||||
|
if member is self.event.winner:
|
||||||
|
print '=== %s is the winner!' % member.name
|
||||||
print ''
|
print ''
|
||||||
|
|
||||||
print 'Use the "tasks" command to display all tasks'
|
print 'Use the "tasks" command to display all tasks'
|
||||||
|
|
@ -504,8 +555,8 @@ class Boobathon(ReplApplication):
|
||||||
print 'You have already joined this event.'
|
print 'You have already joined this event.'
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.event.currently_in_event():
|
if self.event.is_closed():
|
||||||
print 'Unable to join during the event.'
|
print 'Boobathon is closed.'
|
||||||
return
|
return
|
||||||
|
|
||||||
m = Member(self.event.backend.browser.get_userid(), None)
|
m = Member(self.event.backend.browser.get_userid(), None)
|
||||||
|
|
@ -525,6 +576,10 @@ class Boobathon(ReplApplication):
|
||||||
print 'Unable to leave during the event, loser!'
|
print 'Unable to leave during the event, loser!'
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if self.event.is_closed():
|
||||||
|
print 'Boobathon is closed.'
|
||||||
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.event.members.pop(self.event.backend.browser.get_userid())
|
self.event.members.pop(self.event.backend.browser.get_userid())
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
|
@ -544,6 +599,10 @@ class Boobathon(ReplApplication):
|
||||||
print 'You have not joined this event.'
|
print 'You have not joined this event.'
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if self.event.is_closed():
|
||||||
|
print 'Boobathon is closed.'
|
||||||
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
task_id = int(line)
|
task_id = int(line)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
|
@ -570,6 +629,10 @@ class Boobathon(ReplApplication):
|
||||||
print 'You have not joined this event.'
|
print 'You have not joined this event.'
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if self.event.is_closed():
|
||||||
|
print 'Boobathon is closed.'
|
||||||
|
return
|
||||||
|
|
||||||
backend, capability = self.parse_command_args(line, 2, 2)
|
backend, capability = self.parse_command_args(line, 2, 2)
|
||||||
if not backend[0].isupper():
|
if not backend[0].isupper():
|
||||||
print 'The backend name "%s" needs to start with a capital.' % backend
|
print 'The backend name "%s" needs to start with a capital.' % backend
|
||||||
|
|
@ -647,6 +710,10 @@ class Boobathon(ReplApplication):
|
||||||
print 'You have not joined this event.'
|
print 'You have not joined this event.'
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if self.event.is_closed():
|
||||||
|
print 'Boobathon is closed.'
|
||||||
|
return
|
||||||
|
|
||||||
for i, task in enumerate(mem.tasks):
|
for i, task in enumerate(mem.tasks):
|
||||||
if task.status == task.STATUS_PROGRESS:
|
if task.status == task.STATUS_PROGRESS:
|
||||||
print 'Task (%s,%s) done! (%d%%)' % (task.backend, task.capability, (i+1)*100/len(mem.tasks))
|
print 'Task (%s,%s) done! (%d%%)' % (task.backend, task.capability, (i+1)*100/len(mem.tasks))
|
||||||
|
|
@ -675,6 +742,10 @@ class Boobathon(ReplApplication):
|
||||||
print 'You have not joined this event.'
|
print 'You have not joined this event.'
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if self.event.is_closed():
|
||||||
|
print 'Boobathon is closed.'
|
||||||
|
return
|
||||||
|
|
||||||
for task in mem.tasks:
|
for task in mem.tasks:
|
||||||
if task.status == task.STATUS_PROGRESS:
|
if task.status == task.STATUS_PROGRESS:
|
||||||
print 'Task (%s,%s) canceled.' % (task.backend, task.capability)
|
print 'Task (%s,%s) canceled.' % (task.backend, task.capability)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue