def sprintCleanup(): for sprint in Sprint.loadAll(): if 'deleted' in sprint.flags: sprint.delete(deep = True) print "Deleted sprint %d (%s: %s)<br>" % (sprint.id, sprint.project.safe.name, sprint.safe.name) continue if (not sprint.isOver()) or 'cleaned-up' in sprint.flags: continue tasks = Task.loadAll(sprintid = sprint.id, deleted = False) tasks = filter(lambda task: task.stillOpen(), tasks) for task in tasks: task.status = 'deferred' task.creator = sprint.owner task.timestamp = sprint.end task.revise() sprint.flags.add('cleaned-up') sprint.save() print "Cleaned up sprint %d (%s: %s): %s deferred<br>" % (sprint.id, sprint.project.safe.name, sprint.safe.name, pluralize(len(tasks), 'task', 'tasks'))
def apiSprintsList(handler, calendar = False, start = None, end = None, _ = None): def die(msg): print toJS({'error': msg}) done() handler.wrappers = False start = int(start) if start else None end = int(end) if end else None sprints = filter(lambda sprint: not sprint.isHidden(handler.session['user']), Sprint.loadAll()) if start and end: sprints = filter(lambda sprint: (start <= sprint.start <= end) or (start <= sprint.end <= end), sprints) rtn = [{'id': sprint.id, 'title': "%s - %s" % (sprint.project.name, sprint.name) if calendar else sprint.name, 'start': tsToDate(sprint.start).strftime('%Y-%m-%d'), 'end': tsToDate(sprint.end).strftime('%Y-%m-%d'), 'active': sprint.isActive(), 'member': handler.session['user'] in sprint.members } for sprint in sprints] if calendar: for entry in rtn: entry.update({'color': 'green' if entry['member'] and entry['active'] else '#36c;'}) print toJS(rtn)