<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def lease(self, time_to_live, lease_id=None, timeout=None):
 """ Creates a lease which expires if the server does not receive a keep alive within a given time to live period. All keys attached to the lease will be expired and deleted if the lease expires. Each expired key generates a delete event in the event history. :param time_to_live: TTL is the advisory time-to-live in seconds. :type time_to_live: int :param lease_id: ID is the requested ID for the lease. If ID is None, the lessor (etcd) chooses an ID. :type lease_id: int or None :param timeout: Request timeout in seconds. :type timeout: int :returns: A lease object representing the created lease. This can be used for refreshing or revoking the least etc. :rtype: instance of :class:`txaioetcd.Lease` """

        assembler = commons.LeaseRequestAssembler(self._url, time_to_live, lease_id)

        obj = yield self._post(assembler.url, assembler.data, timeout)

        lease = Lease._parse(self, obj)

        returnValue(lease)