Beispiel #1
0
 def test7_upload_file_session(self):
     file_name = "big_buck_bunny.mp4"
     path = "{0}/data/{1}".format(os.path.dirname(__file__), file_name)
     # 1. create a file
     target_item = self.client.me.drive.root.upload(file_name, None)
     self.client.execute_query()
     self.assertIsNotNone(target_item.properties['id'])
     # 2. create upload session
     item = DriveItemUploadableProperties()
     item.name = file_name
     session_result = target_item.create_upload_session(item)
     self.client.execute_query()
     self.assertIsNotNone(session_result.value)
     # 3. start upload
     f = open(path, 'rb')
     st = os.stat(path)
     f_pos = 0
     for piece in read_in_chunks(f, chunk_size=1000000):
         req = RequestOptions(session_result.value.uploadUrl)
         req.method = HttpMethod.Put
         req.set_header('Content-Length', str(len(piece)))
         req.set_header('Content-Range', 'bytes {0}-{1}/{2}'.format(f_pos, (f_pos + len(piece) - 1), st.st_size))
         req.set_header('Accept', '*/*')
         req.data = piece
         resp = self.client.execute_request_direct(req)
         self.assertTrue(resp.ok)
         f_pos += len(piece)
Beispiel #2
0
 def build_request(self, query):
     request = RequestOptions(query.url)
     # set json format headers
     request.set_headers(self.context.json_format.build_http_headers())
     if isinstance(self.context.json_format, JsonLightFormat):
         # set custom method headers
         if query.action_type == ActionType.DeleteEntity:
             request.set_header("X-HTTP-Method", "DELETE")
             request.set_header("IF-MATCH", '*')
         elif query.action_type == ActionType.UpdateEntity:
             request.set_header("X-HTTP-Method", "MERGE")
             request.set_header("IF-MATCH", '*')
         # set method
         if not (query.action_type == ActionType.ReadEntity
                 or query.action_type == ActionType.GetMethod):
             request.method = HttpMethod.Post
     else:
         if query.action_type == ActionType.CreateEntity:
             request.method = HttpMethod.Post
         elif query.action_type == ActionType.UpdateEntity:
             request.method = HttpMethod.Patch
         elif query.action_type == ActionType.DeleteEntity:
             request.method = HttpMethod.Delete
     # set request payload
     if query.payload is not None:
         request.data = ODataEncoder(self.context.json_format).default(
             query.payload)
     return request
    def execute(self, chunk_uploaded=None):
        ctx = self._target_folder.context
        file_name = os.path.basename(self._source_path)
        # 1. create an empty file
        target_item = self._target_folder.upload(file_name, None)
        ctx.execute_query()

        # 2. create upload session
        item = DriveItemUploadableProperties()
        item.name = file_name
        session_result = target_item.create_upload_session(item)
        ctx.execute_query()

        # 3. start upload
        fh = open(self._source_path, 'rb')
        st = os.stat(self._source_path)
        f_pos = 0
        for piece in read_in_chunks(fh, chunk_size=self._chunk_size):
            req = RequestOptions(session_result.value.uploadUrl)
            req.method = HttpMethod.Put
            req.set_header('Content-Length', str(len(piece)))
            req.set_header(
                'Content-Range',
                'bytes {0}-{1}/{2}'.format(f_pos, (f_pos + len(piece) - 1),
                                           st.st_size))
            req.set_header('Accept', '*/*')
            req.data = piece
            resp = ctx.execute_request_direct(req)
            f_pos += len(piece)
            if chunk_uploaded is not None:
                chunk_uploaded(f_pos)

        return target_item
Beispiel #4
0
 def save_binary(ctx, server_relative_url, content):
     server_relative_url = urllib.quote(server_relative_url)
     url = "{0}web/getfilebyserverrelativeurl('{1}')/\$value".format(
         ctx.service_root_url, server_relative_url)
     request = RequestOptions(url)
     request.method = HttpMethod.Post
     request.set_header('X-HTTP-Method', 'PUT')
     request.data = content
     ctx.execute_query_direct(request)
Beispiel #5
0
 def save_binary(ctx, server_relative_url, content):
     """Uploads a file"""
     url = r"{0}web/getfilebyserverrelativeurl('{1}')/\$value".format(
         ctx.serviceRootUrl, server_relative_url)
     request = RequestOptions(url)
     request.method = HttpMethod.Post
     request.set_header('X-HTTP-Method', 'PUT')
     request.data = content
     response = ctx.execute_request_direct(request)
     return response
Beispiel #6
0
 def build_request(self, query):
     request = RequestOptions(query.url)
     # set json format headers
     request.set_headers(self.context.json_format.build_http_headers())
     # set method
     request.method = query.method
     # set request payload
     if query.payload is not None:
         request.data = ODataEncoder(self.context.json_format).default(query.payload)
     return request
Beispiel #7
0
 def save_binary(ctx, server_relative_url, content):
     try:
         from urllib import quote  # Python 2.X
     except ImportError:
         from urllib.parse import quote  # Python 3+
     server_relative_url = quote(server_relative_url)
     url = "{0}web/getfilebyserverrelativeurl('{1}')/\$value".format(ctx.service_root_url, server_relative_url)
     request = RequestOptions(url)
     request.method = HttpMethod.Post
     request.set_header('X-HTTP-Method', 'PUT')
     request.data = content
     ctx.execute_query_direct(request)
