code: def search(cls, query, search_opts=None):
          
  
          if search_opts is None:
              search_opts = {}
  
          xmlrpc = XMLRPCConnection()
          try:
              search_result = xmlrpc.connection.search_tag(
                  {
                      '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 xml_tag in search_result['result']:
              result['result'].append(Tag.from_dict(xml_tag))
  
          return result
docs: Search tags.
  
              For more information, see the backend function
              :py:func:`nipap.backend.Nipap.search_tag`.