Create a new JIRA user.

        :param username: the username of the new user
        :type username: str
        :param email: email address of the new user
        :type email: str
        :param directoryId: The directory ID the new user should be a part of (Default: 1)
        :type directoryId: int
        :param password: Optional, the password for the new user
        :type password: Optional[str]
        :param fullname: Optional, the full name of the new user
        :type fullname: Optional[str]
        :param notify: Whether or not to send a notification to the new user. (Default: False)
        :type notify: bool
        :param active: Whether or not to make the new user active upon creation. (Default: True)
        :type active: bool
        :param ignore_existing: Whether or not to ignore and existing user. (Default: False)
        :type ignore_existing: bool
        :param applicationKeys: Keys of products user should have access to
        :type applicationKeys: Optional[list]

        :return: Whether or not the user creation was successful.
        :rtype: bool

        :raises JIRAError:  If username already exists and `ignore_existing` has not been set to `True`.

def add_user(self,
                 username,
                 email,
                 directoryId=1,
                 password=None,
                 fullname=None,
                 notify=False,
                 active=True,
                 ignore_existing=False,
                 application_keys=None,
                 ):
        """Create a new JIRA user.

        :param username: the username of the new user
        :type username: str
        :param email: email address of the new user
        :type email: str
        :param directoryId: The directory ID the new user should be a part of (Default: 1)
        :type directoryId: int
        :param password: Optional, the password for the new user
        :type password: Optional[str]
        :param fullname: Optional, the full name of the new user
        :type fullname: Optional[str]
        :param notify: Whether or not to send a notification to the new user. (Default: False)
        :type notify: bool
        :param active: Whether or not to make the new user active upon creation. (Default: True)
        :type active: bool
        :param ignore_existing: Whether or not to ignore and existing user. (Default: False)
        :type ignore_existing: bool
        :param applicationKeys: Keys of products user should have access to
        :type applicationKeys: Optional[list]

        :return: Whether or not the user creation was successful.
        :rtype: bool

        :raises JIRAError:  If username already exists and `ignore_existing` has not been set to `True`.

        """
        if not fullname:
            fullname = username
        # TODO(ssbarnea): default the directoryID to the first directory in jira instead
        # of 1 which is the internal one.
        url = self._options['server'] + '/rest/api/latest/user'

        # implementation based on
        # https://docs.atlassian.com/jira/REST/ondemand/#d2e5173
        x = OrderedDict()

        x['displayName'] = fullname
        x['emailAddress'] = email
        x['name'] = username
        if password:
            x['password'] = password
        if notify:
            x['notification'] = 'True'
        if application_keys is not None:
            x['applicationKeys'] = application_keys

        payload = json.dumps(x)
        try:
            self._session.post(url, data=payload)
        except JIRAError as e:
            err = e.response.json()['errors']
            if 'username' in err and err['username'] == 'A user with that username already exists.' and ignore_existing:
                return True
            raise e
        return True