X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/b15e203d42d3fd0880ca21d6251dca6fa46405c9..5649823d030f580e26857963075af04f932c18ba:/src/depot/publishers/woblink.py diff --git a/src/depot/publishers/woblink.py b/src/depot/publishers/woblink.py index d7d55ea7..e98ec585 100644 --- a/src/depot/publishers/woblink.py +++ b/src/depot/publishers/woblink.py @@ -220,6 +220,12 @@ class Woblink(BasePublisher): if errors is not None: errors.append(NoMainThemaWarning()) thema_codes.extend(meta.thema) + + thema_codes.extend( + Audience.objects.filter(code__in=meta.audiences).exclude( + thema=None).values_list('thema', flat=True) + ) + if not thema_codes: if errors is not None: errors.append(NoThema()) @@ -375,17 +381,21 @@ class Woblink(BasePublisher): self.edit_step1(book.woblink_id, book_data) self.edit_step2(book.woblink_id, book_data) self.edit_step3(book.woblink_id, book_data) - self.send_cover(book.woblink_id, wldoc) + cover_id = self.send_cover(book.woblink_id, wldoc) + texts = shop.get_texts() - self.send_epub( + epub_id, epub_demo = self.send_epub( book.woblink_id, wldoc, book.gallery_path(), fundraising=texts ) - self.send_mobi( + mobi_id, mobi_demo = self.send_mobi( book.woblink_id, wldoc, book.gallery_path(), fundraising=texts ) - self.edit_step4(book.woblink_id, book_data) + self.edit_step4( + book.woblink_id, book_data, + cover_id, epub_id, epub_demo, mobi_id, mobi_demo, + ) self.edit_step5(book.woblink_id, book_data) def get_book_data(self, shop, wldoc, errors=None): @@ -484,17 +494,27 @@ class Woblink(BasePublisher): 'pubFileFormat': 'epub+mobi', 'pubIsAcs': '0', 'pubPublisherIndex': '', + 'save_and_continue': '', } d = self.with_form_name(d, 'EditPublicationStep3') return self.session.post(self.STEP3_URL % woblink_id, data=d) - def edit_step4(self, woblink_id, book_data): - d = {} + def edit_step4(self, woblink_id, book_data, cover_id, epub_id, epub_demo, mobi_id, mobi_demo): + d = { + 'pubCoverResId': cover_id, + 'pubEpubResId': epub_id, + 'pubEpubDemoResId': epub_demo, + 'pubMobiResId': mobi_id, + 'pubMobiDemoResId': mobi_demo, + 'pubFileFormat': 'epub+mobi', + 'pubId': woblink_id, + 'save_and_continue': '', + } d = self.with_form_name(d, 'EditPublicationStep4') return self.session.post(self.STEP4_URL % woblink_id, data=d) def edit_step5(self, woblink_id, book_data): - d = {} + d = {'save': ''} d = self.with_form_name(d, 'EditPublicationStep5') return self.session.post(self.STEP5_URL % woblink_id, data=d) @@ -507,16 +527,21 @@ class Woblink(BasePublisher): data = response.json()[job_id] if data['ready']: assert data['successful'] - return + return data.get('returnValue') sleep(2) - def upload_file(self, woblink_id, filename, content, form_name, field_name, mime_type): + def upload_file(self, woblink_id, filename, content, field_name, mime_type): + form_name = f'Upload{field_name}' + id_field = f'pub{field_name}ResId' + field_name = field_name.lower() + data = { 'pubId': woblink_id, } files = { field_name: (filename, content, mime_type) } + response = self.session.post( self.UPLOAD_URL % field_name, data=self.with_form_name(data, form_name), @@ -524,8 +549,10 @@ class Woblink(BasePublisher): ) resp_data = response.json() assert resp_data['success'] is True + file_id = resp_data[id_field] if 'jobId' in resp_data: self.wait_for_job(resp_data['jobId']) + return file_id def generate_demo(self, woblink_id, file_format, check=True): percent = 10 @@ -534,7 +561,7 @@ class Woblink(BasePublisher): self.GENERATE_DEMO_URL % (file_format, woblink_id, percent), ).json()['jobId'] try: - self.wait_for_job(job_id) + file_id = self.wait_for_job(job_id) except AssertionError: if percent < 50: percent += 10 @@ -549,6 +576,7 @@ class Woblink(BasePublisher): self.CHECK_DEMO_URL % (file_format, woblink_id) ).json()['jobId'] ) + return file_id def send_epub(self, woblink_id, doc, gallery_path, fundraising=None): from librarian.builders import EpubBuilder @@ -556,15 +584,15 @@ class Woblink(BasePublisher): base_url='file://' + gallery_path + '/', fundraising=fundraising or [], ).build(doc).get_file() - self.upload_file( + file_id = self.upload_file( woblink_id, doc.meta.url.slug + '.epub', content, - 'UploadEpub', - 'epub', + 'Epub', 'application/epub+zip' ) - self.generate_demo(woblink_id, 'epub') + demo_id = self.generate_demo(woblink_id, 'epub') + return file_id, demo_id def send_mobi(self, woblink_id, doc, gallery_path, fundraising=None): from librarian.builders import MobiBuilder @@ -572,15 +600,15 @@ class Woblink(BasePublisher): base_url='file://' + gallery_path + '/', fundraising=fundraising or [], ).build(doc).get_file() - self.upload_file( + file_id = self.upload_file( woblink_id, doc.meta.url.slug + '.mobi', content, - 'UploadMobi', - 'mobi', + 'Mobi', 'application/x-mobipocket-ebook' ) - self.generate_demo(woblink_id, 'mobi', check=False) + demo_id = self.generate_demo(woblink_id, 'mobi', check=False) + return file_id, demo_id def send_cover(self, woblink_id, doc): from librarian.cover import make_cover @@ -590,11 +618,11 @@ class Woblink(BasePublisher): content = io.BytesIO() cover.final_image().save(content, cover.format) content.seek(0) - self.upload_file( + file_id = self.upload_file( woblink_id, doc.meta.url.slug + '.jpeg', content, - 'UploadCover', - 'cover', + 'Cover', cover.mime_type() ) + return file_id