code: def search(cls, query, search_opts=None):
          
  
          if search_opts is None:
              search_opts = {}
  
          xmlrpc = XMLRPCConnection()
          try:
              search_result = xmlrpc.connection.search_pool(
                  {
                      'query': query,
                      'search_options': search_opts,
                      'auth': AuthOptions().options
                  })
          except xmlrpclib.Fault as xml_fault:
              raise _fault_to_exception(xml_fault)
          result = dict()
          result['result'] = []
          result['search_options'] = search_result['search_options']
          for pool in search_result['result']:
              p = Pool.from_dict(pool)
              result['result'].append(p)
  
          return result
docs: Search pools.
  
              Maps to the function :py:func:`nipap.backend.Nipap.search_pool` in
              the backend. Please see the documentation for the backend function
              for information regarding input arguments and return values.