docs: def update_entity(self, table_name, entity, if_match='*', timeout=None):
          '''
          Updates an existing entity in a table. Throws if the entity does not exist. 
          The update_entity operation replaces the entire entity and can be used to 
          remove properties.
  
          :param str table_name:
              The name of the table containing the entity to update.
          :param entity:
              The entity to update. Could be a dict or an entity object. 
              Must contain a PartitionKey and a RowKey.
          :type entity: a dict or :class:`~azure.storage.table.models.Entity`
          :param str if_match:
              The client may specify the ETag for the entity on the 
              request in order to compare to the ETag maintained by the service 
              for the purpose of optimistic concurrency. The update operation 
              will be performed only if the ETag sent by the client matches the 
              value maintained by the server, indicating that the entity has 
              not been modified since it was retrieved by the client. To force 
              an unconditional update, set If-Match to the wildcard character (*).
          :param int timeout:
              The server timeout, expressed in seconds.
          :return: The etag of the entity.
          :rtype: str
          '''
          _validate_not_none('table_name', table_name)
          request = _update_entity(entity, if_match)
          request.host = self._get_host()
          request.path = _get_entity_path(table_name, entity['PartitionKey'], entity['RowKey'])
          request.query += [('timeout', _int_to_str(timeout))]
  
          response = self._perform_request(request)
          return _extract_etag(response)