def get(self, page_name):
     store_django_user(self)
     if self.user.is_authenticated():
         if page_name in pulses:
             self.page_name = page_name
             IOLoop.instance().add_callback(self.send_update_timeout)
         else:
             self.set_status(400, "Invalid page")
             self.finish()
     else:
         self.redirect("/login/")
    def post(self):
        store_django_user(self)
        if self.user.is_authenticated():
            if (('node_id' in self.request.arguments or
                 'connection_id' in self.request.arguments) and
                'page_name' in self.request.arguments):
                object_id = None
                object_type = None
                page_name = self.get_argument('page_name')

                if 'node_id' in self.request.arguments:
                    object_id = self.get_argument('node_id')
                    object_type = 'node'
                else:
                    object_id = self.get_argument('connection_id')
                    object_type = 'connection'

                if page_name in object_locks:
                    if not object_id:
                        if self.user.username in object_locks[page_name]:
                            self.finish()
                            object_id = object_locks[page_name][
                                self.user.username]['id']
                            object_type = object_locks[page_name][
                                self.user.username]['type']
                            del object_locks[page_name][self.user.username]
                            for user in pulses[page_name]:
                                if user != self.user.username:
                                    send_update = (
                                        pulses[page_name][user].callback)
                                    IOLoop.instance().add_callback(send_update,
                                        object_lock={'id' : object_id,
                                            'type' : object_type})
                        else:
                            self.set_status(400, 'You do not have any object ' +
                                                 'locks')
                            self.finish()
                        return
                    elif (self.user.username in object_locks[page_name] and
                          object_locks[page_name][self.user.username]['id'] ==
                          object_id):
                        self.set_status(400, 'You are already interacting ' +
                            'with that object')
                        self.finish()
                        return
                    elif object_id in [lock['id'] for lock in
                                       object_locks[page_name].values()]:
                        self.set_status(400, 'The object you are attempting ' +
                            'to interact with is locked by someone else')
                        self.finish()
                        return
                else:
                    self.set_status(400, 'Invalid page')
                    self.finish()
                    return

                node_id_dict_list = wh_mapper_models.SystemNode.objects.filter(
                    page_name=page_name).values('id', 'parent_node_id',
                                                'parent_connection_id')

                if not node_id_dict_list:
                    self.set_status(400, 'Invalid page')
                    self.finish()
                    return

                family_id_list = []

                object_id_valid = False
                for node_id_dict in node_id_dict_list:
                    if (object_type == 'node' and
                        node_id_dict['id'] == object_id):
                        family_id_list.append(object_id)
                        object_id_valid = True
                        break
                    elif (object_type == 'connection' and
                          node_id_dict['parent_connection_id'] == object_id):
                        family_id_list.append(node_id_dict['id'])
                        family_id_list.append(object_id)
                        object_id_valid = True
                        break

                if not object_id_valid:
                    self.set_status(400, 'Invalid map object')
                    self.finish()
                    return

                if object_type == 'node':
                    current_level_id_list = family_id_list
                    while current_level_id_list:
                        temp_list = []
                        for id_dict in node_id_dict_list:
                            if (id_dict['parent_node_id'] in
                                current_level_id_list):
                                temp_list.append(id_dict['id'])
                                if id_dict['parent_connection_id']:
                                    temp_list.append(
                                        id_dict['parent_connection_id'])
                        current_level_id_list = temp_list
                        if current_level_id_list:
                            family_id_list.extend(current_level_id_list)

                    currentParentID = family_id_list[0]
                    while currentParentID:
                        tempID = currentParentID
                        currentParentID = None
                        for id_dict in node_id_dict_list:
                            if id_dict['id'] == tempID:
                                currentParentID = id_dict['parent_node_id']
                                family_id_list.append(currentParentID)
                                break

                object_lock_id_list = [object_locks[page_name][user]['id']
                                       for user in object_locks[page_name] if
                                       user != self.user.username]

                if set(family_id_list).intersection(object_lock_id_list):
                    self.set_status(400, 'Cannot lock an object that is ' +
                                    'related to a locked object')
                    self.finish()
                    return

                object_locks[page_name][self.user.username] = {
                    'id' : object_id, 'type' : object_type}
                self.finish()
                for user in pulses[page_name]:
                    if user != self.user.username:
                        send_update = pulses[page_name][user].callback
                        IOLoop.instance().add_callback(send_update,
                            object_lock={'username' : self.user.username,
                                'type' : object_type, 'id' : object_id})
            else:
                self.set_status(400, 'Invalid object lock request')
                self.finish()
        else:
            self.redirect('/login/')