def insert_entity(self, table_name, entity, timeout=None):
_validate_not_none('<STR_LIT>', table_name)<EOL>request = _insert_entity(entity)<EOL>request.host = self._get_host()<EOL>request.path = '<STR_LIT:/>' + _to_str(table_name)<EOL>request.query += [('<STR_LIT>', _int_to_str(timeout))]<EOL>response = self._perform_request(request)<EOL>return _extract_etag(response)<EOL>
Inserts a new entity into the table. Throws if an entity with the same 
PartitionKey and RowKey already exists.

When inserting an entity into a table, you must specify values for the 
PartitionKey and RowKey system properties. Together, these properties 
form the primary key and must be unique within the table. Both the 
PartitionKey and RowKey values must be string values; each key value may 
be up to 64 KB in size. If you are using an integer value for the key 
value, you should convert the integer to a fixed-width string, because 
they are canonically sorted. For example, you should convert the value 
1 to 0000001 to ensure proper sorting.

:param str table_name:
    The name of the table to insert the entity into.
:param entity:
    The entity to insert. 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 int timeout:
    The server timeout, expressed in seconds.
:return: The etag of the inserted entity.
:rtype: str