def DeleteFile(self, SyncpointID, FileID): login_headers = {'Accept': 'application/json'} url = "sync/file.svc/%s/file/%s" % (SyncpointID, FileID) Method = "DELETE" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers).MakeRequest() return request
def __upload_file_chunk(self, url, base_url, common_headers, chunk, is_last_chunk, content_range_index, Syncpoint_ID, creation_date, last_write_time): Method = "POST" common_headers['Content-Range'] = '%s-*/*' % content_range_index multipart_body = self.__create_chunk_upload_body(chunk, is_last_chunk, Syncpoint_ID, creation_date, last_write_time) common_headers['Content-Type'] = multipart_body.content_type return CallAPI(url, self.AppKey, self.AccessToken, Method, common_headers, data=multipart_body, base_url='%s/' % base_url).MakeRequest()
def CreateUser(self, User, First_Name='', Last_Name='', Password='', Type=7): login_headers = {'Accept': 'application/json', 'Content-Type': 'application/json'} data = {'EmailAddress': '%s' % User, 'FirstName': '%s' % First_Name, 'LastName': '%s' % Last_Name, 'Password': '******' % Password, 'AccountType': Type} data = [data] json_data = json.dumps(data) url = "provisioning/users.svc/?modifier=no_email" Method = "POST" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers, data=json_data).MakeRequest() return json.loads(request.content.decode("utf8"))
def DeleteFolder(self, Syncpoint_ID, Folder_ID): login_headers = { 'As-User': '******' % self.AsUser, 'Accept': 'application/json' } url = "sync/folder.svc/%s/folder/%s" % (Syncpoint_ID, Folder_ID) Method = "DELETE" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers).MakeRequest() return request
def GetFoldersFromSyncpoint(self, SyncpointID): login_headers = { 'As-User': '******' % self.AsUser, 'Accept': 'application/json' } url = "sync/folders.svc/%s/folders" % SyncpointID Method = "GET" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers).MakeRequest() return json.loads(request.content.decode("utf8"))
def DeleteSyncpoint(self, Syncpoint_ID): login_headers = { 'As-User': '******' % self.AsUser, 'Accept': 'application/json', 'Content-Type': '' } url = "syncpoint/syncpoint.svc/%s" % Syncpoint_ID Method = "DELETE" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers).MakeRequest() return request
def GetStorageEndpoints(self): login_headers = { 'As-User': '******' % self.AsUser, 'Accept': 'application/json' } url = "storage/storageendpoints.svc/" Method = "GET" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers).MakeRequest() if request.status_code == 200: return json.loads(request.content.decode("utf8")) else: print('Failed to get storage endpoints')
def GetAllSyncpoints(self): login_headers = { 'As-User': '******' % self.AsUser, 'Accept': 'application/json' } url = "syncpoint/syncpoints.svc/?includeType=1,2,3,4,5,6,7,8" Method = "GET" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers).MakeRequest() if request.status_code == 200: return json.loads(request.content.decode("utf8")) else: print('Failed to get syncpoints')
def __initiate_chunked_upload_session(self, url, base_url): Method = "POST" initiate_chunked_upload_body = MultipartEncoder({'sessionKey': (None, 'Bearer ' + self.AccessToken, None)}) initiate_chunked_upload_headers = { 'As-User': '******' % self.AsUser, "User-Agent": "API_Application", 'Content-Range': "*/*", 'Content-Type': initiate_chunked_upload_body.content_type } return CallAPI( url, self.AppKey, self.AccessToken, Method, initiate_chunked_upload_headers, data=initiate_chunked_upload_body, base_url='%s/' % base_url ).MakeRequest()
def GetFolderFromSyncpoint(self, Syncpoint, FolderID): login_headers = { 'As-User': '******' % self.AsUser, 'Accept': 'application/json' } url = "sync/folder.svc/%s/folder/%s?include=active" % (Syncpoint, FolderID) Method = "GET" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers, data='').MakeRequest() return json.loads(request.content.decode("utf8"))
def __upload_file_simple_mode(self, url, base_url, common_headers, Syncpoint_ID, creation_date, last_write_time): Method = "POST" common_headers["Content-Range"] = "0-*/*" multipart_body = [('fileData', ('%s' % self.filename, open('%s' % self.full_path, 'rb'), 'application/octet-stream')), ('sha256', (None, hashlib.sha256(self.full_path.encode('utf-8')).hexdigest(), None)), ('sessionKey', (None, 'Bearer ' + self.AccessToken, None)), ('virtualFolderId', (None, '%s' % Syncpoint_ID, None)), ('creationTimeUtc', (None, creation_date, None)), ('lastWriteTimeUtc', (None, last_write_time, None)), ('fileDone', (None, '', None))] return CallAPI( url, self.AppKey, self.AccessToken, Method, common_headers, data='', file=multipart_body, base_url='%s/' % base_url ).MakeRequest()
def GetDefaultStorage(self): user_id = self.AsUser if self.AsUser else self.AuthenticatedUserId # Note about on-behalf-of sample and As-User header: # Since the backend method we are calling requires admin permissions, # we must not use the As-User header here (otherwise the method might not be authorized). # Instead, specify the target user id in the URL parameter. login_headers = {'Accept': 'application/json'} url = "storage/storageendpoint.svc/?user=%s" % user_id Method = "GET" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers).MakeRequest() if request.status_code == 200: return json.loads(request.content.decode("utf8")) else: print('Failed to get default storage')
def CreateFolder(self, SyncpointID, FolderID, NewFolder): login_headers = { 'As-User': '******' % self.AsUser, 'Accept': 'application/json', 'Content-Type': 'application/json' } data = [{"Name": "%s" % NewFolder, "Status": 1}] json_data = json.dumps(data) url = "sync/folder_folders.svc/%s/folder/%s/folders" % (SyncpointID, FolderID) Method = "GET" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers, data=json_data).MakeRequest() print( json.dumps(json.loads(request.content.decode("utf8")), sort_keys=True, indent=4))
def CreateFolderSP(self, Syncpoint, NewFolder): login_headers = { 'As-User': '******' % self.AsUser, 'Accept': 'application/json', 'Content-Type': 'application/json' } data = [{ "SyncpointId": "%s" % Syncpoint, "Name": "%s" % NewFolder, "Status": 1, "VirtualPath": "\\%s" % NewFolder }] Method = "POST" json_data = json.dumps(data) url = "sync/folders.svc/%s/folders" % Syncpoint request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers, data=json_data).MakeRequest() return json.loads(request.content.decode("utf8"))
def CreateSyncpoint(self, Syncpoint_Name): login_headers = { 'As-User': '******' % self.AsUser, 'Accept': 'application/json', 'Content-Type': 'application/json' } data = [{ "Type": 6, "Name": "%s" % Syncpoint_Name, "Mapped": 0, "DownloadEnabled": 0, "UploadEnabled": 0, "StorageEndpointID": "%s" % self.GetDefaultStorage()['Id'] }] json_data = json.dumps(data) url = "syncpoint/syncpoints.svc/" Method = "POST" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers, data=json_data).MakeRequest() return json.loads(request.content.decode("utf8"))
def GetAllUsers(self, CompanyID): login_headers = {'Accept': 'application/json', 'Content-Type': 'application/json'} url = "provisioning/company_users.svc/company/%s/users" % CompanyID Method = "GET" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers, data='').MakeRequest() return json.loads(request.content.decode("utf8"))
def GetUser(self, User): login_headers = {'Accept': 'application/json'} url = "provisioning/user.svc/%s?include=all_users" % User Method = "GET" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers).MakeRequest() return json.loads(request.content.decode("utf8"))
def Upload(self, Syncpoint_ID, Path): Method = "POST" creation_date = self.creation_date() last_write_time = datetime.datetime.fromtimestamp(os.path.getmtime(self.full_path)).isoformat() url = "saveFile.php?filepath=" + Path login_headers = {'As-User': '******' % self.AsUser, "User-Agent": "API_Application"} file_size = os.path.getsize(self.full_path) if file_size < self.max_chunk_size: login_headers["Content-Range"] = "0-*/*" multipart_body = [('fileData', ('%s' % self.filename, open('%s' % self.full_path, 'rb'), 'application/octet-stream')), ('sha256', (None, hashlib.sha256(self.full_path.encode('utf-8')).hexdigest(), None)), ('sessionKey', (None, 'Bearer ' + self.AccessToken, None)), ('virtualFolderId', (None, '%s' % Syncpoint_ID, None)), ('creationTimeUtc', (None, creation_date, None)), ('lastWriteTimeUtc', (None, last_write_time, None)), ('fileDone', (None, '', None))] request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers, data='', file=multipart_body, base_url="https://data.syncplicity.com/").MakeRequest() return request else: first_call_headers = {'As-User': '******' % self.AsUser, "User-Agent": "API_Application", 'Content-Range': "*/*"} first_call_body = MultipartEncoder({'sessionKey': (None, 'Bearer ' + self.AccessToken, None)}) first_call_headers['Content-Type'] = first_call_body.content_type first_call_response = CallAPI(url, self.AppKey, self.AccessToken, Method, first_call_headers, data=first_call_body, base_url="https://data.syncplicity.com/").MakeRequest() if first_call_response.status_code == 308: login_headers['If-Match'] = first_call_response.headers['ETag'] else: sys.exit('Failed to create session for chunked upload') chunk_count = math.ceil(file_size / self.max_chunk_size) f = open(self.full_path, 'rb') content_range_index = 0 sent_chunk_count = 1 for chunk in self.read_in_chunks(f): login_headers['Content-Range'] = '%s-*/*' % content_range_index content_range_index += self.max_chunk_size if sent_chunk_count == chunk_count: multipart_body = MultipartEncoder({'fileData': (self.filename, chunk, 'application/octet-stream'), 'sha256': (None, hashlib.sha256(chunk).hexdigest(), None), 'sessionKey': (None, 'Bearer ' + self.AccessToken, None), 'virtualFolderId': (None, '%s' % Syncpoint_ID, None), 'creationTimeUtc': (None, creation_date, None), 'lastWriteTimeUtc': (None, last_write_time, None), 'fileDone': (None, '', None)}) else: multipart_body = MultipartEncoder({'fileData': (self.filename, chunk, 'application/octet-stream'), 'sha256': (None, hashlib.sha256(chunk).hexdigest(), None), 'sessionKey': (None, 'Bearer ' + self.AccessToken, None), 'virtualFolderId': (None, '%s' % Syncpoint_ID, None), 'creationTimeUtc': (None, creation_date, None), 'lastWriteTimeUtc': (None, last_write_time, None)}) login_headers['Content-Type'] = multipart_body.content_type sent_chunk_count += 1 request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers, data=multipart_body, base_url="https://data.syncplicity.com/").MakeRequest() if request.status_code == 308: login_headers['If-Match'] = request.headers['ETag'] else: f.close() return request
def DeleteUser(self, User): login_headers = {'Accept': 'application/json'} url = "provisioning/user.svc/%s" % User Method = "DELETE" request = CallAPI(url, self.AppKey, self.AccessToken, Method, login_headers).MakeRequest() return request