<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(self, full_properties=False, filter_args=None):
 """ List the Ports of this Adapter. If the adapter does not have any ports, an empty list is returned. Authorization requirements: * Object-access permission to this Adapter. Parameters: full_properties (bool):
 Controls whether the full set of resource properties should be retrieved, vs. only the short set as returned by the list operation. filter_args (dict):
 Filter arguments that narrow the list of returned resources to those that match the specified filter arguments. For details, see :ref:`Filtering`. `None` causes no filtering to happen, i.e. all resources are returned. Returns: : A list of :class:`~zhmcclient.Port` objects. Raises: :exc:`~zhmcclient.HTTPError` :exc:`~zhmcclient.ParseError` :exc:`~zhmcclient.AuthError` :exc:`~zhmcclient.ConnectionError` """

        uris_prop = self.adapter.port_uris_prop
        if not uris_prop:
            # Adapter does not have any ports
            return []

        uris = self.adapter.get_property(uris_prop)
        assert uris is not None

        # TODO: Remove the following circumvention once fixed.
        # The following line circumvents a bug for FCP adapters that sometimes
        # causes duplicate URIs to show up in this property:
        uris = list(set(uris))

        resource_obj_list = []
        for uri in uris:

            resource_obj = self.resource_class(
                manager=self,
                uri=uri,
                name=None,
                properties=None)

            if self._matches_filters(resource_obj, filter_args):
                resource_obj_list.append(resource_obj)
                if full_properties:
                    resource_obj.pull_full_properties()

        self._name_uri_cache.update_from(resource_obj_list)
        return resource_obj_list