<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_log_nodes(self, log_id, ancestor_levels, descendant_levels, include_siblings):
 """Gets a portion of the hierarchy for the given log. arg: log_id (osid.id.Id):
 the ``Id`` to query arg: ancestor_levels (cardinal):
 the maximum number of ancestor levels to include. A value of 0 returns no parents in the node. arg: descendant_levels (cardinal):
 the maximum number of descendant levels to include. A value of 0 returns no children in the node. arg: include_siblings (boolean):
 ``true`` to include the siblings of the given node, ``false`` to omit the siblings return: (osid.logging.LogNode) - a log node raise: NotFound - ``log_id`` is not found raise: NullArgument - ``log_id`` is ``null`` raise: OperationFailed - unable to complete request raise: PermissionDenied - authorization failure *compliance: mandatory -- This method must be implemented.* """

        # Implemented from template for
        # osid.resource.BinHierarchySession.get_bin_nodes
        return objects.LogNode(self.get_log_node_ids(
            log_id=log_id,
            ancestor_levels=ancestor_levels,
            descendant_levels=descendant_levels,
            include_siblings=include_siblings)._my_map, runtime=self._runtime, proxy=self._proxy)