# Path: librouteros/protocol.py
# def cast_to_api(value: typing.Any) -> str:
#     """Cast python equivalent to API."""
#     mapping = {True: 'yes', False: 'no'}
#     # this is necesary because 1 == True, 0 == False
#     if type(value) == int:
#         return str(value)
#     return mapping.get(value, str(value))
# 
# Path: librouteros/types.py



import typing
from itertools import chain
from librouteros.protocol import (
    cast_to_api,
)
from librouteros.types import (
    QueryGen,
    ResponseIter,
)
        yield '?#!'

    def __lt__(self, other):
        yield f'?<{self}={cast_to_api(other)}'

    def __gt__(self, other):
        yield f'?>{self}={cast_to_api(other)}'

    def __str__(self) -> str:
        return str(self.name)

    # pylint: disable=invalid-name
    def In(self, one, *elems):
        yield from self == one
        yield from chain.from_iterable(self == str(elem) for elem in elems)
        yield from ('?#|', ) * len(elems)


class Query:

    def __init__(self, path, keys: typing.Sequence[Key], api):
        self.path = path
        self.keys = keys
        self.api = api
        self.query: typing.Tuple[str, ...] = tuple()

    def where(self, *args: str):
        self.query = tuple(chain.from_iterable(args))
        return self


# Path: librouteros/protocol.py
# def cast_to_api(value: typing.Any) -> str:
#     """Cast python equivalent to API."""
#     mapping = {True: 'yes', False: 'no'}
#     # this is necesary because 1 == True, 0 == False
#     if type(value) == int:
#         return str(value)
#     return mapping.get(value, str(value))
# 
# Path: librouteros/types.py



# Path: librouteros/query.py
import typing
from itertools import chain
from librouteros.protocol import (
    cast_to_api,
)
from librouteros.types import (
    QueryGen,
    ResponseIter,
)

        yield '?#!'

    def __lt__(self, other):
        yield f'?<{self}={cast_to_api(other)}'

    def __gt__(self, other):
        yield f'?>{self}={cast_to_api(other)}'

    def __str__(self) -> str:
        return str(self.name)

    # pylint: disable=invalid-name
    def In(self, one, *elems):
        yield from self == one
        yield from chain.from_iterable(self == str(elem) for elem in elems)
        yield from ('?#|', ) * len(elems)


class Query:

    def __init__(self, path, keys: typing.Sequence[Key], api):
        self.path = path
        self.keys = keys
        self.api = api
        self.query: typing.Tuple[str, ...] = tuple()

    def where(self, *args: str):
        self.query = tuple(chain.from_iterable(args))
        return self


    def __iter__(self) -> ResponseIter: