def add_state(self, state_name, state_id=None): """Adds a new state, and returns it. Commits changes.""" if self._has_state_named(state_name): raise Exception('Duplicate state name %s' % state_name) state_id = state_id or State.get_new_id(state_name) new_state = State(id=state_id, name=state_name) new_state.put() self.state_ids.append(new_state.id) self.put() return new_state
def create_new( user_id, title, category, exploration_id=None, init_state_name=feconf.DEFAULT_STATE_NAME, image_id=None): """Creates, saves and returns a new exploration id.""" # Generate a new exploration id, if one wasn't passed in. exploration_id = exploration_id or ExplorationModel.get_new_id(title) state_id = State.get_new_id(init_state_name) new_state = State(id=state_id, name=init_state_name) new_state.put() # Note that demo explorations do not have owners, so user_id may be None. exploration = ExplorationModel( id=exploration_id, title=title, category=category, image_id=image_id, state_ids=[state_id], editor_ids=[user_id] if user_id else []) exploration.put() return exploration.id
def create(cls, user, title, category, exploration_id=None, init_state_name=feconf.DEFAULT_STATE_NAME, image_id=None): """Creates and returns a new exploration.""" # Generate a new exploration id, if one wasn't passed in. exploration_id = exploration_id or cls.get_new_id(title) # Temporarily create a fake initial state key. state_id = State.get_new_id(init_state_name) fake_state_key = ndb.Key(Exploration, exploration_id, State, state_id) # Note that demo explorations do not have owners, so user may be None. exploration = cls( id=exploration_id, title=title, init_state=fake_state_key, category=category, image_id=image_id, states=[fake_state_key], editors=[user] if user else []) exploration.put() # Finally, create the initial state and check that it has the right key. new_init_state = State.create( exploration, init_state_name, state_id=state_id) assert fake_state_key == new_init_state.key return exploration