def create(self, first_name=None, last_name=None, country=None, email=None,<EOL>on_conflict=IfAlreadyExistsOptions.ignoreIfAlreadyExists):
<EOL>create_params = {}<EOL>if email is None:<EOL><INDENT>if not self.email:<EOL><INDENT>raise ArgumentError("<STR_LIT>")<EOL><DEDENT><DEDENT>elif self.email is None:<EOL><INDENT>self.email = email<EOL><DEDENT>elif self.email.lower() != email.lower():<EOL><INDENT>raise ArgumentError("<STR_LIT>" % (email, self.email))<EOL><DEDENT>create_params["<STR_LIT:email>"] = self.email<EOL>if on_conflict in IfAlreadyExistsOptions.__members__:<EOL><INDENT>on_conflict = IfAlreadyExistsOptions[on_conflict]<EOL><DEDENT>if on_conflict not in IfAlreadyExistsOptions:<EOL><INDENT>raise ArgumentError("<STR_LIT>".format([o.name for o in IfAlreadyExistsOptions]))<EOL><DEDENT>if on_conflict != IfAlreadyExistsOptions.errorIfAlreadyExists:<EOL><INDENT>create_params["<STR_LIT>"] = on_conflict.name<EOL><DEDENT>if first_name: create_params["<STR_LIT>"] = first_name  <EOL>if last_name: create_params["<STR_LIT>"] = last_name     <EOL>if country: create_params["<STR_LIT>"] = country          <EOL>if self.id_type == IdentityTypes.adobeID:<EOL><INDENT>return self.insert(addAdobeID=dict(**create_params))<EOL><DEDENT>elif self.id_type == IdentityTypes.enterpriseID:<EOL><INDENT>return self.insert(createEnterpriseID=dict(**create_params))<EOL><DEDENT>else:<EOL><INDENT>return self.insert(createFederatedID=dict(**create_params))<EOL><DEDENT>
Create the user on the Adobe back end.
See [Issue 32](https://github.com/adobe-apiplatform/umapi-client.py/issues/32): because
we retry create calls if they time out, the default conflict handling for creation is to ignore the
create call if the user already exists (possibly from an earlier call that timed out).
:param first_name: (optional) user first name
:param last_name: (optional) user last name
:param country: (optional except for Federated ID) user 2-letter ISO country code
:param email: user email, if not already specified at create time
:param on_conflict: IfAlreadyExistsOption (or string name thereof) controlling creation of existing users
:return: the User, so you can do User(...).create(...).add_to_groups(...)