def handle(self, *args, **options):

        if len(args) != 1:
            raise CommandError('Incorrect arguments')

        try:
            with open(args[0]) as f:
                data = json.load(f)
        except __HOLE__ as exc:
            raise CommandError("Malformed JSON: %s" % exc.message)

        def slot_generator(mydata):
            for d in mydata['slots']:
                for h in d['hours']:
                    yield (d['day'], h)

        for roomcode, roomdesc in data['rooms'].iteritems():
            r = Room(code=roomcode, name=roomdesc)
            r.save()

        for desc in data['allocations']:
            started = False
            t = Topic.objects.get(name=desc['topic'])
            room = Room.objects.get(code=desc['room'])
            for (d, h) in slot_generator(data):
                if (d == desc['start_day'] and h == desc['first_slot']):
                    started = True
                if started:
                    s = Slot(start_time="%s %s" % (d, h), room=room, topic=t)
                    s.save()
                if (d == desc['end_day'] and h == desc['last_slot']):
                    break
dataset/ETHPy150Open openstack-infra/odsreg/scheduling/management/commands/loadslots.py/Command.handle