@classmethod<EOL><INDENT>def smart_search(cls, query_string, search_options=None, extra_query = None):<DEDENT>
if search_options is None:<EOL><INDENT>search_options = {}<EOL><DEDENT>xmlrpc = XMLRPCConnection()<EOL>try:<EOL><INDENT>smart_result = xmlrpc.connection.smart_search_prefix(<EOL>{<EOL>'<STR_LIT>': query_string,<EOL>'<STR_LIT>': search_options,<EOL>'<STR_LIT>': AuthOptions().options,<EOL>'<STR_LIT>': extra_query<EOL>})<EOL><DEDENT>except xmlrpclib.Fault as xml_fault:<EOL><INDENT>raise _fault_to_exception(xml_fault)<EOL><DEDENT>result = dict()<EOL>result['<STR_LIT>'] = smart_result['<STR_LIT>']<EOL>result['<STR_LIT>'] = smart_result['<STR_LIT>']<EOL>result['<STR_LIT:error>'] = smart_result['<STR_LIT:error>']<EOL>if '<STR_LIT>' in smart_result:<EOL><INDENT>result['<STR_LIT>'] = smart_result['<STR_LIT>']<EOL><DEDENT>result['<STR_LIT:result>'] = list()<EOL>for prefix in smart_result['<STR_LIT:result>']:<EOL><INDENT>p = Prefix.from_dict(prefix)<EOL>result['<STR_LIT:result>'].append(p)<EOL><DEDENT>return result<EOL>
Perform a smart prefix search.

            Maps to the function
            :py:func:`nipap.backend.Nipap.smart_search_prefix` in the backend.
            Please see the documentation for the backend function for
            information regarding input arguments and return values.