示例#1
0
 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()
示例#3
0
 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"))
示例#16
0
 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"))
示例#17
0
 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"))
示例#18
0
    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
示例#19
0
 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