pytolino 1.0__tar.gz → 1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pytolino
3
- Version: 1.0
3
+ Version: 1.2
4
4
  Summary: client for tolino cloud
5
5
  Author: Imam Usmani
6
6
  Project-URL: Source Code, https://github.com/ImamAzim/pytolino
@@ -62,6 +62,8 @@ You can then upload, add to a collection or delete ebook on your cloud:
62
62
  ebook_id = client.upload(EPUB_FILE_PATH) # return a unique id that can be used for reference
63
63
  client.add_collection(epub_id, 'science fiction') # add the previous book to the collection science-fiction
64
64
  client.delete_ebook(epub_id) # delete the previousely uploaded ebook
65
+ inventory = client.get_inventory() # get a list of all the books on the cloud and their metadata
66
+ client.upload_metadata(epub_id, title='my title', author='someone') # you can upload various kind of metadata
65
67
  client.logout()
66
68
 
67
69
 
@@ -85,6 +87,8 @@ Features
85
87
  * upload ebook
86
88
  * delete ebook from the cloud
87
89
  * add a book to a collection
90
+ * download inventory
91
+ * upload metadata
88
92
  * more to come...
89
93
 
90
94
 
@@ -36,6 +36,8 @@ You can then upload, add to a collection or delete ebook on your cloud:
36
36
  ebook_id = client.upload(EPUB_FILE_PATH) # return a unique id that can be used for reference
37
37
  client.add_collection(epub_id, 'science fiction') # add the previous book to the collection science-fiction
38
38
  client.delete_ebook(epub_id) # delete the previousely uploaded ebook
39
+ inventory = client.get_inventory() # get a list of all the books on the cloud and their metadata
40
+ client.upload_metadata(epub_id, title='my title', author='someone') # you can upload various kind of metadata
39
41
  client.logout()
40
42
 
41
43
 
@@ -59,6 +61,8 @@ Features
59
61
  * upload ebook
60
62
  * delete ebook from the cloud
61
63
  * add a book to a collection
64
+ * download inventory
65
+ * upload metadata
62
66
  * more to come...
63
67
 
64
68
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pytolino"
7
- version = "1.0"
7
+ version = "1.2"
8
8
  authors = [
9
9
  {name="Imam Usmani"},
10
10
  ]
@@ -288,6 +288,46 @@ class Client(object):
288
288
  raise PytolinoException(
289
289
  f'unregister {device_id} failed: reason unknown.')
290
290
 
291
+ def get_inventory(self):
292
+ """download a list of the books on the cloud and their information
293
+ :returns: list of dict describing the book, with a epubMetaData dict
294
+
295
+ """
296
+
297
+ host_response = self.session.get(
298
+ self.server_settings['inventory_url'],
299
+ params={'strip': 'true'},
300
+ headers={
301
+ 't_auth_token': self.access_token,
302
+ 'hardware_id': self.hardware_id,
303
+ 'reseller_id': self.server_settings['partner_id'],
304
+ }
305
+ )
306
+
307
+ self._log_requests(host_response)
308
+ if host_response.status_code != 200:
309
+ raise PytolinoException('invetory request failed')
310
+
311
+ try:
312
+ j = host_response.json()
313
+ except requests.JSONDecodeError:
314
+ raise PytolinoException(
315
+ 'inventory list request failed because of json error.'
316
+ )
317
+ else:
318
+ try:
319
+ publication_inventory = j['PublicationInventory']
320
+ uploaded_ebooks = publication_inventory['edata']
321
+ purchased_ebook = publication_inventory['ebook']
322
+ except KeyError:
323
+ raise PytolinoException(
324
+ 'inventory list request failed because',
325
+ 'of key error in json.',
326
+ )
327
+ else:
328
+ inventory = uploaded_ebooks + purchased_ebook
329
+ return inventory
330
+
291
331
  def add_to_collection(self, book_id, collection_name):
