fix stats api
[redakcja.git] / src / depot / publishers / woblink.py
index d7d55ea..e98ec58 100644 (file)
@@ -220,6 +220,12 @@ class Woblink(BasePublisher):
             if errors is not None:
                 errors.append(NoMainThemaWarning())
         thema_codes.extend(meta.thema)
             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())
         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.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()
         texts = shop.get_texts()
-        self.send_epub(
+        epub_id, epub_demo = self.send_epub(
             book.woblink_id, wldoc, book.gallery_path(),
             fundraising=texts
         )
             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
         )
             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):
         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': '',
             '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)
 
         }
         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 = 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)
 
         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']
             data = response.json()[job_id]
             if data['ready']:
                 assert data['successful']
-                return
+                return data.get('returnValue')
             sleep(2)
 
             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)
         }
         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),
         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
         )
         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'])
         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
 
     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.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
             except AssertionError:
                 if percent < 50:
                     percent += 10
@@ -549,6 +576,7 @@ class Woblink(BasePublisher):
                     self.CHECK_DEMO_URL % (file_format, woblink_id)
                 ).json()['jobId']
             )
                     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
 
     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()
             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,
             woblink_id,
             doc.meta.url.slug + '.epub',
             content,
-            'UploadEpub',
-            'epub',
+            'Epub',
             'application/epub+zip'
         )
             '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
 
     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()
             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,
             woblink_id,
             doc.meta.url.slug + '.mobi',
             content,
-            'UploadMobi',
-            'mobi',
+            'Mobi',
             'application/x-mobipocket-ebook'
         )
             '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
 
     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)
         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,
             woblink_id,
             doc.meta.url.slug + '.jpeg',
             content,
-            'UploadCover',
-            'cover',
+            'Cover',
             cover.mime_type()
         )
             cover.mime_type()
         )
+        return file_id