'Return the port for the client given the port id.
:param context: Request context.
:param port_id: The id of port to be queried.
:param neutron_client: A neutron client.
:param fields: The condition fields to query port data.
:returns: A dict of port data.
e.g. {\'port_id\': \'abcd\', \'fixed_ip_address\': \'1.2.3.4\'}'

def _show_port(self, context, port_id, neutron_client=None, fields=None):

    if (not neutron_client):
        neutron_client = get_client(context)
    try:
        if fields:
            result = neutron_client.show_port(port_id, fields=fields)
        else:
            result = neutron_client.show_port(port_id)
        return result.get('port')
    except neutron_client_exc.PortNotFoundClient:
        raise exception.PortNotFound(port_id=port_id)
    except neutron_client_exc.Unauthorized:
        raise exception.Forbidden()
    except neutron_client_exc.NeutronClientException as exc:
        msg = (_('Failed    to    access    port    %(port_id)s:    %(reason)s') % {'port_id': port_id, 'reason': exc})
        raise exception.NovaException(message=msg)
