def post(self, user): """Handles POST requests.""" payload = json.loads(self.request.get('payload')) title = payload.get('title') category = payload.get('category') if not title: raise self.InvalidInputException('No title supplied.') if not category: raise self.InvalidInputException('No category chosen.') yaml = self.request.get('yaml') if yaml and feconf.ALLOW_YAML_FILE_UPLOAD: exploration = Exploration.create_from_yaml( yaml_file=yaml, user=user, title=title, category=category) else: exploration = Exploration.create( user, title=title, category=category) self.response.write(json.dumps({ 'explorationId': exploration.id, }))
def test_yaml_methods(self): """Test the as_yaml() and create_from_yaml() methods.""" exploration = Exploration.create( self.user, 'A title', 'A category', 'A different exploration_id') exploration.add_state('New state') yaml_file = exploration.as_yaml() self.assertEqual(yaml_file, """Activity 1: content: [] param_changes: [] widget: handlers: - name: submit rules: - dest: Activity 1 feedback: [] inputs: {} name: Default param_changes: [] params: {} sticky: false widget_id: Continue New state: content: [] param_changes: [] widget: handlers: - name: submit rules: - dest: New state feedback: [] inputs: {} name: Default param_changes: [] params: {} sticky: false widget_id: Continue """) exploration2 = Exploration.create_from_yaml( yaml_file, self.user, 'Title', 'Category') self.assertEqual(len(exploration2.states), 2) self.assertEqual(exploration2.as_yaml(), yaml_file) self.assertEqual(Exploration.query().count(), 2) with self.assertRaises(Exception): Exploration.create_from_yaml( 'No_initial_state_name', self.user, 'Title', 'category') with self.assertRaises(Exception): Exploration.create_from_yaml( 'Invalid\ninit_state_name:\nMore stuff', self.user, 'Title', 'category') with self.assertRaises(Exception): Exploration.create_from_yaml( 'State1:\n(\nInvalid yaml', self.user, 'Title', 'category') # Check that no new exploration was created. self.assertEqual(Exploration.query().count(), 2)
def post(self): """Handles POST requests.""" payload = json.loads(self.request.get('payload')) exploration_id = payload.get('exploration_id') forked_exploration = Exploration.get(exploration_id) if not forked_exploration.is_demo_exploration(): raise self.InvalidInputException('Exploration cannot be forked.') # Get the demo exploration as a YAML file, so that new states can be # created. yaml = forked_exploration.as_yaml() title = 'Copy of %s' % forked_exploration.title category = forked_exploration.category exploration = Exploration.create_from_yaml( yaml_file=yaml, user=self.user, title=title, category=category) self.render_json({'explorationId': exploration.id})