Beispiel #8
0
def create_list_item(context, list_title, url):
    """Create list item example"""
    request = ClientRequest(context)
    options = RequestOptions("{0}/web/lists/getbyTitle('{1}')/items".format(url, list_title))
    options.set_header('Accept', 'application/json; odata=nometadata')  # JSON Light nometadata mode!
    options.data = {'Title': 'New Task'}
    options.method = HttpMethod.Post
    print("Creating list item...")
    response = request.execute_request_direct(options)
    item = json.loads(response.content)
    print("Task {0} has been successfully [created]".format(item['Title']))
    return item
Beispiel #9
0
def delete_list_item(context, list_title, item_id, url):
    """Delete list item example"""
    request = ClientRequest(context)
    options = RequestOptions(
        "{0}/web/lists/getbyTitle('{1}')/items({2})".format(url, list_title, item_id))
    options.set_header('Accept', 'application/json; odata=nometadata')  # JSON Light nometadata mode!
    options.set_header('IF-MATCH', '*')
    options.set_header('X-HTTP-Method', 'DELETE')
    options.data = {'Title': 'New Task (updated)'}
    options.method = HttpMethod.Post
    print("Deleting list item...")
    request.execute_request_direct(options)
    print("Task has been successfully [deleted]")
Beispiel #10
0
 def post(self, path, headers={}, data={}):
     #        request = ClientRequest(self.ctx_auth)
     options = RequestOptions('{}_api/web/{}'.format(self.site_url, path))
     options.method = HttpMethod.Post
     options.set_headers(headers)
     options.data = data
     data = self.request.execute_request_direct(options)
     if data.status_code == 403:
         import traceback
         traceback.print_tb()
         print(options.url)
         print(data.content)
         print(options.headers)
     return data
Beispiel #11
0
def update_list_item(context, list_title, item_id, values_to_send):
    """
    Updates item with given id in given list with given properties
    :param context: auth context
    :param list_title: name of list
    :param item_id:
    :param values_to_send: dict with key-value pairs
    :return: requests/result object
    """
    request = ClientRequest(context)
    options = RequestOptions(
        "{2}/_api/web/lists/getbyTitle('{0}')/items({1})".format(
            list_title, item_id, URL))
    options.set_header('Accept', 'application/json; odata=nometadata')
    options.set_header('IF-MATCH', '*')
    options.set_header('X-HTTP-Method', 'MERGE')
    options.data = values_to_send
    options.method = HttpMethod.Post
    result = request.execute_request_direct(options)
    return result
 def _build_request(self):
     for qry in self._queries:
         request = RequestOptions(qry.entity_type.resourceUrl)
         # set json format headers
         request.set_headers(self.context.json_format.build_http_headers())
         # set method
         request.method = HttpMethod.Get
         if isinstance(qry, CreateEntityQuery) \
             or isinstance(qry, UpdateEntityQuery) \
             or isinstance(qry, DeleteEntityQuery):
             request.method = HttpMethod.Post
         elif isinstance(qry, ServiceOperationQuery):
             request.url = '/'.join(
                 [qry.entity_type.resourceUrl, qry.method_path.segment])
             request.method = HttpMethod.Post
         # set request payload
         if qry.parameters is not None:
             request.data = self._normalize_payload(qry.parameters)
         if 'before' in self._events:
             self._events['before'](request, qry)
         self.__current_query = qry
         yield request
Beispiel #13
0
 def build_request(self, query):
     request = RequestOptions(query.url)
     # set json format headers
     request.set_headers(self.context.json_format.build_http_headers())
     # set method
     request.method = query.method
     # set custom method headers
     if isinstance(self.context.json_format, JsonLightFormat):
         if isinstance(query, DeleteEntityQuery):
             request.set_header("X-HTTP-Method", "DELETE")
             request.set_header("IF-MATCH", '*')
         elif isinstance(query, UpdateEntityQuery):
             request.set_header("X-HTTP-Method", "MERGE")
             request.set_header("IF-MATCH", '*')
     else:
         if isinstance(query, UpdateEntityQuery):
             request.method = HttpMethod.Patch
         elif isinstance(query, DeleteEntityQuery):
             request.method = HttpMethod.Delete
     # set request payload
     if query.payload is not None:
         request.data = ODataEncoder(self.context.json_format).default(
             query.payload)
     return request
# If the script has reached this point, our session is authenticated
# Run payload (your desired action) here

# Note: our convention across this plugin is that destinationPath begins with "/",
# and site_url, site_sourceSite, site_destinationSite do not end with /

# Move or copy across sites
#    site_url must end with /
options = RequestOptions(site_source_url + "/sites/" + site_sourceSite + "/_api/site/CreateCopyJobs")
options.method = 'POST'
options.set_header('Accept', 'application/json')
options.set_header('Content-Type', 'application/json')
options.set_header('X-RequestDigest',digest)
options.data = '{
   "destinationUri" : "' + site_dest_url + destinationPath + ',
   "exportObjectUris" :
      ["' + site_source_url + sourcePath + '"],
      "options" :    {"IgnoreVersionHistory" :     "true", "IsMoveMode" : "true"}
   }'
   # This can copy multiple items in exportObjectUris
# options.data = '{ "destinationUri" : "' + site_dest_url + destinationPath + '", "exportObjectUris" : ["' + site_source_url + sourcePath + '"], "options" :    {"IgnoreVersionHistory" :     "true", "IsMoveMode" : "true"} }'
print(data.content)


# Execute
options.method = 'POST'
options.set_header('Accept', 'application/json')
options.set_header('Content-Type', 'application/json')
options.set_header('X-RequestDigest',digest)
data = request.execute_request_direct(options)
print("Server Response: ")
print(data.content)