~mvo/software-center/oneconf-lp981536

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/python

import os
import sys
import xapian

from optparse import OptionParser

sys.path.insert(0, "../")
from softwarecenter.enums import XAPIAN_VALUE_PKGNAME
from softwarecenter.paths import XAPIAN_BASE_PATH
from softwarecenter.utils import ExecutionTime

def parse_query(parser, search_strings, verbose=True):
    str_to_prefix = { 'section' : 'AE',
                      'type' : 'AT',
                      'category' : 'AC' 
                    }
    for st in search_strings:
        (search_prefix, search_term) = st.split(":")
        if search_prefix == "section":
            t = str_to_prefix[search_prefix]
            s = search_term.lower()
            query = xapian.Query(t+s)
            for pre in ["universe","multiverse","restricted"]:
                query = xapian.Query(xapian.Query.OP_OR,
                                     query,
                                     xapian.Query("%s%s/%s" % (t,pre,s)))
                query = xapian.Query(xapian.Query.OP_OR,
                                     query,
                                     xapian.Query("XS%s/%s" % (pre,s)))
                
        else:
            query = xapian.Query(str_to_prefix[search_prefix]+search_term.lower())  
        enquire = xapian.Enquire(db)
        enquire.set_query(query)
        with ExecutionTime("Search took"):
            mset = enquire.get_mset(0, db.get_doccount())
            print "Found %i documents for search '%s'" % (len(mset), st)
            if verbose:
                for m in mset:
                    doc = m.document
                    appname = doc.get_data()
                    pkgname = doc.get_value(XAPIAN_VALUE_PKGNAME)
                    print "%s ; %s" % (appname, pkgname)
        print

if __name__ == "__main__":

    parser = OptionParser()
    parser.add_option("-v", "--verbose", action="store_true",
                      default=False,
                      help="print found apps/pkgs too")
    (options, args) = parser.parse_args()

    pathname = os.path.join(XAPIAN_BASE_PATH, "xapian")
    db = xapian.Database(pathname)

    axi = xapian.Database("/var/lib/apt-xapian-index/index")
    db.add_database(axi)
    parser = xapian.QueryParser()
    parser.set_database(db)

 
    if not args:
        print "example usage: "
        print " section:net"
        print " category:AudioVideo"
        print " type:Application"
        sys.exit(1)

    parse_query(parser, args, options.verbose)