Beispiel #1
0
    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,
        }))
Beispiel #2
0
    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)
Beispiel #3
0
    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})