def create_container(self, container_name, metadata=None,<EOL>public_access=None, fail_on_exist=False, timeout=None):
_validate_not_none('<STR_LIT>', container_name)<EOL>request = HTTPRequest()<EOL>request.method = '<STR_LIT>'<EOL>request.host = self._get_host()<EOL>request.path = _get_path(container_name)<EOL>request.query = [<EOL>('<STR_LIT>', '<STR_LIT>'),<EOL>('<STR_LIT>', _int_to_str(timeout)),]<EOL>request.headers = [<EOL>('<STR_LIT>', metadata),<EOL>('<STR_LIT>', _to_str(public_access))<EOL>]<EOL>if not fail_on_exist:<EOL><INDENT>try:<EOL><INDENT>self._perform_request(request)<EOL>return True<EOL><DEDENT>except AzureHttpError as ex:<EOL><INDENT>_dont_fail_on_exist(ex)<EOL>return False<EOL><DEDENT><DEDENT>else:<EOL><INDENT>self._perform_request(request)<EOL>return True<EOL><DEDENT>
Creates a new container under the specified account. If the container
with the same name already exists, the operation fails if
fail_on_exist is True.

:param str container_name:
    Name of container to create.
:param metadata:
    A dict with name_value pairs to associate with the
    container as metadata. Example:{'Category':'test'}
:type metadata: a dict mapping str to str
:param public_access:
    Possible values include: container, blob.
:type public_access:
    One of the values listed in the :class:`~azure.storage.blob.models.PublicAccess` enum.
:param bool fail_on_exist:
    Specify whether to throw an exception when the container exists.
:param int timeout:
    The timeout parameter is expressed in seconds.
:return: True if container is created, False if container already exists.
:rtype: bool