def search(cls, query, search_opts=None):
        """ Search tags.

            For more information, see the backend function
            :py:func:`nipap.backend.Nipap.search_tag`.
        """

        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
Search tags.

            For more information, see the backend function
            :py:func:`nipap.backend.Nipap.search_tag`.