<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def conforms_to_template_filter(self, template_filter):
 """ Check AttributeFilter conforms to the rules set by the template - If self, has attributes that template_filter does not contain, throw Exception - If sub list found, perform the first check - If self has a value for an attribute, assign to final AttributeFilter - If not found, assign value from template todo: rename as current name is mis-leading """


        if not isinstance(template_filter, self.__class__):
            raise TypeError("AttributeFilter can only check conformance against \
                another template filter, %s provided" % template_filter.__class__.__name__)

        # keys from the template
        template_filter_keys = template_filter.keys()
        # Keys from the object itself
        this_filter_keys = self.keys()

        # 1. Check to see if the client has provided unwanted keys
        unwanted_keys = set(this_filter_keys) - set(template_filter_keys)
        if len(unwanted_keys) > 0:
            raise exception.AttributeFilterDiffers(list(unwanted_keys))

        # 2. Make a attribute_filter that we send back
        evaluated_attribute_filter = AttributeFilter()

        # 3. Evaluate the differences between the two, with template_filter as the standard
        for template_key in template_filter_keys:

            if template_key in this_filter_keys:

                value = getattr(self, template_key)

                # if sub filter and boolean provided with of true, create default filter with value of true
                if isinstance(value, bool) and \
                   value is True and \
                   isinstance(getattr(template_filter, template_key), AttributeFilter):
                    setattr(evaluated_attribute_filter, template_key, getattr(template_filter, template_key))
                elif isinstance(value, bool):
                    setattr(evaluated_attribute_filter, template_key, value)
                elif isinstance(value, self.__class__):
                    # Attribute lists sort themselves out, to produce sub Attribute Filters
                    template_sub_list = getattr(template_filter, template_key)
                    this_sub_list = getattr(self, template_key)
                    setattr(
                        evaluated_attribute_filter, template_key,
                        this_sub_list.conforms_to_template_filter(template_sub_list)
                    )
            else:
                setattr(evaluated_attribute_filter, template_key, getattr(template_filter, template_key))

        return evaluated_attribute_filter