@fluent<EOL><INDENT>def iterable(self, iterable_name, *, collection, attribute, word, func=None,<EOL>operation=None):<DEDENT>
if func is None and operation is None:<EOL><INDENT>raise ValueError('<STR_LIT>')<EOL><DEDENT>elif func is not None and operation is not None:<EOL><INDENT>raise ValueError(<EOL>'<STR_LIT>')<EOL><DEDENT>current_att = self._attribute<EOL>self._attribute = iterable_name<EOL>word = self._parse_filter_word(word)<EOL>collection = self._get_mapping(collection)<EOL>attribute = self._get_mapping(attribute)<EOL>if func is not None:<EOL><INDENT>sentence = self._prepare_function(func, attribute, word)<EOL><DEDENT>else:<EOL><INDENT>sentence = self._prepare_sentence(attribute, operation, word)<EOL><DEDENT>filter_str, attrs = sentence<EOL>filter_data = '<STR_LIT>'.format(collection, iterable_name, filter_str), attrs<EOL>self._add_filter(*filter_data)<EOL>self._attribute = current_att<EOL>return self<EOL>
Performs a filter with the OData 'iterable_name' keyword
        on the collection

        For example:
        q.iterable('any', collection='email_addresses', attribute='address',
        operation='eq', word='george@best.com')

        will transform to a filter such as:
        emailAddresses/any(a:a/address eq 'george@best.com')

        :param str iterable_name: the OData name of the iterable
        :param str collection: the collection to apply the any keyword on
        :param str attribute: the attribute of the collection to check
        :param str word: the word to check
        :param str func: the logical function to apply to the attribute inside
         the collection
        :param str operation: the logical operation to apply to the attribute
         inside the collection
        :rtype: Query