Skip to content

Commit 5f74ada

Browse files
Merge branch 'master' into release
2 parents c863a1c + 95d62bb commit 5f74ada

File tree

326 files changed

+1191
-38
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

326 files changed

+1191
-38
lines changed

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ Python Cloud SDK wraps Aspose.Words Cloud API so you could seamlessly integrate
1616
- [Convert a document to desired file format](https://docs.aspose.cloud/display/wordscloud/Convert+Document+to+Destination+Format+with+Detailed+Settings+and+Save+Result+to+Storage) along with detailed settings.
1717
- Convert an encrypted PDF document into Word document format.
1818

19+
## Enhancements in Version 21.11
20+
21+
22+
1923
## Enhancements in Version 21.10
2024

2125
- Removed 'GraphicsQualityOptions' image save option as it no longer supported.
@@ -185,8 +189,7 @@ The complete source code is available at [GitHub Repository](https://github.com/
185189
```python
186190
# Start README example
187191

188-
self.words_api = asposewordscloud.WordsApi(client_id, client_secret)
189-
self.words_api.api_client.configuration.host = base_url
192+
self.words_api = asposewordscloud.WordsApi(client_id, client_secret, base_url)
190193

191194
upload_request = asposewordscloud.models.requests.UploadFileRequest(
192195
open(os.path.join(local_folder, filename), 'rb'), os.path.join(remote_folder, remote_name))

asposewordscloud/api_client.py

Lines changed: 45 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
import datetime
3030
import email.parser
31+
import io
3132
import json
3233
import mimetypes
3334
from multiprocessing.pool import ThreadPool
@@ -41,6 +42,7 @@
4142
from six.moves.urllib.parse import quote
4243
import six
4344
from urllib3 import encode_multipart_formdata
45+
from base64 import b64encode
4446

4547
from asposewordscloud.configuration import Configuration
4648
import asposewordscloud.models
@@ -81,12 +83,12 @@ def __init__(self, configuration=None, header_name=None, header_value=None,
8183

8284
self.pool = None
8385
self.rest_client = rest.RESTClientObject(configuration)
84-
self.default_headers = {'x-aspose-client': 'python sdk', 'x-aspose-version': '21.10'}
86+
self.default_headers = {'x-aspose-client': 'python sdk', 'x-aspose-version': '21.11'}
8587
if header_name is not None:
8688
self.default_headers[header_name] = header_value
8789
self.cookie = cookie
8890
# Set default User-Agent.
89-
self.user_agent = 'python sdk 21.10'
91+
self.user_agent = 'python sdk 21.11'
9092

9193
def __del__(self):
9294
if not self.pool is None:
@@ -252,15 +254,21 @@ def sanitize_for_serialization(self, obj):
252254
return {key: self.sanitize_for_serialization(val)
253255
for key, val in six.iteritems(obj_dict)}
254256

255-
def deserialize_multipart(self, multipart, requests):
256-
if len(multipart.parts) != len(requests):
257-
raise rest.ApiException(status=0, reason="Response parts and requests count mismatch.")
257+
def deserialize_multipart(self, without_intermediate_results, multipart, requests):
258+
if without_intermediate_results:
259+
if len(multipart.parts) != 1:
260+
raise rest.ApiException(status=0, reason="Response must have one part.")
261+
else:
262+
if len(multipart.parts) != len(requests):
263+
raise rest.ApiException(status=0, reason="Response parts and requests count mismatch.")
264+
265+
id_to_requests = {}
266+
for r in requests:
267+
id_to_requests[r.id] = r
258268

259269
results = []
260-
for part_id in range(len(multipart.parts)):
270+
for part in multipart.parts:
261271
try:
262-
response_type = requests[part_id].get_response_type()
263-
part = multipart.parts[part_id]
264272
data = part.content
265273
packet_parts = data.split(b"\r\n\r\n", 1)
266274
header_parts = packet_parts[0].split(b"\r\n")
@@ -274,6 +282,8 @@ def deserialize_multipart(self, multipart, requests):
274282
if len(header_line_parts) == 2:
275283
headers[header_line_parts[0].strip()] = header_line_parts[1].strip()
276284

285+
response_type = id_to_requests[headers["RequestId"]].get_response_type()
286+
277287
result = None
278288
if code == 200:
279289
if response_type is not 'None':
@@ -524,12 +534,13 @@ def prepare_post_parameters(self, post_params=None):
524534
continue
525535
file_names = v if type(v) is list else [v]
526536
for n in file_names:
527-
filename = os.path.basename(n.name)
528-
filedata = n.read()
529-
mimetype = (mimetypes.guess_type(filename)[0] or
530-
'application/octet-stream')
531-
params.append(
532-
tuple([k, tuple([filename, filedata, mimetype])]))
537+
if isinstance(n, io.StringIO):
538+
params.append(tuple([k, tuple(['document', n.getvalue(), 'application/octet-stream'])]))
539+
else:
540+
filename = os.path.basename(n.name)
541+
filedata = n.read()
542+
mimetype = (mimetypes.guess_type(filename)[0] or 'application/octet-stream')
543+
params.append(tuple([k, tuple([filename, filedata, mimetype])]))
533544

534545
return params
535546

@@ -708,11 +719,13 @@ def __deserialize_model(self, data, klass):
708719
instance = self.__deserialize(data, klass_name)
709720
return instance
710721

711-
def request_to_batch_part(self, request):
722+
def request_to_batch_part(self, request, rsa_key):
712723
http_request = request.create_http_request(self)
713724
if http_request['form_params'] and http_request['body']:
714725
raise ValueError("body parameter cannot be used with post_params parameter.")
715726

727+
self.handle_password(http_request, rsa_key)
728+
716729
url = http_request['path'][len('/v4.0/words/'):]
717730
if http_request['query_params']:
718731
url += '?' + urlencode(http_request['query_params'])
@@ -746,4 +759,20 @@ def request_to_batch_part(self, request):
746759
if body:
747760
result.extend(body)
748761

749-
return [None, result, 'multipart']
762+
return [None, result, 'multipart']
763+
764+
def handle_password(self, http_params, rsa_key):
765+
766+
if rsa_key is None:
767+
return
768+
769+
index = -1
770+
for i in range(len(http_params['query_params'])):
771+
k, v = http_params['query_params'][i]
772+
if k == 'password':
773+
index = i
774+
break
775+
776+
if index > -1:
777+
k,v = http_params['query_params'].pop(index)
778+
http_params['query_params'].append(('encryptedPassword', b64encode(rsa_key.encrypt(v.encode('utf-8')))))

0 commit comments

Comments
 (0)