code: def adapter_port(self):
          
          if self._adapter_port is None:
              port_uri = self.get_property('adapter-port-uri')
              assert port_uri is not None
              m = re.match(r'^(/api/adapters/[^/]+)/.*', port_uri)
              adapter_uri = m.group(1)
              adapter_mgr = self.manager.storage_group.manager.cpc.adapters
              filter_args = {'object-uri': adapter_uri}
              adapter = adapter_mgr.find(**filter_args)
              port_mgr = adapter.ports
              port = port_mgr.resource_object(port_uri)
              self._adapter_port = port
          return self._adapter_port
docs: :class:`~zhmcclient.Port`: The storage adapter port associated with
          this virtual storage resource, once discovery has determined which
          port to use for this virtual storage resource.
  
          This applies to both, FCP and FICON/ECKD typed storage groups.
  
          The returned adapter port object has only a minimal set of properties
          set ('object-id', 'object-uri', 'class', 'parent').
  
          Authorization requirements:
  
          * Object-access permission to the storage group owning this
            virtual storage resource.
          * Object-access permission to the CPC of the storage adapter.
          * Object-access permission to the storage adapter.
  
          Raises:
  
            :exc:`~zhmcclient.HTTPError`
            :exc:`~zhmcclient.ParseError`
            :exc:`~zhmcclient.AuthError`
            :exc:`~zhmcclient.ConnectionError`