'Save the descriptor\'s fields. it doesn\'t descend the course dag to save the children.
Return the new descriptor (updated location).
raises ItemNotFoundError if the location does not exist.
Creates a new course version. If the descriptor\'s location has a org and course and run, it moves the course head
pointer. If the version_guid of the descriptor points to a non-head version and there\'s been an intervening
change to this item, it raises a VersionConflictError unless force is True. In the force case, it forks
the course but leaves the head pointer where it is (this change will not be in the course head).
The implementation tries to detect which, if any changes, actually need to be saved and thus won\'t version
the definition, structure, nor course if they didn\'t change.'

def update_item(self, descriptor, user_id, allow_not_found=False, force=False, **kwargs):

    partitioned_fields = self.partition_xblock_fields_by_scope(descriptor)
    return (self._update_item_from_fields(user_id, descriptor.location.course_key, BlockKey.from_usage_key(descriptor.location), partitioned_fields, descriptor.definition_locator, allow_not_found, force, **kwargs) or descriptor)
