diff --git a/lollipop/types.py b/lollipop/types.py
index 3ec8a50..acb7f3b 100644
--- a/lollipop/types.py
+++ b/lollipop/types.py
@@ -679,16 +679,22 @@ class Dict(Type):
         errors_builder = ValidationErrorBuilder()
         result = {}
         for k, v in iteritems(data):
-            value_type = self.value_types.get(k)
-            if value_type is None:
-                continue
             try:
                 k = self.key_type.load(k, *args, **kwargs)
             except ValidationError as ve:
                 errors_builder.add_error(k, ve.messages)
 
+            if k is MISSING:
+                continue
+
+            value_type = self.value_types.get(k)
+            if value_type is None:
+                continue
+
             try:
-                result[k] = value_type.load(v, *args, **kwargs)
+                value = value_type.load(v, *args, **kwargs)
+                if value is not MISSING:
+                    result[k] = value
             except ValidationError as ve:
                 errors_builder.add_error(k, ve.messages)
 
@@ -715,8 +721,13 @@ class Dict(Type):
             except ValidationError as ve:
                 errors_builder.add_error(k, ve.messages)
 
+            if k is MISSING:
+                continue
+
             try:
-                result[k] = value_type.dump(v, *args, **kwargs)
+                value = value_type.dump(v, *args, **kwargs)
+                if value is not MISSING:
+                    result[k] = value
             except ValidationError as ve:
                 errors_builder.add_error(k, ve.messages)
 

