<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def fetch(self, filter=None, order_by=None, group_by=[], page=None, page_size=None, query_parameters=None, commit=True, async=False, callback=None):
 """ Fetch objects according to given filter and page. Note: This method fetches all managed class objects and store them in local_name of the served object. which means that the parent object will hold them in a list. You can prevent this behavior by setting commit to False. In that case, the fetched children won't be added in the parent object cache. Args: filter (string):
 string that represents a predicate filter order_by (string):
 string that represents an order by clause group_by (string):
 list of names for grouping page (int):
 number of the page to load page_size (int):
 number of results per page commit (bool):
 boolean to update current object callback (function):
 Callback that should be called in case of a async request Returns: tuple: Returns a tuple of information (fetcher, served object, fetched objects, connection) Example: (<NUChildrenFetcher at aaaa>, <NUEntity at bbbb>, [<NUChildren at ccc>, <NUChildren at ddd>], <NURESTConnection at zzz>) """


        request = NURESTRequest(method=HTTP_METHOD_GET, url=self._prepare_url(), params=query_parameters)

        self._prepare_headers(request=request, filter=filter, order_by=order_by, group_by=group_by, page=page, page_size=page_size)

        if async:
            return self.parent_object.send_request(request=request, async=async, local_callback=self._did_fetch, remote_callback=callback, user_info={'commit': commit})

        connection = self.parent_object.send_request(request=request, user_info={'commit': commit})
        return self._did_fetch(connection=connection)