def get_resource_solvers(self, resource):
solvers_classes = [s for s in self.resource_solver_classes if s.can_solve(resource)]<EOL>if solvers_classes:<EOL><INDENT>solvers = []<EOL>for solver_class in solvers_classes:<EOL><INDENT>if solver_class not in self._resource_solvers_cache:<EOL><INDENT>self._resource_solvers_cache[solver_class] = solver_class(self)<EOL><DEDENT>solvers.append(self._resource_solvers_cache[solver_class])<EOL><DEDENT>return solvers<EOL><DEDENT>raise SolverNotFound(self, resource)<EOL>
Returns the resource solvers that can solve the given resource.

        Arguments
        ---------
        resource : dataql.resources.Resource
            An instance of a subclass of ``Resource`` for which we want to get the solver
            classes that can solve it.

        Returns
        -------
        list
            The list of resource solvers instances that can solve the given resource.

        Raises
        ------
        dataql.solvers.exceptions.SolverNotFound
            When no solver is able to solve the given resource.

        Example
        -------

        >>> from dataql.resources import Field, List
        >>> registry = Registry()
        >>> registry.get_resource_solvers(Field(name='foo'))
        [<AttributeSolver>]
        >>> registry.get_resource_solvers(List(name='foo'))
        [<ListSolver>]
        >>> registry.get_resource_solvers(None) # doctest: +ELLIPSIS
        Traceback (most recent call last):
        dataql.solvers.exceptions.SolverNotFound: No solvers found for this kind of object:...