Switch to unified view

a/src/python/samples/recollq.py b/src/python/samples/recollq.py
1
#!/usr/bin/env python
1
#!/usr/bin/env python
2
"""A python version of the command line query tool recollq (a bit simplified)
3
The input string is always interpreted as a query language string.
4
This could actually be useful for something after some customization
5
"""
2
6
3
import sys
7
import sys
8
from getopt import getopt
4
import recoll
9
import recoll
10
5
allmeta = ("title", "keywords", "abstract", "url", "mimetype", "mtime",
11
allmeta = ("title", "keywords", "abstract", "url", "mimetype", "mtime",
6
           "ipath", "fbytes", "dbytes", "relevancyrating")
12
           "ipath", "fbytes", "dbytes", "relevancyrating")
7
13
8
def Usage():
14
def Usage():
9
    print >> sys.stderr, "Usage: recollq.py <recoll query>"
15
    print >> sys.stderr, "Usage: recollq.py [-c conf] [-i extra_index] <recoll query>"
10
    sys.exit(1);
16
    sys.exit(1);
11
    
17
12
def dotest(db, q):
18
def doquery(db, q):
19
    """Parse and execute query on open db"""
20
    # Get query object
13
    query = db.query()
21
    query = db.query()
22
    # Parse/run input query string
23
    nres = query.execute(q)
14
24
15
    nres = query.execute(q)
25
    # Print results:
16
    print "Result count: ", nres
26
    print "Result count: ", nres
17
    while query.next >= 0 and query.next < nres: 
27
    while query.next >= 0 and query.next < nres: 
18
        doc = query.fetchone()
28
        doc = query.fetchone()
19
        print query.next, ":",
29
        print query.next, ":",
20
        for k in ("title", "url"):
30
        for k in ("title", "url"):
21
            print k, ":", getattr(doc, k).encode('utf-8')
31
            print k, ":", getattr(doc, k).encode('utf-8')
22
        abs = db.makeDocAbstract(doc, query).encode('utf-8')
32
        abs = db.makeDocAbstract(doc, query).encode('utf-8')
23
        print abs
33
        print abs
24
        print
34
        print
25
35
26
# End dotest
36
27
if len(sys.argv) < 2:
37
if len(sys.argv) < 2:
28
    Usage()
38
    Usage()
29
39
40
confdir=""
41
extra_dbs = []
42
# Snippet params
43
maxchars = 120
44
contextwords = 4
45
# Process options: [-c confdir] [-i extra_db [-i extra_db] ...]
46
options, args = getopt(sys.argv[1:], "c:i:")
47
for opt,val in options:
48
    if opt == "-c":
49
        confdir = val
50
    elif opt == "-i":
51
        extra_dbs.append(val)
52
    else:
53
        print >> sys.stderr, "Bad opt: ", opt
54
        Usage()
55
56
# The query should be in the remaining arg(s)
57
if len(args) == 0:
58
    print >> sys.stderr, "No query found in command line"
59
    Usage()
30
q = ""
60
q = ""
31
for word in sys.argv[1:]:
61
for word in args:
32
    q += word + " "
62
    q += word + " "
33
63
34
print "TESTING WITH .recoll, question: [" + q + "]"
64
print "QUERY: [", q, "]"
35
db = recoll.connect()
65
db = recoll.connect(confdir=confdir, 
66
                    extra_dbs=extra_dbs)
36
db.setAbstractParams(maxchars=120, contextwords=4)
67
db.setAbstractParams(maxchars=maxchars, contextwords=contextwords)
37
dotest(db, q)
38
68
39
sys.exit(0)
69
doquery(db, q)
40
70
41
print "TESTING WITH .recoll-test"
42
db = recoll.connect(confdir="/Users/dockes/.recoll-test")
43
dotest(db, q)
44
71
45
print "TESTING WITH .recoll-doc"
46
db = recoll.connect(confdir="/y/home/dockes/.recoll-doc")
47
dotest(db, q)
48
49
print "TESTING WITH .recoll and .recoll-doc"
50
db = recoll.connect(confdir="/Users/dockes/.recoll", 
51
                     extra_dbs=("/y/home/dockes/.recoll-doc",))
52
dotest(db, q)
53