1 # Copyright (C) 2011, Anders F Bjorklund
2 # Copyright (C) 2013, Thomas Leonard
3 # See the COPYING file for details, or visit http://0install.net.
5 # This version for 0mirror is based on original code for 0install:
6 # http://thread.gmane.org/gmane.comp.file-systems.zero-install.devel/3847
11 from whoosh
.index
import create_in
, open_dir
12 from whoosh
import fields
13 from whoosh
.analysis
import StemmingAnalyzer
15 from zeroinstall
.injector
.namespaces
import XMLNS_IFACE
17 sa
= StemmingAnalyzer()
18 schema
= fields
.Schema(
19 uri
= fields
.ID(unique
=True, stored
=True),
20 name
= fields
.KEYWORD(stored
=True, field_boost
=50.0, lowercase
=True),
21 summary
= fields
.TEXT(stored
=True, field_boost
=5.0),
22 description
= fields
.TEXT(analyzer
=sa
),
23 category
= fields
.KEYWORD(stored
=True),
24 homepage
= fields
.STORED
28 def __init__(self
, config
, index_dir
):
30 self
.index_dir
= index_dir
32 if not os
.path
.exists(index_dir
):
33 os
.makedirs(index_dir
)
34 index
= create_in(index_dir
, schema
)
36 index
= open_dir(index_dir
)
38 self
.writer
= index
.writer()
40 def update(self
, url
):
41 feed
= self
.config
.iface_cache
.get_feed(url
)
43 logging
.warning("%s not cached", url
)
47 self
.writer
.delete_by_term('uri', unicode(url
))
48 return # Skip sub-feeds
50 name
= feed
.get_name()
51 summary
= feed
.summary
52 description
= feed
.description
54 for meta
in feed
.get_metadata(XMLNS_IFACE
, 'category'):
55 category
= meta
.content
58 for meta
in feed
.get_metadata(XMLNS_IFACE
, 'homepage'):
59 homepage
= meta
.content
63 self
.writer
.update_document(uri
=unicode(url
), name
=unicode(name
),
64 summary
=unicode(summary
), description
=unicode(description
),
65 category
=category
, homepage
=homepage
)
67 #print "%-32s\"%s\"" % ("%s (%s)" % (name, category), summary)