diff --git a/tests/test_types.py b/tests/test_types.py
index e652fb6..6489dbf 100644
--- a/tests/test_types.py
+++ b/tests/test_types.py
@@ -641,6 +641,30 @@ class TestDict(NameDescriptionTestsMixin, RequiredTestsMixin, ValidationTestsMix
         assert Dict(Any(), key_type=Integer())\
             .load({'123': 'foo', '456': 'bar'}) == {123: 'foo', 456: 'bar'}
 
+    def test_loading_dict_with_custom_key_type_and_values_of_different_types(self):
+        assert Dict({1: Integer(), 2: String()}, key_type=Integer())\
+            .load({'1': '123', '2': 'bar'}) == {1: 123, 2: 'bar'}
+
+    def test_loading_skips_key_value_if_custom_key_type_loads_to_missing(self):
+        class CustomKeyType(String):
+            def load(self, data, *args, **kwargs):
+                if data == 'foo':
+                    return MISSING
+                return super(CustomKeyType, self).load(data, *args, **kwargs)
+
+        assert Dict(String(), key_type=CustomKeyType())\
+            .load({'foo': 'hello', 'bar': 'goodbye'}) == {'bar': 'goodbye'}
+
+    def test_loading_skips_key_value_if_value_type_loads_to_missing(self):
+        class CustomValueType(String):
+            def load(self, data, *args, **kwargs):
+                if data == 'foo':
+                    return MISSING
+                return super(CustomValueType, self).load(data, *args, **kwargs)
+
+        assert Dict(CustomValueType())\
+            .load({'key1': 'foo', 'key2': 'bar'}) == {'key2': 'bar'}
+
     def test_loading_accepts_any_key_if_key_type_is_not_specified(self):
         assert Dict(Any())\
             .load({'123': 'foo', 456: 'bar'}) == {'123': 'foo', 456: 'bar'}
@@ -719,7 +743,27 @@ class TestDict(NameDescriptionTestsMixin, RequiredTestsMixin, ValidationTestsMix
     def test_dumping_dict_with_values_of_different_types(self):
         value = {'foo': 1, 'bar': 'hello', 'baz': True}
         assert Dict({'foo': Integer(), 'bar': String(), 'baz': Boolean()})\
-            .load(value) == value
+            .dump(value) == value
+
+    def test_dumping_skips_key_value_if_custom_key_type_loads_to_missing(self):
+        class CustomKeyType(String):
+            def dump(self, data, *args, **kwargs):
+                if data == 'foo':
+                    return MISSING
+                return super(CustomKeyType, self).load(data, *args, **kwargs)
+
+        assert Dict(String(), key_type=CustomKeyType())\
+            .dump({'foo': 'hello', 'bar': 'goodbye'}) == {'bar': 'goodbye'}
+
+    def test_dumping_skips_key_value_if_value_type_loads_to_missing(self):
+        class CustomValueType(String):
+            def dump(self, data, *args, **kwargs):
+                if data == 'foo':
+                    return MISSING
+                return super(CustomValueType, self).load(data, *args, **kwargs)
+
+        assert Dict(CustomValueType())\
+            .dump({'key1': 'foo', 'key2': 'bar'}) == {'key2': 'bar'}
 
     def test_dumping_accepts_any_value_if_value_types_are_not_specified(self):
         assert Dict()\

Asymmetry in load/dump for Dict with key_type and dict as values_type
I think there is a problem with the Dict type when using both key_type verification and a values_type dictionary:

In Dict.dump, the key is used in its original / non-dumped form to lookup the value type. However, in Dict.load, the dumped key is used to lookup the value type.

This works fine when using native types as key type such as String and Integer since they map to the same loaded/dumped value. But it's causing a problem when using a more complex key type (e.g. in my case an Enum that dumps to a string).

I believe, in Dict.load, key_type.load should be called **before** the lookup of the value type, so that the lookup is again performed with the original / non-dumped value. 

tests/test_types.py::TestDict::test_loading_dict_with_custom_key_type_and_values_of_different_types tests/test_types.py::TestDict::test_loading_skips_key_value_if_custom_key_type_loads_to_missing tests/test_types.py::TestDict::test_loading_skips_key_value_if_value_type_loads_to_missing tests/test_types.py::TestDict::test_dumping_skips_key_value_if_custom_key_type_loads_to_missing tests/test_types.py::TestDict::test_dumping_skips_key_value_if_value_type_loads_to_missing
tests/test_types.py::TestString::test_loading_does_not_raise_ValidationError_if_validators_succeed tests/test_types.py::TestString::test_loading_raises_ValidationError_if_validator_fails tests/test_types.py::TestString::test_loading_raises_ValidationError_with_combined_messages_if_multiple_validators_fail tests/test_types.py::TestString::test_loading_passes_context_to_validator tests/test_types.py::TestString::test_validation_returns_None_if_validators_succeed tests/test_types.py::TestString::test_validation_returns_errors_if_validator_fails tests/test_types.py::TestString::test_validation_returns_combined_errors_if_multiple_validators_fail tests/test_types.py::TestString::test_loading_missing_value_raises_required_error tests/test_types.py::TestString::test_loading_None_raises_required_error tests/test_types.py::TestString::test_dumping_missing_value_raises_required_error tests/test_types.py::TestString::test_dumping_None_raises_required_error tests/test_types.py::TestString::test_name tests/test_types.py::TestString::test_description tests/test_types.py::TestString::test_loading_string_value tests/test_types.py::TestString::test_loading_non_string_value_raises_ValidationError tests/test_types.py::TestString::test_dumping_string_value tests/test_types.py::TestString::test_dumping_non_string_value_raises_ValidationError tests/test_types.py::TestNumber::test_loading_does_not_raise_ValidationError_if_validators_succeed tests/test_types.py::TestNumber::test_loading_raises_ValidationError_if_validator_fails tests/test_types.py::TestNumber::test_loading_raises_ValidationError_with_combined_messages_if_multiple_validators_fail tests/test_types.py::TestNumber::test_loading_passes_context_to_validator tests/test_types.py::TestNumber::test_validation_returns_None_if_validators_succeed tests/test_types.py::TestNumber::test_validation_returns_errors_if_validator_fails tests/test_types.py::TestNumber::test_validation_returns_combined_errors_if_multiple_validators_fail tests/test_types.py::TestNumber::test_loading_missing_value_raises_required_error tests/test_types.py::TestNumber::test_loading_None_raises_required_error tests/test_types.py::TestNumber::test_dumping_missing_value_raises_required_error tests/test_types.py::TestNumber::test_dumping_None_raises_required_error tests/test_types.py::TestNumber::test_name tests/test_types.py::TestNumber::test_description tests/test_types.py::TestNumber::test_loading_float_value tests/test_types.py::TestNumber::test_loading_non_numeric_value_raises_ValidationError tests/test_types.py::TestNumber::test_dumping_float_value tests/test_types.py::TestNumber::test_dumping_non_numeric_value_raises_ValidationError tests/test_types.py::TestInteger::test_loading_integer_value tests/test_types.py::TestInteger::test_loading_long_value tests/test_types.py::TestInteger::test_loading_non_numeric_value_raises_ValidationError tests/test_types.py::TestInteger::test_dumping_integer_value tests/test_types.py::TestInteger::test_dumping_long_value tests/test_types.py::TestInteger::test_dumping_non_numeric_value_raises_ValidationError tests/test_types.py::TestFloat::test_loading_float_value tests/test_types.py::TestFloat::test_loading_non_numeric_value_raises_ValidationError tests/test_types.py::TestFloat::test_dumping_float_value tests/test_types.py::TestFloat::test_dumping_non_numeric_value_raises_ValidationError tests/test_types.py::TestBoolean::test_loading_does_not_raise_ValidationError_if_validators_succeed tests/test_types.py::TestBoolean::test_loading_raises_ValidationError_if_validator_fails tests/test_types.py::TestBoolean::test_loading_raises_ValidationError_with_combined_messages_if_multiple_validators_fail tests/test_types.py::TestBoolean::test_loading_passes_context_to_validator tests/test_types.py::TestBoolean::test_validation_returns_None_if_validators_succeed tests/test_types.py::TestBoolean::test_validation_returns_errors_if_validator_fails tests/test_types.py::TestBoolean::test_validation_returns_combined_errors_if_multiple_validators_fail tests/test_types.py::TestBoolean::test_loading_missing_value_raises_required_error tests/test_types.py::TestBoolean::test_loading_None_raises_required_error tests/test_types.py::TestBoolean::test_dumping_missing_value_raises_required_error tests/test_types.py::TestBoolean::test_dumping_None_raises_required_error tests/test_types.py::TestBoolean::test_name tests/test_types.py::TestBoolean::test_description tests/test_types.py::TestBoolean::test_loading_boolean_value tests/test_types.py::TestBoolean::test_loading_non_boolean_value_raises_ValidationError tests/test_types.py::TestBoolean::test_dumping_boolean_value tests/test_types.py::TestBoolean::test_dumping_non_boolean_value_raises_ValidationError tests/test_types.py::TestDateTime::test_loading_does_not_raise_ValidationError_if_validators_succeed tests/test_types.py::TestDateTime::test_loading_raises_ValidationError_if_validator_fails tests/test_types.py::TestDateTime::test_loading_raises_ValidationError_with_combined_messages_if_multiple_validators_fail tests/test_types.py::TestDateTime::test_loading_passes_context_to_validator tests/test_types.py::TestDateTime::test_validation_returns_None_if_validators_succeed tests/test_types.py::TestDateTime::test_validation_returns_errors_if_validator_fails tests/test_types.py::TestDateTime::test_validation_returns_combined_errors_if_multiple_validators_fail tests/test_types.py::TestDateTime::test_loading_missing_value_raises_required_error tests/test_types.py::TestDateTime::test_loading_None_raises_required_error tests/test_types.py::TestDateTime::test_dumping_missing_value_raises_required_error tests/test_types.py::TestDateTime::test_dumping_None_raises_required_error tests/test_types.py::TestDateTime::test_name tests/test_types.py::TestDateTime::test_description tests/test_types.py::TestDateTime::test_loading_string_date tests/test_types.py::TestDateTime::test_loading_using_predefined_format tests/test_types.py::TestDateTime::test_loading_using_custom_format tests/test_types.py::TestDateTime::test_loading_raises_ValidationError_if_value_is_not_string tests/test_types.py::TestDateTime::test_customizing_error_message_if_value_is_not_string tests/test_types.py::TestDateTime::test_loading_raises_ValidationError_if_value_string_does_not_match_date_format tests/test_types.py::TestDateTime::test_customizing_error_message_if_value_string_does_not_match_date_format tests/test_types.py::TestDateTime::test_loading_passes_deserialized_date_to_validator tests/test_types.py::TestDateTime::test_dumping_date tests/test_types.py::TestDateTime::test_dumping_using_predefined_format tests/test_types.py::TestDateTime::test_dumping_using_custom_format tests/test_types.py::TestDateTime::test_dumping_raises_ValidationError_if_value_is_not_string tests/test_types.py::TestDate::test_loading_does_not_raise_ValidationError_if_validators_succeed tests/test_types.py::TestDate::test_loading_raises_ValidationError_if_validator_fails tests/test_types.py::TestDate::test_loading_raises_ValidationError_with_combined_messages_if_multiple_validators_fail tests/test_types.py::TestDate::test_loading_passes_context_to_validator tests/test_types.py::TestDate::test_validation_returns_None_if_validators_succeed tests/test_types.py::TestDate::test_validation_returns_errors_if_validator_fails tests/test_types.py::TestDate::test_validation_returns_combined_errors_if_multiple_validators_fail tests/test_types.py::TestDate::test_loading_missing_value_raises_required_error tests/test_types.py::TestDate::test_loading_None_raises_required_error tests/test_types.py::TestDate::test_dumping_missing_value_raises_required_error tests/test_types.py::TestDate::test_dumping_None_raises_required_error tests/test_types.py::TestDate::test_name tests/test_types.py::TestDate::test_description tests/test_types.py::TestDate::test_loading_string_date tests/test_types.py::TestDate::test_loading_using_predefined_format tests/test_types.py::TestDate::test_loading_using_custom_format tests/test_types.py::TestDate::test_loading_raises_ValidationError_if_value_is_not_string tests/test_types.py::TestDate::test_customizing_error_message_if_value_is_not_string tests/test_types.py::TestDate::test_loading_raises_ValidationError_if_value_string_does_not_match_date_format tests/test_types.py::TestDate::test_customizing_error_message_if_value_string_does_not_match_date_format tests/test_types.py::TestDate::test_loading_passes_deserialized_date_to_validator tests/test_types.py::TestDate::test_dumping_date tests/test_types.py::TestDate::test_dumping_using_predefined_format tests/test_types.py::TestDate::test_dumping_using_custom_format tests/test_types.py::TestDate::test_dumping_raises_ValidationError_if_value_is_not_string tests/test_types.py::TestTime::test_loading_does_not_raise_ValidationError_if_validators_succeed tests/test_types.py::TestTime::test_loading_raises_ValidationError_if_validator_fails tests/test_types.py::TestTime::test_loading_raises_ValidationError_with_combined_messages_if_multiple_validators_fail tests/test_types.py::TestTime::test_loading_passes_context_to_validator tests/test_types.py::TestTime::test_validation_returns_None_if_validators_succeed tests/test_types.py::TestTime::test_validation_returns_errors_if_validator_fails tests/test_types.py::TestTime::test_validation_returns_combined_errors_if_multiple_validators_fail tests/test_types.py::TestTime::test_loading_missing_value_raises_required_error tests/test_types.py::TestTime::test_loading_None_raises_required_error tests/test_types.py::TestTime::test_dumping_missing_value_raises_required_error tests/test_types.py::TestTime::test_dumping_None_raises_required_error tests/test_types.py::TestTime::test_name tests/test_types.py::TestTime::test_description tests/test_types.py::TestTime::test_loading_string_date tests/test_types.py::TestTime::test_loading_using_custom_format tests/test_types.py::TestTime::test_loading_raises_ValidationError_if_value_is_not_string tests/test_types.py::TestTime::test_customizing_error_message_if_value_is_not_string tests/test_types.py::TestTime::test_loading_raises_ValidationError_if_value_string_does_not_match_date_format tests/test_types.py::TestTime::test_customizing_error_message_if_value_string_does_not_match_date_format tests/test_types.py::TestTime::test_loading_passes_deserialized_date_to_validator tests/test_types.py::TestTime::test_dumping_date tests/test_types.py::TestTime::test_dumping_using_custom_format tests/test_types.py::TestTime::test_dumping_raises_ValidationError_if_value_is_not_string tests/test_types.py::TestList::test_loading_does_not_raise_ValidationError_if_validators_succeed tests/test_types.py::TestList::test_loading_raises_ValidationError_if_validator_fails tests/test_types.py::TestList::test_loading_raises_ValidationError_with_combined_messages_if_multiple_validators_fail tests/test_types.py::TestList::test_loading_passes_context_to_validator tests/test_types.py::TestList::test_validation_returns_None_if_validators_succeed tests/test_types.py::TestList::test_validation_returns_errors_if_validator_fails tests/test_types.py::TestList::test_validation_returns_combined_errors_if_multiple_validators_fail tests/test_types.py::TestList::test_loading_missing_value_raises_required_error tests/test_types.py::TestList::test_loading_None_raises_required_error tests/test_types.py::TestList::test_dumping_missing_value_raises_required_error tests/test_types.py::TestList::test_dumping_None_raises_required_error tests/test_types.py::TestList::test_name tests/test_types.py::TestList::test_description tests/test_types.py::TestList::test_loading_list_value tests/test_types.py::TestList::test_loading_non_list_value_raises_ValidationError tests/test_types.py::TestList::test_loading_list_value_with_items_of_incorrect_type_raises_ValidationError tests/test_types.py::TestList::test_loading_list_value_with_items_that_have_validation_errors_raises_ValidationError tests/test_types.py::TestList::test_loading_does_not_validate_whole_list_if_items_have_errors tests/test_types.py::TestList::test_loading_passes_context_to_inner_type_load tests/test_types.py::TestList::test_dumping_list_value tests/test_types.py::TestList::test_dumping_sequence_value tests/test_types.py::TestList::test_dumping_non_list_value_raises_ValidationError tests/test_types.py::TestList::test_dumping_list_value_with_items_of_incorrect_type_raises_ValidationError tests/test_types.py::TestList::test_dumping_passes_context_to_inner_type_dump tests/test_types.py::TestTuple::test_loading_does_not_raise_ValidationError_if_validators_succeed tests/test_types.py::TestTuple::test_loading_raises_ValidationError_if_validator_fails tests/test_types.py::TestTuple::test_loading_raises_ValidationError_with_combined_messages_if_multiple_validators_fail tests/test_types.py::TestTuple::test_loading_passes_context_to_validator tests/test_types.py::TestTuple::test_validation_returns_None_if_validators_succeed tests/test_types.py::TestTuple::test_validation_returns_errors_if_validator_fails tests/test_types.py::TestTuple::test_validation_returns_combined_errors_if_multiple_validators_fail tests/test_types.py::TestTuple::test_loading_missing_value_raises_required_error tests/test_types.py::TestTuple::test_loading_None_raises_required_error tests/test_types.py::TestTuple::test_dumping_missing_value_raises_required_error tests/test_types.py::TestTuple::test_dumping_None_raises_required_error tests/test_types.py::TestTuple::test_name tests/test_types.py::TestTuple::test_description tests/test_types.py::TestTuple::test_loading_tuple_with_values_of_same_type tests/test_types.py::TestTuple::test_loading_tuple_with_values_of_different_type tests/test_types.py::TestTuple::test_loading_non_tuple_value_raises_ValidationError tests/test_types.py::TestTuple::test_loading_tuple_with_items_of_incorrect_type_raises_ValidationError tests/test_types.py::TestTuple::test_loading_tuple_with_items_that_have_validation_errors_raises_ValidationErrors tests/test_types.py::TestTuple::test_loading_passes_context_to_inner_type_load tests/test_types.py::TestTuple::test_dump_tuple tests/test_types.py::TestTuple::test_dump_sequence tests/test_types.py::TestTuple::test_dumping_non_tuple_raises_ValidationError tests/test_types.py::TestTuple::test_dumping_sequence_of_incorrect_length_raises_ValidationError tests/test_types.py::TestTuple::test_dumping_tuple_with_items_of_incorrect_type_raises_ValidationError tests/test_types.py::TestTuple::test_dumping_tuple_passes_context_to_inner_type_dump tests/test_types.py::TestDict::test_loading_does_not_raise_ValidationError_if_validators_succeed tests/test_types.py::TestDict::test_loading_raises_ValidationError_if_validator_fails tests/test_types.py::TestDict::test_loading_raises_ValidationError_with_combined_messages_if_multiple_validators_fail tests/test_types.py::TestDict::test_loading_passes_context_to_validator tests/test_types.py::TestDict::test_validation_returns_None_if_validators_succeed tests/test_types.py::TestDict::test_validation_returns_errors_if_validator_fails tests/test_types.py::TestDict::test_validation_returns_combined_errors_if_multiple_validators_fail tests/test_types.py::TestDict::test_loading_missing_value_raises_required_error tests/test_types.py::TestDict::test_loading_None_raises_required_error tests/test_types.py::TestDict::test_dumping_missing_value_raises_required_error tests/test_types.py::TestDict::test_dumping_None_raises_required_error tests/test_types.py::TestDict::test_name tests/test_types.py::TestDict::test_description tests/test_types.py::TestDict::test_loading_dict_with_custom_key_type tests/test_types.py::TestDict::test_loading_accepts_any_key_if_key_type_is_not_specified tests/test_types.py::TestDict::test_loading_dict_with_values_of_the_same_type tests/test_types.py::TestDict::test_loading_dict_with_values_of_different_types tests/test_types.py::TestDict::test_loading_accepts_any_value_if_value_types_are_not_specified tests/test_types.py::TestDict::test_loading_non_dict_value_raises_ValidationError tests/test_types.py::TestDict::test_loading_dict_with_incorrect_key_value_raises_ValidationError tests/test_types.py::TestDict::test_loading_dict_with_items_of_incorrect_type_raises_ValidationError tests/test_types.py::TestDict::test_loading_dict_with_items_that_have_validation_errors_raises_ValidationError tests/test_types.py::TestDict::test_loading_does_not_validate_whole_list_if_items_have_errors tests/test_types.py::TestDict::test_loading_dict_with_incorrect_key_value_and_incorrect_value_raises_ValidationError_with_both_errors tests/test_types.py::TestDict::test_loading_passes_context_to_inner_type_load tests/test_types.py::TestDict::test_dumping_dict_with_custom_key_type tests/test_types.py::TestDict::test_dumping_accepts_any_key_if_key_type_is_not_specified tests/test_types.py::TestDict::test_dumping_dict_with_values_of_the_same_type tests/test_types.py::TestDict::test_dumping_dict_with_values_of_different_types tests/test_types.py::TestDict::test_dumping_accepts_any_value_if_value_types_are_not_specified tests/test_types.py::TestDict::test_dumping_non_dict_value_raises_ValidationError tests/test_types.py::TestDict::test_dumping_dict_with_incorrect_key_value_raises_ValidationError tests/test_types.py::TestDict::test_dumping_dict_with_items_of_incorrect_type_raises_ValidationError tests/test_types.py::TestDict::test_dumping_dict_with_incorrect_key_value_and_incorrect_value_raises_ValidationError_with_both_errors tests/test_types.py::TestDict::test_dumping_passes_context_to_inner_type_dump tests/test_types.py::TestOneOf::test_loading_values_of_one_of_listed_types tests/test_types.py::TestOneOf::test_loading_raises_ValidationError_if_value_is_of_unlisted_type tests/test_types.py::TestOneOf::test_loading_raises_ValidationError_if_deserialized_value_has_errors tests/test_types.py::TestOneOf::test_loading_raises_ValidationError_if_type_hint_is_unknown tests/test_types.py::TestOneOf::test_loading_with_type_hinting tests/test_types.py::TestOneOf::test_loading_with_type_hinting_raises_ValidationError_if_deserialized_value_has_errors tests/test_types.py::TestOneOf::test_dumping_values_of_one_of_listed_types tests/test_types.py::TestOneOf::test_dumping_raises_ValidationError_if_value_is_of_unlisted_type tests/test_types.py::TestOneOf::test_dumping_raises_ValidationError_if_type_hint_is_unknown tests/test_types.py::TestOneOf::test_dumping_raises_ValidationError_if_serialized_value_has_errors tests/test_types.py::TestOneOf::test_dumping_with_type_hinting tests/test_types.py::TestOneOf::test_dumping_with_type_hinting_raises_ValidationError_if_deserialized_value_has_errors tests/test_types.py::TestAttributeField::test_getting_value_returns_value_of_given_object_attribute tests/test_types.py::TestAttributeField::test_getting_value_returns_value_of_configured_object_attribute tests/test_types.py::TestAttributeField::test_getting_value_returns_value_of_field_name_transformed_with_given_name_transformation tests/test_types.py::TestAttributeField::test_setting_value_sets_given_value_to_given_object_attribute tests/test_types.py::TestAttributeField::test_setting_value_sets_given_value_to_configured_object_attribute tests/test_types.py::TestAttributeField::test_setting_value_sets_given_value_to_field_name_transformed_with_given_name_transformation tests/test_types.py::TestAttributeField::test_loading_value_with_field_type tests/test_types.py::TestAttributeField::test_loading_given_attribute_regardless_of_attribute_override tests/test_types.py::TestAttributeField::test_loading_missing_value_if_attribute_does_not_exist tests/test_types.py::TestAttributeField::test_loading_passes_context_to_field_type_load tests/test_types.py::TestAttributeField::test_dumping_given_attribute_from_object tests/test_types.py::TestAttributeField::test_dumping_object_attribute_with_field_type tests/test_types.py::TestAttributeField::test_dumping_a_different_attribute_from_object tests/test_types.py::TestAttributeField::test_dumping_passes_context_to_field_type_dump tests/test_types.py::TestMethodField::test_get_value_returns_result_of_calling_configured_method_on_object tests/test_types.py::TestMethodField::test_get_value_returns_result_of_calling_method_calculated_by_given_function_on_object tests/test_types.py::TestMethodField::test_get_value_returns_MISSING_if_get_method_is_not_specified tests/test_types.py::TestMethodField::test_get_value_raises_ValueError_if_method_does_not_exist tests/test_types.py::TestMethodField::test_get_value_raises_ValueError_if_property_is_not_callable tests/test_types.py::TestMethodField::test_get_value_passes_context_to_method tests/test_types.py::TestMethodField::test_set_value_calls_configure_method_on_object tests/test_types.py::TestMethodField::test_set_value_calls_method_calculated_by_given_function_on_object tests/test_types.py::TestMethodField::test_set_value_does_not_do_anything_if_set_method_is_not_specified tests/test_types.py::TestMethodField::test_set_value_raises_ValueError_if_method_does_not_exist tests/test_types.py::TestMethodField::test_set_value_raises_ValueError_if_property_is_not_callable tests/test_types.py::TestMethodField::test_set_value_passes_context_to_method tests/test_types.py::TestMethodField::test_loading_value_with_field_type tests/test_types.py::TestMethodField::test_loading_value_returns_loaded_value tests/test_types.py::TestMethodField::test_loading_value_passes_context_to_field_types_load tests/test_types.py::TestMethodField::test_loading_value_into_existing_object_calls_field_types_load_into tests/test_types.py::TestMethodField::test_loading_value_into_existing_object_calls_field_types_load_if_load_into_is_not_available tests/test_types.py::TestMethodField::test_loading_value_into_existing_object_calls_field_types_load_if_old_value_is_None tests/test_types.py::TestMethodField::test_loading_value_into_existing_object_calls_field_types_load_if_old_value_is_MISSING tests/test_types.py::TestMethodField::test_loading_value_into_existing_object_passes_context_to_field_types_load_into tests/test_types.py::TestMethodField::test_dumping_result_of_given_objects_method tests/test_types.py::TestMethodField::test_dumping_result_of_objects_method_with_field_type tests/test_types.py::TestMethodField::test_dumping_result_of_a_different_objects_method tests/test_types.py::TestMethodField::test_dumping_raises_ValueError_if_given_method_does_not_exist tests/test_types.py::TestMethodField::test_dumping_raises_ValueError_if_given_method_is_not_callable tests/test_types.py::TestMethodField::test_dumping_passes_context_to_field_type_dump tests/test_types.py::TestFunctionField::test_get_value_returns_result_of_calling_configured_function_with_object tests/test_types.py::TestFunctionField::test_get_value_returns_MISSING_if_get_func_is_not_specified tests/test_types.py::TestFunctionField::test_get_value_raises_ValueError_if_property_is_not_callable tests/test_types.py::TestFunctionField::test_get_value_passes_context_to_func tests/test_types.py::TestFunctionField::test_set_value_calls_configure_method_on_object tests/test_types.py::TestFunctionField::test_set_value_does_not_do_anything_if_set_func_is_not_specified tests/test_types.py::TestFunctionField::test_set_value_raises_ValueError_if_property_is_not_callable tests/test_types.py::TestFunctionField::test_set_value_passes_context_to_func tests/test_types.py::TestFunctionField::test_loading_value_with_field_type tests/test_types.py::TestFunctionField::test_loading_value_returns_loaded_value tests/test_types.py::TestFunctionField::test_loading_value_passes_context_to_field_types_load tests/test_types.py::TestFunctionField::test_loading_value_into_existing_object_calls_field_types_load_into tests/test_types.py::TestFunctionField::test_loading_value_into_existing_object_calls_field_types_load_if_load_into_is_not_available tests/test_types.py::TestFunctionField::test_loading_value_into_existing_object_calls_field_types_load_if_old_value_is_None tests/test_types.py::TestFunctionField::test_loading_value_into_existing_object_calls_field_types_load_if_old_value_is_MISSING tests/test_types.py::TestFunctionField::test_loading_value_into_existing_object_passes_context_to_field_types_load_into tests/test_types.py::TestFunctionField::test_dumping_result_of_given_function tests/test_types.py::TestFunctionField::test_dumping_result_of_objects_method_with_field_type tests/test_types.py::TestFunctionField::test_dumping_raises_ValueError_if_given_get_func_is_not_callable tests/test_types.py::TestFunctionField::test_dumping_passes_context_to_field_type_dump tests/test_types.py::TestConstant::test_name tests/test_types.py::TestConstant::test_description tests/test_types.py::TestConstant::test_loading_always_returns_missing tests/test_types.py::TestConstant::test_loading_raises_ValidationError_if_loaded_value_is_not_a_constant_value_specified tests/test_types.py::TestConstant::test_loading_value_with_inner_type_before_checking_value_correctness tests/test_types.py::TestConstant::test_customizing_error_message_when_value_is_incorrect tests/test_types.py::TestConstant::test_dumping_always_returns_given_value tests/test_types.py::TestConstant::test_dumping_given_constant_with_field_type tests/test_types.py::TestObject::test_loading_does_not_raise_ValidationError_if_validators_succeed tests/test_types.py::TestObject::test_loading_raises_ValidationError_if_validator_fails tests/test_types.py::TestObject::test_loading_raises_ValidationError_with_combined_messages_if_multiple_validators_fail tests/test_types.py::TestObject::test_loading_passes_context_to_validator tests/test_types.py::TestObject::test_validation_returns_None_if_validators_succeed tests/test_types.py::TestObject::test_validation_returns_errors_if_validator_fails tests/test_types.py::TestObject::test_validation_returns_combined_errors_if_multiple_validators_fail tests/test_types.py::TestObject::test_loading_missing_value_raises_required_error tests/test_types.py::TestObject::test_loading_None_raises_required_error tests/test_types.py::TestObject::test_dumping_missing_value_raises_required_error tests/test_types.py::TestObject::test_dumping_None_raises_required_error tests/test_types.py::TestObject::test_name tests/test_types.py::TestObject::test_description tests/test_types.py::TestObject::test_default_field_type_is_unset_by_default tests/test_types.py::TestObject::test_inheriting_default_field_type_from_first_base_class_that_has_it_set tests/test_types.py::TestObject::test_constructor_is_unset_by_default tests/test_types.py::TestObject::test_inheriting_constructor_from_first_base_class_that_has_it_set tests/test_types.py::TestObject::test_allow_extra_fields_is_unset_by_default tests/test_types.py::TestObject::test_inheriting_allow_extra_fields_from_first_base_class_that_has_it_set tests/test_types.py::TestObject::test_immutable_is_unset_by_default tests/test_types.py::TestObject::test_inheriting_immutable_from_first_base_class_that_has_it_set tests/test_types.py::TestObject::test_ordered_is_unset_by_default tests/test_types.py::TestObject::test_iheriting_ordered_from_first_base_class_that_has_it_set tests/test_types.py::TestObject::test_loading_dict_value tests/test_types.py::TestObject::test_loading_non_dict_values_raises_ValidationError tests/test_types.py::TestObject::test_loading_bypasses_values_for_which_field_type_returns_missing_value tests/test_types.py::TestObject::test_loading_dict_with_field_errors_raises_ValidationError_with_all_field_errors_merged tests/test_types.py::TestObject::test_loading_dict_with_field_errors_does_not_run_whole_object_validators tests/test_types.py::TestObject::test_loading_calls_field_load_passing_field_name_and_whole_data tests/test_types.py::TestObject::test_loading_passes_context_to_inner_type_load tests/test_types.py::TestObject::test_constructing_objects_with_default_constructor_on_load tests/test_types.py::TestObject::test_constructing_custom_objects_on_load tests/test_types.py::TestObject::test_load_ignores_extra_fields_by_default tests/test_types.py::TestObject::test_load_raises_ValidationError_if_reporting_extra_fields tests/test_types.py::TestObject::test_loading_inherited_fields tests/test_types.py::TestObject::test_loading_multiple_inherited_fields tests/test_types.py::TestObject::test_loading_raises_ValidationError_if_inherited_fields_have_errors tests/test_types.py::TestObject::test_loading_only_specified_fields tests/test_types.py::TestObject::test_loading_only_specified_fields_does_not_affect_own_fields tests/test_types.py::TestObject::test_loading_all_but_specified_base_class_fields tests/test_types.py::TestObject::test_loading_all_but_specified_fields_does_not_affect_own_fields tests/test_types.py::TestObject::test_loading_values_into_existing_object tests/test_types.py::TestObject::test_loading_values_into_existing_object_returns_that_object tests/test_types.py::TestObject::test_loading_values_into_existing_object_passes_all_object_attributes_to_validators tests/test_types.py::TestObject::test_loading_values_into_immutable_object_creates_a_copy tests/test_types.py::TestObject::test_loading_values_into_immutable_object_does_not_modify_original_object tests/test_types.py::TestObject::test_loading_values_into_nested_object_of_immutable_object_creates_copy_of_it_regardless_of_nested_objects_immutable_flag tests/test_types.py::TestObject::test_loading_values_into_nested_object_of_immutable_object_does_not_modify_original_objects tests/test_types.py::TestObject::test_loading_values_into_nested_objects_with_inplace_False_does_not_modify_original_objects tests/test_types.py::TestObject::test_loading_values_into_existing_objects_ignores_missing_fields tests/test_types.py::TestObject::test_loading_MISSING_into_existing_object_does_not_do_anything tests/test_types.py::TestObject::test_loading_None_into_existing_objects_raises_ValidationError tests/test_types.py::TestObject::test_loading_None_into_field_of_existing_object_passes_None_to_field tests/test_types.py::TestObject::test_loading_values_into_existing_objects_raises_ValidationError_if_data_contains_errors tests/test_types.py::TestObject::test_loading_values_into_existing_objects_raises_ValidationError_if_validator_fails tests/test_types.py::TestObject::test_loading_values_into_existing_objects_annotates_field_errors_with_field_names tests/test_types.py::TestObject::test_loading_values_into_existing_nested_objects tests/test_types.py::TestObject::test_loading_values_into_existing_object_when_nested_object_does_not_exist tests/test_types.py::TestObject::test_validating_data_for_existing_objects_returns_None_if_data_is_valid tests/test_types.py::TestObject::test_validating_data_for_existing_objects_returns_errors_if_data_contains_errors tests/test_types.py::TestObject::test_validating_data_for_existing_objects_returns_errors_if_validator_fails tests/test_types.py::TestObject::test_validating_data_for_existing_objects_does_not_modify_original_objects tests/test_types.py::TestObject::test_dumping_object_attributes tests/test_types.py::TestObject::test_dumping_calls_field_dump_passing_field_name_and_whole_object tests/test_types.py::TestObject::test_dumping_passes_context_to_inner_type_dump tests/test_types.py::TestObject::test_dumping_inherited_fields tests/test_types.py::TestObject::test_dumping_multiple_inherited_fields tests/test_types.py::TestObject::test_dumping_only_specified_fields_of_base_classes tests/test_types.py::TestObject::test_dumping_only_specified_fields_does_not_affect_own_fields tests/test_types.py::TestObject::test_dumping_all_but_specified_base_class_fields tests/test_types.py::TestObject::test_dumping_all_but_specified_fields_does_not_affect_own_fields tests/test_types.py::TestObject::test_shortcut_for_specifying_constant_fields tests/test_types.py::TestObject::test_dumping_fields_in_declared_order_if_ordered_is_True tests/test_types.py::TestOptional::test_loading_value_calls_load_of_inner_type tests/test_types.py::TestOptional::test_loading_missing_value_returns_None tests/test_types.py::TestOptional::test_loading_None_returns_None tests/test_types.py::TestOptional::test_loading_missing_value_does_not_call_inner_type_load tests/test_types.py::TestOptional::test_loading_None_does_not_call_inner_type_load tests/test_types.py::TestOptional::test_loading_passes_context_to_inner_type_load tests/test_types.py::TestOptional::test_overriding_missing_value_on_load tests/test_types.py::TestOptional::test_overriding_None_value_on_load tests/test_types.py::TestOptional::test_using_function_to_override_value_on_load tests/test_types.py::TestOptional::test_loading_passes_context_to_override_function tests/test_types.py::TestOptional::test_dumping_value_calls_dump_of_inner_type tests/test_types.py::TestOptional::test_dumping_missing_value_returns_None tests/test_types.py::TestOptional::test_dumping_None_returns_None tests/test_types.py::TestOptional::test_dumping_missing_value_does_not_call_inner_type_dump tests/test_types.py::TestOptional::test_dumping_None_does_not_call_inner_type_dump tests/test_types.py::TestOptional::test_dumping_passes_context_to_inner_type_dump tests/test_types.py::TestOptional::test_overriding_missing_value_on_dump tests/test_types.py::TestOptional::test_overriding_None_value_on_dump tests/test_types.py::TestOptional::test_using_function_to_override_value_on_dump tests/test_types.py::TestOptional::test_dumping_passes_context_to_override_function tests/test_types.py::TestLoadOnly::test_name tests/test_types.py::TestLoadOnly::test_description tests/test_types.py::TestLoadOnly::test_loading_returns_inner_type_load_result tests/test_types.py::TestLoadOnly::test_loading_passes_context_to_inner_type_load tests/test_types.py::TestLoadOnly::test_dumping_always_returns_missing tests/test_types.py::TestLoadOnly::test_dumping_does_not_call_inner_type_dump tests/test_types.py::TestDumpOnly::test_name tests/test_types.py::TestDumpOnly::test_description tests/test_types.py::TestDumpOnly::test_loading_always_returns_missing tests/test_types.py::TestDumpOnly::test_loading_does_not_call_inner_type_dump tests/test_types.py::TestDumpOnly::test_dumping_returns_inner_type_dump_result tests/test_types.py::TestDumpOnly::test_dumping_passes_context_to_inner_type_dump tests/test_types.py::TestTransform::test_name tests/test_types.py::TestTransform::test_description tests/test_types.py::TestTransform::test_loading_calls_pre_load_with_original_value tests/test_types.py::TestTransform::test_loading_calls_inner_type_load_with_result_of_pre_load tests/test_types.py::TestTransform::test_loading_calls_post_load_with_result_of_inner_type_load tests/test_types.py::TestTransform::test_transform_passes_context_to_inner_type_load tests/test_types.py::TestTransform::test_transform_passes_context_to_pre_load tests/test_types.py::TestTransform::test_transform_passes_context_to_post_load tests/test_types.py::TestTransform::test_dumping_calls_pre_dump_with_original_value tests/test_types.py::TestTransform::test_dumping_calls_inner_type_dump_with_result_of_pre_dump tests/test_types.py::TestTransform::test_dumping_calls_post_dump_with_result_of_inner_type_dump tests/test_types.py::TestTransform::test_transform_passes_context_to_inner_type_dump tests/test_types.py::TestTransform::test_transform_passes_context_to_pre_dump tests/test_types.py::TestTransform::test_transform_passes_context_to_post_dump tests/test_types.py::TestValidatedType::test_returns_subclass_of_given_type tests/test_types.py::TestValidatedType::test_returns_type_that_has_single_given_validator tests/test_types.py::TestValidatedType::test_accepts_context_unaware_validators tests/test_types.py::TestValidatedType::test_returns_type_that_has_multiple_given_validators tests/test_types.py::TestValidatedType::test_specifying_more_validators_on_type_instantiation tests/test_types.py::TestValidatedType::test_new_type_accepts_same_constructor_arguments_as_base_type