memoQFile.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from suds.client import Client
  2. from base64 import b64decode, b64encode
  3. import os
  4. import json
  5. class MemoQFile(object):
  6. """Client for memoQ File management API."""
  7. def __init__(self):
  8. with open("config.json") as json_file:
  9. self.config = json.load(json_file)
  10. if self.config["api_base_url"] != "":
  11. api_url = self.config["api_base_url"] + \
  12. "/memoqservices/filemanager?wdsl"
  13. self.client = Client(api_url)
  14. def download_file(self, path, guid):
  15. """Downloads file of given guid from memoQ Server to specified path. Returns full path of downloaded file."""
  16. chunk_size = 1000000
  17. start, filename, filesize = self.client.service.BeginChunkedFileDownload(
  18. guid, False)
  19. file_bytes_left = filesize[1]
  20. output_filename = os.path.join(path, filename[1])
  21. output = open(output_filename, 'wb')
  22. while file_bytes_left > 0:
  23. chunk = self.client.service.GetNextFileChunk(start[1], chunk_size)
  24. output.write(b64decode(chunk))
  25. file_bytes_left -= len(chunk)
  26. output.close()
  27. self.client.service.EndChunkedFileDownload(start[1])
  28. return output_filename
  29. def upload_file(self, file_path, chunk_size=1024):
  30. """Uploads given file to memoQ Server. Returns guid of uploaded file."""
  31. file_to_send = open(file_path, 'rb')
  32. file_guid = self.client.service.BeginChunkedFileUpload(
  33. file_path, False)
  34. while True:
  35. data = b64encode(file_to_send.read(chunk_size))
  36. if not data:
  37. break
  38. else:
  39. self.client.service.AddNextFileChunk(file_guid, data)
  40. self.client.service.EndChunkedFileUpload(file_guid)
  41. file_to_send.close()
  42. return file_guid