def _save_free_classrooms(cls, version, classrooms):
     # key is [week][building][day][number]
     free_schedule = AutoaddDict(
         lambda _: AutoaddDict(
             lambda _: AutoaddDict(
                 lambda _: AutoaddDict(
                     lambda _: list()
                 )
             )
         )
     )
     def process_week(classroom, week):
         data = classroom.week(week)
         for (dayid, day) in data:
             for (number, lesson) in zip(xrange(len(day.lessons())),
                                         day.lessons()):
                 if lesson is None:
                     week_type = week.name
                     building = classroom.classroom_id().building
                     classroom_num = classroom.classroom_id().number
                     repr = (unicode(classroom_num), unicode(building))
                     free_schedule[week_type][building][dayid][number] \
                         .append(repr)
     for classroom in classrooms:
         process_week(classroom, UPPER_WEEK)
         process_week(classroom, LOWER_WEEK)
     for (wt, wt_data) in free_schedule.iteritems():
         for (b, b_data) in wt_data.iteritems():
             for (day, day_data) in b_data.iteritems():
                 record = GsqlFreeClassroomsView.from_data(day_data,
                                                 building=b,
                                                 week=wt, day=day,
                                                 version=version)
                 record.put()
示例#2
0
def free_classrooms(request):
    conv = lambda x: x != '*' and x or None
    curr = current_lesson() or 1
    frm = int(request.GET.get('lesson', curr))
    len = int(request.GET.get('length', 1))
    timestamp = {
        'week': request.GET.get('week', current_week().name),
        'building': conv(request.GET.get('building', '*')),
        'day': int(request.GET.get('day', current_weekday())),
        'lessons': range(frm, frm + len)
    }
    buildings = AutoaddDict(lambda _: list())
    for classroom in SOURCE.free_classrooms(**timestamp):
        buildings[classroom.building].append(classroom)
    buildings = sorted(buildings.iteritems(), cmp=lambda a, b: cmp(a[0], b[0]))
    fbuildings = map(lambda x: {'name': x[0],
                                'classrooms': sorted(x[1], cmp=cid_cmp)},
                     buildings)
    inits = dict(request.GET.items())
    inits.update(timestamp)
    inits['lesson'] = frm
    data = {'form': FindFreeClassroomsForm(initial=inits),
            'buildings': fbuildings,
            'week_txt': timestamp['week']}
    return render_response(request, 'free_classrooms.html', data)