292
332
  """add a book to a collection on the cloud
293
333
 
@@ -324,6 +364,51 @@ class Client(object):
324
364
  if host_response.status_code != 200:
325
365
  raise PytolinoException('add to collection failed')
326
366
 
367
+ def upload_metadata(self, book_id, **new_metadata):
368
+ """upload some metadata to a specific book on the cloud
369
+
370
+ :book_id: ref on the cloud of the book
371
+ :**meta_data: dict of metadata than can be changed
372
+
373
+ """
374
+
375
+ url = self.server_settings['meta_url'] + f'/?deliverableId={book_id}'
376
+ host_response = self.session.get(
377
+ url,
378
+ headers={
379
+ 't_auth_token': self.access_token,
380
+ 'hardware_id': self.hardware_id,
381
+ 'reseller_id': self.server_settings['partner_id'],
382
+ }
383
+ )
384
+
385
+ book = host_response.json()
386
+ self._log_requests(host_response)
387
+ if host_response.status_code != 200:
388
+ raise PytolinoException('metadata upload failed')
389
+
390
+ for key, value in new_metadata.items():
391
+ book['metadata'][key] = value
392
+
393
+ payload = {
394
+ 'uploadMetaData': book['metadata']
395
+ }
396
+
397
+ host_response = self.session.put(
398
+ url,
399
+ data=json.dumps(payload),
400
+ headers={
401
+ 'content-type': 'application/json',
402
+ 't_auth_token': self.access_token,
403
+ 'hardware_id': self.hardware_id,
404
+ 'reseller_id': self.server_settings['partner_id'],
405
+ }
406
+ )
407
+
408
+ self._log_requests(host_response)
409
+ if host_response.status_code != 200:
410
+ raise PytolinoException('metadata upload failed')
411
+
327
412
  def upload(self, file_path, name=None, extension=None):
328
413
  """upload an ebook to your cloud
329
414
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pytolino
3
- Version: 1.0
3
+ Version: 1.2
4
4
  Summary: client for tolino cloud
5
5
  Author: Imam Usmani
6
6
  Project-URL: Source Code, https://github.com/ImamAzim/pytolino
@@ -62,6 +62,8 @@ You can then upload, add to a collection or delete ebook on your cloud:
62
62
  ebook_id = client.upload(EPUB_FILE_PATH) # return a unique id that can be used for reference
63
63
  client.add_collection(epub_id, 'science fiction') # add the previous book to the collection science-fiction
64
64
  client.delete_ebook(epub_id) # delete the previousely uploaded ebook
65
+ inventory = client.get_inventory() # get a list of all the books on the cloud and their metadata
66
+ client.upload_metadata(epub_id, title='my title', author='someone') # you can upload various kind of metadata
65
67
  client.logout()
66
68
 
67
69
 
@@ -85,6 +87,8 @@ Features
85
87
  * upload ebook
86
88
  * delete ebook from the cloud
87
89
  * add a book to a collection
90
+ * download inventory
91
+ * upload metadata
88
92
  * more to come...
89
93
 
90
94
 
@@ -160,5 +160,50 @@ def delete_test():
160
160
  client.logout()
161
161
 
162
162
 
163
+ def inventory_test():
164
+
165
+ username, password = get_credentials()
166
+ client = Client()
167
+ client.login(username, password)
168
+ inventory = client.get_inventory()
169
+ client.logout()
170
+ print(inventory[0].keys())
171
+ for item in inventory:
172
+ metadata = item['epubMetaData']
173
+ print(metadata.keys())
174
+
175
+
176
+ def delete_test():
177
+
178
+ with open(EPUB_ID_PATH, 'r') as myfile:
179
+ epub_id = myfile.read()
180
+
181
+ username, password = get_credentials()
182
+ client = Client()
183
+ client.login(username, password)
184
+ client.delete_ebook(epub_id)
185
+ client.logout()
186
+
187
+
188
+ def metadata_test():
189
+ new_metadata = dict(publisher='someone')
190
+ with open(EPUB_ID_PATH, 'r') as myfile:
191
+ epub_id = myfile.read()
192
+
193
+ username, password = get_credentials()
194
+ client = Client()
195
+ client.login(username, password)
196
+ client.upload_metadata(epub_id, **new_metadata)
197
+ inventory = client.get_inventory()
198
+ for item in inventory:
199
+ item_metadata = item['epubMetaData']
200
+ if item_metadata['identifier'] == epub_id:
201
+ for key, value in new_metadata.items():
202
+ print(item_metadata[key])
203
+ client.logout()
204
+
205
+
163
206
  if __name__ == '__main__':
164
- collection_test()
207
+ # upload_test()
208
+ metadata_test()
209
+ # inventory_test()
File without changes
File without changes
File without changes
File without changes