<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def list_findings( self, parent, filter_=None, order_by=None, read_time=None, field_mask=None, page_size=None, retry=google.api_core.gapic_v1.method.DEFAULT, timeout=google.api_core.gapic_v1.method.DEFAULT, metadata=None, ):
 """ Lists an organization or source's findings. To list across all sources provide a ``-`` as the source id. Example: /v1beta1/organizations/123/sources/-/findings Example: Args: parent (str):
 Name of the source the findings belong to. Its format is "organizations/[organization\_id]/sources/[source\_id]". To list across all sources provide a source\_id of ``-``. For example: organizations/123/sources/- filter_ (str):
 Expression that defines the filter to apply across findings. The expression is a list of one or more restrictions combined via logical operators ``AND`` and ``OR``. Parentheses are not supported, and ``OR`` has higher precedence than ``AND``. Restrictions have the form ``<field> <operator> <value>`` and may have a ``-`` character in front of them to indicate negation. Examples include: - name - source\_properties.a\_property - security\_marks.marks.marka The supported operators are: - ``=`` for all value types. - ``>``, ``<``, ``>=``, ``<=`` for integer values. - ``:``, meaning substring matching, for strings. The supported value types are: - string literals in quotes. - integer literals without quotes. - boolean literals ``true`` and ``false`` without quotes. For example, ``source_properties.size = 100`` is a valid filter string. order_by (str):
 Expression that defines what fields and order to use for sorting. The string value should follow SQL syntax: comma separated list of fields. For example: "name,resource\_properties.a\_property". The default sorting order is ascending. To specify descending order for a field, a suffix " desc" should be appended to the field name. For example: "name desc,source\_properties.a\_property". Redundant space characters in the syntax are insignificant. "name desc,source\_properties.a\_property" and " name desc , source\_properties.a\_property " are equivalent. read_time (Union[dict, ~google.cloud.securitycenter_v1beta1.types.Timestamp]):
 Time used as a reference point when filtering findings. The filter is limited to findings existing at the supplied time and their values are those at that specific time. Absence of this field will default to the API's version of NOW. If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.securitycenter_v1beta1.types.Timestamp` field_mask (Union[dict, ~google.cloud.securitycenter_v1beta1.types.FieldMask]):
 Optional. A field mask to specify the Finding fields to be listed in the response. An empty field mask will list all fields. If a dict is provided, it must be of the same form as the protobuf message :class:`~google.cloud.securitycenter_v1beta1.types.FieldMask` page_size (int):
 The maximum number of resources contained in the underlying API response. If page streaming is performed per- resource, this parameter does not affect the return value. If page streaming is performed per-page, this determines the maximum number of resources in a page. retry (Optional[google.api_core.retry.Retry]):
 A retry object used to retry requests. If ``None`` is specified, requests will not be retried. timeout (Optional[float]):
 The amount of time, in seconds, to wait for the request to complete. Note that if ``retry`` is specified, the timeout applies to each individual attempt. metadata (Optional[Sequence[Tuple[str, str]]]):
 Additional metadata that is provided to the method. Returns: A :class:`~google.gax.PageIterator` instance. By default, this is an iterable of :class:`~google.cloud.securitycenter_v1beta1.types.Finding` instances. This object can also be configured to iterate over the pages of the response through the `options` parameter. Raises: google.api_core.exceptions.GoogleAPICallError: If the request failed for any reason. google.api_core.exceptions.RetryError: If the request failed due to a retryable error and retry attempts failed. ValueError: If the parameters are invalid. """

        # Wrap the transport method to add retry and timeout logic.
        if "list_findings" not in self._inner_api_calls:
            self._inner_api_calls[
                "list_findings"
            ] = google.api_core.gapic_v1.method.wrap_method(
                self.transport.list_findings,
                default_retry=self._method_configs["ListFindings"].retry,
                default_timeout=self._method_configs["ListFindings"].timeout,
                client_info=self._client_info,
            )

        request = securitycenter_service_pb2.ListFindingsRequest(
            parent=parent,
            filter=filter_,
            order_by=order_by,
            read_time=read_time,
            field_mask=field_mask,
            page_size=page_size,
        )
        if metadata is None:
            metadata = []
        metadata = list(metadata)
        try:
            routing_header = [("parent", parent)]
        except AttributeError:
            pass
        else:
            routing_metadata = google.api_core.gapic_v1.routing_header.to_grpc_metadata(
                routing_header
            )
            metadata.append(routing_metadata)

        iterator = google.api_core.page_iterator.GRPCIterator(
            client=None,
            method=functools.partial(
                self._inner_api_calls["list_findings"],
                retry=retry,
                timeout=timeout,
                metadata=metadata,
            ),
            request=request,
            items_field="findings",
            request_token_field="page_token",
            response_token_field="next_page_token",
        )
        return iterator