def validate_field_data(self, validation, data): """ Validate this block's field data. Instead of checking fields like self.name, check the fields set on data, e.g. data.name. This allows the same validation method to be re-used for the studio editor. """ if len(data.source_block_ids) > self.MAX_BLOCKS_ALLOWED: # Because importing library blocks is an expensive operation validation.add( ValidationMessage( ValidationMessage.ERROR, _(u"A maximum of {0} components may be added.").format( self.MAX_BLOCKS_ALLOWED)))
def validate(self): """ Validates the state of this xblock """ _ = self.runtime.service(self, "i18n").ugettext validation = super(ForumLeaderboardXBlock, self).validate() if not self.discussion_id: validation.add( ValidationMessage( ValidationMessage.WARNING, _(u"You will need to configure this XBlock with a Discussion ID." ))) return validation
def validate_field_data(self, validation, data): super(GroupActivityXBlock, self).validate_field_data(validation, data) should_be_ints = ('weight', 'group_reviews_required_count', 'user_review_count') for field_name in should_be_ints: try: int(getattr(data, field_name)) except (TypeError, ValueError): message = _( u"{field_name} must be integer, {field_value} given" ).format(field_name=field_name, field_value=getattr(data, field_name)) validation.add( ValidationMessage(ValidationMessage.ERROR, message))
def test_copy(self): validation = Validation("id") validation.add(ValidationMessage(ValidationMessage.ERROR, u"Error message")) studio_validation = StudioValidation.copy(validation) self.assertIsInstance(studio_validation, StudioValidation) self.assertFalse(studio_validation) self.assertEqual(1, len(studio_validation.messages)) expected = { "type": StudioValidationMessage.ERROR, "text": u"Error message" } self.assertEqual(expected, studio_validation.messages[0].to_json()) self.assertIsNone(studio_validation.summary)
def validate(self): """ Validates the state of this XBlock. """ validation = super(ChoiceBlock, self).validate() if self.get_parent().all_choice_values.count(self.value) > 1: validation.add( ValidationMessage(ValidationMessage.ERROR, self._( u"This choice has a non-unique ID and won't work properly. " "This can happen if you duplicate a choice rather than use the Add Choice button." )) ) print(self.get_parent().all_choice_values) return validation
def validate(self): """ Validates the state of this xblock instance. """ _ = self.runtime.service(self, "i18n").ugettext validation = super(LmsBlockMixin, self).validate() has_invalid_user_partitions = False has_invalid_groups = False for user_partition_id, group_ids in self.group_access.iteritems(): try: user_partition = self._get_user_partition(user_partition_id) except NoSuchUserPartitionError: has_invalid_user_partitions = True else: # Skip the validation check if the partition has been disabled if user_partition.active: for group_id in group_ids: try: user_partition.get_group(group_id) except NoSuchUserPartitionGroupError: has_invalid_groups = True if has_invalid_user_partitions: validation.add( ValidationMessage( ValidationMessage.ERROR, _(u"This component refers to deleted or invalid content group configurations.") ) ) if has_invalid_groups: validation.add( ValidationMessage( ValidationMessage.ERROR, _(u"This component refers to deleted or invalid content groups.") ) ) return validation
def test_copy(self): validation = Validation("id") validation.add( ValidationMessage(ValidationMessage.ERROR, "Error message")) studio_validation = StudioValidation.copy(validation) assert isinstance(studio_validation, StudioValidation) assert not studio_validation assert 1 == len(studio_validation.messages) expected = { "type": StudioValidationMessage.ERROR, "text": "Error message" } assert expected == studio_validation.messages[0].to_json() assert studio_validation.summary is None
def test_to_json(self): """ Test the ability to serialize a `Validation` instance. """ validation = Validation("id") expected = { "xblock_id": "id", "messages": [], "empty": True } self.assertEqual(expected, validation.to_json()) validation.add(ValidationMessage(ValidationMessage.ERROR, "Error message")) validation.add(ValidationMessage(ValidationMessage.WARNING, "Warning message")) expected = { "xblock_id": "id", "messages": [ {"type": ValidationMessage.ERROR, "text": "Error message"}, {"type": ValidationMessage.WARNING, "text": "Warning message"} ], "empty": False } self.assertEqual(expected, validation.to_json())
def test_generate_validation_message(self): # pylint: disable=invalid-name, protected-access """ Checks classmethod _generate_validation_message """ msg = 'weight attempts cannot be negative' result = ValidationMessage(ValidationMessage.ERROR, _(msg)) test_result = self.xblock._generate_validation_message(msg) self.assertEqual( type(result), type(test_result), ) self.assertEqual( result.text, test_result.text, )
def test_generate_validation_message(self): # pylint: disable=invalid-name, protected-access """ Checks classmethod _generate_validation_message """ msg = u'some fake message' result = ValidationMessage(ValidationMessage.ERROR, _(msg)) test_result = AdaptiveNumericInput.generate_validation_message(msg) self.assertEquals( type(result), type(test_result), ) self.assertEquals( result.text, test_result.text, )
def validate_field_data(self, validation, data): """ Validate this block's field data. We are validating that the chosen freetextresponse xblocks ID's exist in the course """ for x_id, x_type in data.xblock_list: try: usage_key =\ self.scope_ids.usage_id.course_key.make_usage_key( x_type, x_id ) self.runtime.get_block(usage_key) except Exception as e: logger.warn(e) validation.add( ValidationMessage( ValidationMessage.ERROR, u"Component freetextresponse ID: {} does not exist.".format(x_id) ) )
def add_error(msg): validation.add(ValidationMessage(ValidationMessage.ERROR, msg))
def validate_field_data(self, validation, data): if data.href != '' and not VIDEO_URL_RE.match(data.href): validation.add( ValidationMessage(ValidationMessage.ERROR, _("Incorrect video url, please recheck")))
def test_validation_has_graded_questions(self): questions = [self._make_question(graded=True)] categories = [GroupProjectReviewQuestionXBlock.CATEGORY, PeerSelectorXBlock.CATEGORY] expected_message = ValidationMessage(ValidationMessage.ERROR, u"Graded questions are not supported") self.validate_and_check_message(categories, questions, expected_message)
def add_error_msg(msg): """ Add validation error with the passed error message. """ validation.add(ValidationMessage(ValidationMessage.ERROR, msg))
def add_error(msg): """ Helper function for adding validation messages. """ validation.add(ValidationMessage(ValidationMessage.ERROR, msg))
def add_error(msg): """Add a validation error.""" validation.add(ValidationMessage(ValidationMessage.ERROR, msg))
def validate_field_data(self, validation, data): if not isinstance(data.custom_parameters, list): _ = self.runtime.service(self, "i18n").ugettext validation.add(ValidationMessage(ValidationMessage.ERROR, unicode(_("Custom Parameters must be a list"))))