Skip to content
This repository was archived by the owner on Aug 11, 2020. It is now read-only.

Commit f8370f2

Browse files
committed
minor tweaks
previous commit: support of project handle for auth purposes
1 parent 3932706 commit f8370f2

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

paperspace/workspace.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import logging
21
import os
32
import zipfile
43
from collections import OrderedDict
@@ -7,18 +6,23 @@
76
import progressbar
87
import requests
98
from requests_toolbelt.multipart import encoder
9+
from paperspace import logger as default_logger
1010

1111
from paperspace.exceptions import S3UploadFailedException, PresignedUrlUnreachableException, \
1212
PresignedUrlAccessDeniedException, PresignedUrlConnectionException
1313

1414

1515
class S3WorkspaceHandler:
1616
def __init__(self, experiments_api, logger=None):
17+
"""
18+
19+
:param experiments_api: paperspace.client.API
20+
:param logger: paperspace.logger
21+
"""
1722
self.experiments_api = experiments_api
18-
self.logger = logger or logging.getLogger()
23+
self.logger = logger or default_logger
1924

2025
def _retrieve_file_paths(self, dirName):
21-
2226
# setup file paths variable
2327
file_paths = {}
2428
exclude = ['.git', '.idea', '.pytest_cache']
@@ -97,24 +101,32 @@ def upload_workspace(self, input_data):
97101

98102
file_name = os.path.basename(archive_path)
99103
project_handle = input_data['projectHandle']
104+
100105
s3_upload_data = self._get_upload_data(file_name, project_handle)
106+
101107
bucket_name = s3_upload_data['bucket_name']
108+
s3_object_path = s3_upload_data['fields']['key']
102109

103110
self.logger.log('Uploading zipped workspace to S3')
104111

112+
self._upload(archive_path, s3_upload_data)
113+
114+
self.logger.log('\nUploading completed')
115+
116+
return 's3://{}/{}'.format(bucket_name, s3_object_path)
117+
118+
def _upload(self, archive_path, s3_upload_data):
105119
files = {'file': (archive_path, open(archive_path, 'rb'))}
106120
fields = OrderedDict(s3_upload_data['fields'])
107121
fields.update(files)
122+
108123
s3_encoder = encoder.MultipartEncoder(fields=fields)
109124
monitor = encoder.MultipartEncoderMonitor(s3_encoder, callback=self._create_callback(s3_encoder))
110125
s3_response = requests.post(s3_upload_data['url'], data=monitor, headers={'Content-Type': monitor.content_type})
126+
self.logger.debug("S3 upload response: {}".format(s3_response.headers))
111127
if not s3_response.ok:
112128
raise S3UploadFailedException(s3_response)
113129

114-
self.logger.log('\nUploading completed')
115-
116-
return 's3://{}/{}'.format(bucket_name, file_name)
117-
118130
def _get_upload_data(self, file_name, project_handle):
119131
response = self.experiments_api.get("/workspace/get_presigned_url",
120132
params={'workspaceName': file_name, 'projectHandle': project_handle})

0 commit comments

Comments
 (0)