<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def findall_by_attr(node, value, name="name", maxlevel=None, mincount=None, maxcount=None):
 """ Search nodes with attribute `name` having `value` but stop at `maxlevel`. Return tuple with matching nodes. Args: node: top node, start searching. value: value which need to match Keyword Args: name (str):
 attribute name need to match maxlevel (int):
 maximum decending in the node hierarchy. mincount (int):
 minimum number of nodes. maxcount (int):
 maximum number of nodes. Example tree: f |-- b | |-- a | +-- d | |-- c | +-- e +-- g +-- i +-- h (Node('/f/b/d'),) """

    return _findall(node, filter_=lambda n: _filter_by_name(n, name, value),
                    maxlevel=maxlevel, mincount=mincount, maxcount=maxcount)