fnp
/
wolnelektury.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Publishing tags, and fixes.
[wolnelektury.git]
/
src
/
search
/
index.py
diff --git
a/src/search/index.py
b/src/search/index.py
index
2d84cb4
..
68a2b3b
100644
(file)
--- a/
src/search/index.py
+++ b/
src/search/index.py
@@
-9,6
+9,9
@@
import os
import re
from django.conf import settings
from librarian import dcparser
import re
from django.conf import settings
from librarian import dcparser
+import librarian.meta.types.date
+import librarian.meta.types.person
+import librarian.meta.types.text
from librarian.parser import WLDocument
from lxml import etree
import scorched
from librarian.parser import WLDocument
from lxml import etree
import scorched
@@
-95,7
+98,10
@@
class Snippets(object):
of the snippet stored there.
"""
self.file.seek(pos[0], 0)
of the snippet stored there.
"""
self.file.seek(pos[0], 0)
- txt = self.file.read(pos[1]).decode('utf-8')
+ try:
+ txt = self.file.read(pos[1]).decode('utf-8')
+ except:
+ return ''
return txt
def close(self):
return txt
def close(self):
@@
-315,21
+321,20
@@
class Index(SolrIndex):
if hasattr(book_info, field.name):
if not getattr(book_info, field.name):
continue
if hasattr(book_info, field.name):
if not getattr(book_info, field.name):
continue
- # since no type information is available, we use validator
- type_indicator = field.validator
- if type_indicator == dcparser.as_unicode:
+ type_indicator = field.value_type
+ if issubclass(type_indicator, librarian.meta.types.text.TextValue):
s = getattr(book_info, field.name)
if field.multiple:
s = ', '.join(s)
fields[field.name] = s
s = getattr(book_info, field.name)
if field.multiple:
s = ', '.join(s)
fields[field.name] = s
- elif
type_indicator == dcparser.as_person
:
+ elif
issubclass(type_indicator, librarian.meta.types.person.Person)
:
p = getattr(book_info, field.name)
p = getattr(book_info, field.name)
- if isinstance(p,
dcparser
.Person):
+ if isinstance(p,
librarian.meta.types.person
.Person):
persons = str(p)
else:
persons = ', '.join(map(str, p))
fields[field.name] = persons
persons = str(p)
else:
persons = ', '.join(map(str, p))
fields[field.name] = persons
- elif
type_indicator == dcparser.as_date
:
+ elif
issubclass(type_indicator, librarian.meta.types.date.DateValue)
:
dt = getattr(book_info, field.name)
fields[field.name] = dt
dt = getattr(book_info, field.name)
fields[field.name] = dt
@@
-636,7
+641,7
@@
class SearchResult(object):
if self._book is not None:
return self._book
try:
if self._book is not None:
return self._book
try:
- self._book = catalogue.models.Book.objects.get(id=self.book_id)
+ self._book = catalogue.models.Book.objects.get(id=self.book_id
, findable=True
)
except catalogue.models.Book.DoesNotExist:
self._book = None
return self._book
except catalogue.models.Book.DoesNotExist:
self._book = None
return self._book
@@
-903,7
+908,7
@@
class Search(SolrIndex):
def search_by_author(self, words):
from catalogue.models import Book
def search_by_author(self, words):
from catalogue.models import Book
- books = Book.objects.filter(parent=None).order_by('-popularity__count')
+ books = Book.objects.filter(parent=None
, findable=True
).order_by('-popularity__count')
for word in words:
books = books.filter(cached_author__iregex='\m%s\M' % word).select_related('popularity__count')
return [SearchResult.from_book(book, how_found='search_by_author', query_terms=words) for book in books[:30]]
for word in words:
books = books.filter(cached_author__iregex='\m%s\M' % word).select_related('popularity__count')
return [SearchResult.from_book(book, how_found='search_by_author', query_terms=words) for book in books[:30]]
@@
-977,7
+982,7
@@
class Search(SolrIndex):
idx += 1
except IOError as e:
idx += 1
except IOError as e:
- book = catalogue.models.Book.objects.filter(id=book_id)
+ book = catalogue.models.Book.objects.filter(id=book_id
, findable=True
)
if not book:
log.error("Book does not exist for book id = %d" % book_id)
elif not book.get().children.exists():
if not book:
log.error("Book does not exist for book id = %d" % book_id)
elif not book.get().children.exists():