Source code for ipfshttpclient.client.swarm

from . import base


class FiltersSection(base.SectionBase):
	@base.returns_single_item(base.ResponseBase)
	def add(self, address: base.multiaddr_t, *addresses: base.multiaddr_t,
	        **kwargs: base.CommonArgs):
		"""Adds a given multiaddr filter to the filter/ignore list
		
		This will add an address filter to the daemons swarm. Filters applied
		this way will not persist daemon reboots, to achieve that, add your
		filters to the configuration file.
		
		.. code-block:: python
		
			>>> client.swarm.filters.add("/ip4/192.168.0.0/ipcidr/16")
			{'Strings': ['/ip4/192.168.0.0/ipcidr/16']}
		
		Parameters
		----------
		address
			Multiaddr to avoid connecting to
		
		Returns
		-------
			dict
		
		+---------+-----------------------------+
		| Strings | List of swarm filters added |
		+---------+-----------------------------+
		"""
		args = (str(address), *(str(a) for a in address))
		return self._client.request('/swarm/filters/add', args, decoder='json', **kwargs)
	
	
	@base.returns_single_item(base.ResponseBase)
	def rm(self, address: base.multiaddr_t, *addresses: base.multiaddr_t,
	       **kwargs: base.CommonArgs):
		"""Removes a given multiaddr filter from the filter list
		
		This will remove an address filter from the daemons swarm. Filters
		removed this way will not persist daemon reboots, to achieve that,
		remove your filters from the configuration file.
		
		.. code-block:: python
		
			>>> client.swarm.filters.rm("/ip4/192.168.0.0/ipcidr/16")
			{'Strings': ['/ip4/192.168.0.0/ipcidr/16']}
		
		Parameters
		----------
		address
			Multiaddr filter to remove
		
		Returns
		-------
			dict
		
		+---------+-------------------------------+
		| Strings | List of swarm filters removed |
		+---------+-------------------------------+
		"""
		args = (str(address), *(str(a) for a in address))
		return self._client.request('/swarm/filters/rm', args, decoder='json', **kwargs)


class Section(base.SectionBase):
	filters = base.SectionProperty(FiltersSection)
	
	
	@base.returns_single_item(base.ResponseBase)
	def addrs(self, **kwargs: base.CommonArgs):
		"""Returns the addresses of currently connected peers by peer id
		
		.. code-block:: python
		
			>>> pprint(client.swarm.addrs())
			{'Addrs': {
				'QmNMVHJTSZHTWMWBbmBrQgkA1hZPWYuVJx2DpSGESWW6Kn': [
					'/ip4/10.1.0.1/tcp/4001',
					'/ip4/127.0.0.1/tcp/4001',
					'/ip4/51.254.25.16/tcp/4001',
					'/ip6/2001:41d0:b:587:3cae:6eff:fe40:94d8/tcp/4001',
					'/ip6/2001:470:7812:1045::1/tcp/4001',
					'/ip6/::1/tcp/4001',
					'/ip6/fc02:2735:e595:bb70:8ffc:5293:8af8:c4b7/tcp/4001',
					'/ip6/fd00:7374:6172:100::1/tcp/4001',
					'/ip6/fd20:f8be:a41:0:c495:aff:fe7e:44ee/tcp/4001',
					'/ip6/fd20:f8be:a41::953/tcp/4001'],
				'QmNQsK1Tnhe2Uh2t9s49MJjrz7wgPHj4VyrZzjRe8dj7KQ': [
					'/ip4/10.16.0.5/tcp/4001',
					'/ip4/127.0.0.1/tcp/4001',
					'/ip4/172.17.0.1/tcp/4001',
					'/ip4/178.62.107.36/tcp/4001',
					'/ip6/::1/tcp/4001'],

			}}
		
		Returns
		-------
			dict
				Multiaddrs of peers by peer id
		
		+-------+--------------------------------------------------------+
		| Addrs | Mapping of PeerIDs to a list its advertised multiaddrs |
		+-------+--------------------------------------------------------+
		"""
		return self._client.request('/swarm/addrs', decoder='json', **kwargs)
	
	
	@base.returns_single_item(base.ResponseBase)
	def connect(self, address: base.multiaddr_t, *addresses: base.multiaddr_t,
	            **kwargs: base.CommonArgs):
		"""Attempts to connect to a peer at the given multiaddr
		
		This will open a new direct connection to a peer address. The address
		format is an IPFS multiaddr, e.g.::
		
			/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
		
		.. code-block:: python
		
			>>> client.swarm.connect("/ip4/104.131.131.82/tcp/4001/ipfs/Qma … uvuJ")
			{'Strings': ['connect QmaCpDMGvV2BGHeYERUEnRQAwe3 … uvuJ success']}
		
		Parameters
		----------
		address
			Address of peer to connect to
		
		Returns
		-------
			dict
				Textual connection status report
		"""
		args = (str(address), *(str(a) for a in address))
		return self._client.request('/swarm/connect', args, decoder='json', **kwargs)
	
	
	@base.returns_single_item(base.ResponseBase)
	def disconnect(self, address: base.multiaddr_t, *addresses: base.multiaddr_t,
	               **kwargs: base.CommonArgs):
		"""Closes any open connection to a given multiaddr
		
		This will close a connection to a peer address. The address format is
		an IPFS multiaddr::
		
			/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
		
		The disconnect is not permanent; if IPFS needs to talk to that address
		later, it will reconnect. To avoid this, add a filter for the given
		address before disconnecting.
		
		.. code-block:: python
		
			>>> client.swarm.disconnect("/ip4/104.131.131.82/tcp/4001/ipfs/Qm … uJ")
			{'Strings': ['disconnect QmaCpDMGvV2BGHeYERUEnRQA … uvuJ success']}
		
		Parameters
		----------
		address
			Address of peer to disconnect from
		
		Returns
		-------
			dict
				Textual connection status report
		"""
		args = (str(address), *(str(a) for a in address))
		return self._client.request('/swarm/disconnect', args, decoder='json', **kwargs)
	
	
	@base.returns_single_item(base.ResponseBase)
	def peers(self, **kwargs: base.CommonArgs):
		"""Returns the addresses & IDs of currently connected peers
		
		.. code-block:: python
		
			>>> client.swarm.peers()
			{'Strings': [
				'/ip4/101.201.40.124/tcp/40001/ipfs/QmZDYAhmMDtnoC6XZ … kPZc',
				'/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYER … uvuJ',
				'/ip4/104.223.59.174/tcp/4001/ipfs/QmeWdgoZezpdHz1PX8 … 1jB6',

				'/ip6/fce3: … :f140/tcp/43901/ipfs/QmSoLnSGccFuZQJzRa … ca9z'
			]}
		
		Returns
		-------
			dict
		
		+---------+----------------------------------------------------+
		| Strings | List of Multiaddrs that the daemon is connected to |
		+---------+----------------------------------------------------+
		"""
		return self._client.request('/swarm/peers', decoder='json', **kwargs)