def get_domain(domain_identifier): """ Returns the Domain model instance corresponding to the identifier. Args: domain_identifier: The domain identifier string Returns: An instance of the Domain model, or None if no domain exist with the given identifier. """ return Domain.get_by_key_name(domain_identifier)
def create_domain(domain, domain_title, user): """Creates a new domain, if none already exists with that identifier. The user will become an admin on the newly created domain, and the domain will be added to the list of domains of the user. The updates will be stored in the datastore. Args: domain: The domain identifier of the new domain. Must be a lowercase alphanumeric string of length less than 100. The identifier must match the VALID_DOMAIN_IDENTIFIER regexp. domain_title: The string title of the new domain. The string must be non-empty. user: Instance of the User model that creates the domain. Returns: The newly created Domain instance. |user| will be set as admin of the new domain. Returns None if a domain already exists with that identifier, the identifier is not valid or the domain_title is empty. """ # TODO(tijmen): Use multiple entity group transaction here domain_title = domain_title.splitlines()[0].strip() if (not re.match(VALID_DOMAIN_IDENTIFIER, domain) or not domain_title): return None existing = Domain.get_by_key_name(domain) if existing: return None new_domain = Domain(key_name=domain, name=domain_title, admins=[user.key().name()]) new_domain.put() def txn(user_key): txn_user = User.get(user_key) if not domain in txn_user.domains: txn_user.domains.append(domain) txn_user.put() db.run_in_transaction(txn, user.key()) return new_domain