def test_deserialize_with_choice_kwargs(self): """Testing ConditionSet.deserialize with choice_kwargs""" choices = ConditionChoices([BasicTestChoice]) condition_set = ConditionSet.deserialize( choices, { 'mode': 'any', 'conditions': [ { 'choice': 'basic-test-choice', 'op': 'basic-test-op', 'value': 'my-value', }, ], }, choice_kwargs={ 'abc': 123, }) self.assertEqual(condition_set.mode, ConditionSet.MODE_ANY) self.assertEqual(len(condition_set.conditions), 1) choice = condition_set.conditions[0].choice self.assertEqual(choice.choice_id, 'basic-test-choice') self.assertEqual(choice.extra_state, {'abc': 123})
def test_deserialize_with_invalid_mode(self): """Testing ConditionSet.deserialize with invalid mode""" choices = ConditionChoices([BasicTestChoice]) with self.assertRaises(InvalidConditionModeError): ConditionSet.deserialize( choices, { 'mode': 'invalid', 'conditions': [ { 'choice': 'basic-test-choice', 'op': 'basic-test-op', 'value': 'my-value', }, ], })
def to_python(self, value): """Parse and return conditions from the field's data. This takes the serialized values provided by the field's widget, ensures they're valid, and returns a list of the resulting conditions. Args: value (dict): The raw form data, as provided by the widget. Returns: djblets.conditions.conditions.ConditionSet: The resulting condition set from the form. """ if not value: # Let validate() handle this. It will be run by clean() after this # method returns. return None try: condition_set = ConditionSet.deserialize( self.choices, value, choice_kwargs=self.choice_kwargs) except InvalidConditionModeError as e: raise forms.ValidationError(six.text_type(e), code='invalid_mode') except (ConditionChoiceNotFoundError, ConditionOperatorNotFoundError, InvalidConditionValueError) as e: if getattr(e, 'code', None) == 'required': self.widget.condition_errors[e.condition_index] = \ self.error_messages['value_required'] else: self.widget.condition_errors[e.condition_index] = \ six.text_type(e) raise forms.ValidationError( self.error_messages['condition_errors'], code='condition_errors') return condition_set
def test_deserialize(self): """Testing ConditionSet.deserialize""" choices = ConditionChoices([BasicTestChoice]) condition_set = ConditionSet.deserialize( choices, { 'mode': 'any', 'conditions': [ { 'choice': 'basic-test-choice', 'op': 'basic-test-op', 'value': 'my-value', }, ], }) self.assertEqual(condition_set.mode, ConditionSet.MODE_ANY) self.assertEqual(len(condition_set.conditions), 1) self.assertEqual(condition_set.conditions[0].choice.choice_id, 'basic-test-choice')
def to_python(self, value): """Parse and return conditions from the field's data. This takes the serialized values provided by the field's widget, ensures they're valid, and returns a list of the resulting conditions. Args: value (dict): The raw form data, as provided by the widget. Returns: djblets.conditions.conditions.ConditionSet: The resulting condition set from the form. """ if not value: # Let validate() handle this. It will be run by clean() after this # method returns. return None try: condition_set = ConditionSet.deserialize( self.choices, value, choice_kwargs=self.widget.choice_kwargs) except InvalidConditionModeError as e: raise forms.ValidationError(six.text_type(e), code='invalid_mode') except (ConditionChoiceNotFoundError, ConditionOperatorNotFoundError, InvalidConditionValueError) as e: if getattr(e, 'code', None) == 'required': self.widget.condition_errors[e.condition_index] = \ self.error_messages['value_required'] else: self.widget.condition_errors[e.condition_index] = \ six.text_type(e) raise forms.ValidationError( self.error_messages['condition_errors'], code='condition_errors') return condition_set