<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def lookup_hostname(self, ip):
 		"""Look up a lease object with given ip address and return the associated client hostname. 		@type ip: str 		@rtype: str or None 		@raises ValueError: 		@raises OmapiError: 		@raises OmapiErrorNotFound: if no lease object with the given ip address could be found 		@raises OmapiErrorAttributeNotFound: if lease could be found, but objects lacks a hostname 		@raises socket.error: 		"""

		res = self.lookup_by_lease(ip=ip)
		if "client-hostname" not in res:
			raise OmapiErrorAttributeNotFound()
		return res["client-hostname"].decode('utf-8')