from django.utils.safestring import mark_safe
from librarian.builders.html import SnippetHtmlBuilder
from librarian.functions import lang_code_3to2
-from catalogue.models import Author, Thema
+from catalogue.models import Audience, Author, Thema
from .. import models
from .base import BasePublisher
from .woblink_constants import WOBLINK_CATEGORIES
GENERATE_DEMO_URL = BASE_URL + 'task/run/generate-%s-demo/%s/%d'
CHECK_DEMO_URL = BASE_URL + 'task/run/check-%s-demo/%s'
+ SEARCH_CATALOGUE_URL = BASE_URL + '{category}/autocomplete/{term}'
+
ROLE_AUTHOR = 1
ROLE_TRANSLATOR = 4
data=data,
)
+ def search_catalogue(self, category, term):
+ return self.session.get(
+ self.SEARCH_CATALOGUE_URL.format(category=category, term=term)
+ ).json()
+
+ def search_author_catalogue(self, term):
+ return [
+ {
+ 'id': item['autId'],
+ 'text': item['autFullname']
+ }
+ for item in self.search_catalogue('author', term)
+ ]
+ def search_series_catalogue(self, term):
+ return [
+ {
+ 'id': item['id'],
+ 'text': item['name']
+ }
+ for item in self.search_catalogue('series', term)
+ ]
+
def get_isbn(self, meta, errors=None):
if not meta.isbn_epub:
if errors is not None:
return category_ids
def get_series(self, meta, errors=None):
- pass
+ return list(Audience.objects.filter(code__in=meta.audiences).exclude(
+ woblink=None).values_list('woblink', flat=True))
def get_abstract(self, wldoc, errors=None, description_add=None):
description = self.get_description(wldoc, description_add)
parts = description.split('\n', 1)
- if len(parts) == 1 or len(parts[0]) > 200:
- p1 = description[:200].rsplit(' ', 1)[0]
- p2 = description[len(p1):]
- p1 += '…'
- p2 = '…' + p2
+ if len(parts) == 1 or len(parts[0]) > 240:
+ # No newline found here.
+ # Try to find last sentence end..
+ parts = re.split(r' \.', description[240::-1], 1)
+ if len(parts) == 2:
+ p1 = parts[1][::-1] + '.'
+ p2 = description[len(p1) + 1:]
+ else:
+ # No sentence end found.
+ # Just find a space.
+ p1 = description[:240].rsplit(' ', 1)[0]
+ p2 = description[len(p1) + 1:]
+ p1 += '…'
+ p2 = '…' + p2
parts = [p1, p2]
m = re.search(r'<[^>]+$', parts[0])
"lang2code": self.get_lang2code(wldoc.meta, errors=errors),
"genres": self.get_genres(wldoc.meta, errors=errors),
"price": self.get_price(shop, wldoc, errors=errors),
+ "series": self.get_series(wldoc.meta, errors=errors),
}
def with_form_name(self, data, name):
for (author_type, author_id) in data['authors']
]
+ series_data = [
+ {
+ 'PublicationId': woblink_id,
+ 'SeriesId': series_id,
+ }
+ for series_id in data['series']
+ ]
+
d = {
'pubTitle': book_data['title'],
'npwAuthorHasPublications': json.dumps(authors_data),
'pubNote': data['abstract']['rest'],
'pubCulture': data['lang2code'],
'npwPublicationHasAwards': '[]',
- 'npwPublicationHasSeriess': '[]', # TODO
- # "[{\"Id\":6153,\"PublicationId\":73876,\"SeriesId\":1615,\"Tome\":null}]"
+ 'npwPublicationHasSeriess': json.dumps(series_data),
}
d = self.with_form_name(d, 'EditPublicationStep1')
d['roles'] = [author_type for (author_type, author_id) in data['authors']]
if legacy is None:
legacy = WOBLINK_CATEGORIES[p].get('legacy')
else:
- gd.setdefault(p, {})
- ds[p]['isMain'] = True
+ gd.setdefault(g, {})
+ gd[g]['isMain'] = True
gd = [
{
"pubId": woblink_id,
def edit_step3(self, woblink_id, book_data):
d = {
'pubBasePrice': book_data['price'],
- 'pubPremiereDate': '2023-08-09', #date.today().isoformat(),
+ 'pubPremiereDate': date.today().isoformat(),
'pubIsLicenseIndefinite': '1',
'pubFileFormat': 'epub+mobi',
'pubIsAcs': '0',