def create_from_yaml( yaml_content, user_id, title, category, exploration_id=None, image_id=None): """Creates an exploration from a YAML text string.""" exploration_dict = utils.dict_from_yaml(yaml_content) init_state_name = exploration_dict['states'][0]['name'] exploration = Exploration.get(create_new( user_id, title, category, exploration_id=exploration_id, init_state_name=init_state_name, image_id=image_id)) init_state = State.get_by_name(init_state_name, exploration) try: exploration.parameters = [Parameter( name=param['name'], obj_type=param['obj_type'], values=param['values'] ) for param in exploration_dict['parameters']] state_list = [] for state_description in exploration_dict['states']: state_name = state_description['name'] state = (init_state if state_name == init_state_name else exploration.add_state(state_name)) state_list.append({'state': state, 'desc': state_description}) for index, state in enumerate(state_list): modify_using_dict(exploration.id, state['state'].id, state['desc']) except Exception: exploration.delete() raise return exploration.id
def load_default_classifiers(cls): """Loads the default classifiers.""" classifier_ids = cls.get_classifier_ids() for classifier_id in classifier_ids: rules_filepath = os.path.join( feconf.SAMPLE_CLASSIFIERS_DIR, classifier_id, '%sRules.yaml' % classifier_id) with open(rules_filepath) as f: rule_dict = utils.dict_from_yaml(f.read().decode('utf-8')) rules = [] for rule in rule_dict: r_spec = RuleSpec(rule=rule, name=rule_dict[rule]['name']) if 'checks' in rule_dict[rule]: r_spec.checks = rule_dict[rule]['checks'] rules.append(r_spec) Classifier(id=classifier_id, rules=rules).put()
def load_default_widgets(cls): """Loads the default widgets.""" widget_ids = os.listdir(feconf.NONINTERACTIVE_WIDGETS_DIR) for widget_id in widget_ids: widget_dir = os.path.join( feconf.NONINTERACTIVE_WIDGETS_DIR, widget_id) widget_conf_filename = '%s.config.yaml' % widget_id with open(os.path.join(widget_dir, widget_conf_filename)) as f: conf = utils.dict_from_yaml(f.read().decode('utf-8')) conf['id'] = '%s-%s' % (feconf.NONINTERACTIVE_PREFIX, widget_id) conf['params'] = [Parameter(**param) for param in conf['params']] # TODO(sll): Should this be a template *location* instead? conf['template'] = utils.get_file_contents( os.path.join(widget_dir, '%s.html' % widget_id)) widget = cls(**conf) widget.put()
def load_default_widgets(cls): """Loads the default widgets. Assumes that everything is valid (directories exist, widget config files are formatted correctly, etc.). """ widget_ids = os.listdir(feconf.INTERACTIVE_WIDGETS_DIR) for widget_id in widget_ids: widget_dir = os.path.join(feconf.INTERACTIVE_WIDGETS_DIR, widget_id) widget_conf_filename = '%s.config.yaml' % widget_id with open(os.path.join(widget_dir, widget_conf_filename)) as f: conf = utils.dict_from_yaml(f.read().decode('utf-8')) conf['id'] = '%s-%s' % (feconf.INTERACTIVE_PREFIX, widget_id) conf['params'] = [Parameter(**param) for param in conf['params']] conf['handlers'] = [AnswerHandler(**ah) for ah in conf['handlers']] conf['template'] = utils.get_file_contents( os.path.join(widget_dir, '%s.html' % widget_id)) widget = cls(**conf) widget.put()
def create_from_yaml( cls, yaml_file, user, title, category, exploration_id=None, image_id=None): """Creates an exploration from a YAML file.""" exploration_dict = utils.dict_from_yaml(yaml_file) init_state_name = exploration_dict['states'][0]['name'] exploration = cls.create( user, title, category, exploration_id=exploration_id, init_state_name=init_state_name, image_id=image_id) init_state = State.get_by_name(init_state_name, exploration) try: for param in exploration_dict['parameters']: exploration.parameters.append(Parameter( name=param['name'], obj_type=param['obj_type'], values=param['values']) ) state_list = [] exploration_states = exploration_dict['states'] for state_description in exploration_states: state_name = state_description['name'] state = (init_state if state_name == init_state_name else exploration.add_state(state_name)) state_list.append({'state': state, 'desc': state_description}) for index, state in enumerate(state_list): State.modify_using_dict( exploration, state['state'], state['desc']) except Exception: exploration.delete() raise return exploration