Source code for ipfshttpclient.client.key

from . import base


class Section(base.SectionBase):
	#TODO: Add `export(name, password)`
	
	
	@base.returns_single_item(base.ResponseBase)
	def gen(self, key_name: str, type: str, size: int = 2048,
	        **kwargs: base.CommonArgs):
		"""Adds a new public key that can be used for
		:meth:`~ipfshttpclient.Client.name.publish`
		
		.. code-block:: python
		
			>>> client.key.gen('example_key_name')
			{'Name': 'example_key_name',
			 'Id': 'QmQLaT5ZrCfSkXTH6rUKtVidcxj8jrW3X2h75Lug1AV7g8'}
		
		Parameters
		----------
		key_name
			Name of the new Key to be generated. Used to reference the Keys.
		type
			Type of key to generate. The current possible keys types are:
			
			 * ``"rsa"``
			 * ``"ed25519"``
		size
			Bitsize of key to generate
		
		Returns
		-------
			dict
		
		+------+---------------------------------------------------+
		| Name | The name of the newly generated key               |
		+------+---------------------------------------------------+
		| Id   | The key ID/fingerprint of the newly generated key |
		+------+---------------------------------------------------+
		"""
		
		opts = {"type": type, "size": size}
		kwargs.setdefault("opts", {}).update(opts)
		args = (key_name,)
		
		return self._client.request('/key/gen', args, decoder='json', **kwargs)
	
	
	#TODO: Add `import(name, pam, password)`
	
	
	@base.returns_single_item(base.ResponseBase)
	def list(self, **kwargs: base.CommonArgs):
		"""Returns a list of all available IPNS keys
		
		.. code-block:: python
		
			>>> client.key.list()
			{'Keys': [
				{'Name': 'self',
				 'Id': 'QmQf22bZar3WKmojipms22PkXH1MZGmvsqzQtuSvQE3uhm'},
				{'Name': 'example_key_name',
				 'Id': 'QmQLaT5ZrCfSkXTH6rUKtVidcxj8jrW3X2h75Lug1AV7g8'}
			]}
		
		Returns
		-------
			dict
		
		+------+--------------------------------------------------------+
		| Keys | List of dictionaries with Names and Ids of public keys |
		+------+--------------------------------------------------------+
		"""
		return self._client.request('/key/list', decoder='json', **kwargs)
	
	
	@base.returns_single_item(base.ResponseBase)
	def rename(self, key_name: str, new_key_name: str, **kwargs: base.CommonArgs):
		"""Rename an existing key
		
		.. code-block:: python
		
			>>> client.key.rename("bla", "personal")
			{"Was": "bla",
			 "Now": "personal",
			 "Id": "QmeyrRNxXaasZaoDXcCZgryoBCga9shaHQ4suHAYXbNZF3",
			 "Overwrite": False}
		
		Parameters
		----------
		key_name
			Current name of the key to rename
		new_key_name
			New name of the key
		
		Returns
		-------
			dict
				Information about the key renameal
		"""
		args = (key_name, new_key_name)
		return self._client.request(
			'/key/rename', args, decoder='json', **kwargs
		)
	
	
	@base.returns_single_item(base.ResponseBase)
	def rm(self, key_name: str, *key_names: str, **kwargs: base.CommonArgs):
		"""Removes one or more keys
		
		.. code-block:: python
		
			>>> client.key.rm("bla")
			{"Keys": [
				{"Name": "bla",
				 "Id": "QmfJpR6paB6h891y7SYXGe6gapyNgepBeAYMbyejWA4FWA"}
			]}
		
		Parameters
		----------
		key_name
			Name of the key(s) to remove.
		
		Returns
		-------
			dict
		
		+------+--------------------------------------------------+
		| Keys | List of key names and IDs that have been removed |
		+------+--------------------------------------------------+
		"""
		args = (key_name,) + key_names
		return self._client.request('/key/rm', args, decoder='json', **kwargs)