示例#1
0
    def test_search(self):
        body_token = {
            "access_token": "T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl",
            "expires_in": 3600,
            "restricted_to": [],
            "token_type": "bearer",
            "refresh_token": "new_refresh_token!!"
        }

        httpretty.register_uri(httpretty.POST,
                               "https://www.box.com/api/oauth2/token",
                               body=json.dumps(body_token),
                               status=200,
                               content_type='text/json')
        folder_id = 168
        body = get_dummy_search_result()
        body["entries"][0]['id'] = folder_id

        httpretty.register_uri(
            httpretty.GET,
            "https://api.box.com/2.0/search?query=Empowering",
            body=json.dumps(body),
            status=200,
            match_querystring=True,
            content_type='application/json')
        refresh_token = "T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl"
        access_token = "new_refresh_token!!"
        box = boxpython.BoxSession(self.client_id, self.client_secret,
                                   refresh_token, access_token)

        search_result = box.search(query="Empowering")
        self.assertTrue(search_result["entries"] is not None)
        self.assertEqual(folder_id, search_result["entries"][0]["id"])
示例#2
0
    def test_get_folder_info(self):
        folder_id = 165
        body = get_dummy_folder_result()
        body['id'] = folder_id

        httpretty.register_uri(httpretty.GET,
                               "https://api.box.com/2.0/folders/%s" %
                               folder_id,
                               body=json.dumps(body),
                               status=200,
                               content_type='text/json')

        refresh_token = "refresh_token_dummy#!"
        access_token = "access_token_dummy#!"
        box = boxpython.BoxSession(self.client_id, self.client_secret,
                                   refresh_token, access_token)

        resp = box.get_folder_info(folder_id)

        expect(httpretty.last_request()).have.property("querystring").\
                    should.be.equal({})

        expect(httpretty.last_request()).have.property("body").\
                    should.be.equal('')

        expect(httpretty.last_request().headers['Authorization']).\
                    to.equal('Bearer %s' % access_token)

        (resp).should.be.equal(body)
示例#3
0
    def test_create_boxsession(self):
        body = {
            "access_token": "T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl",
            "expires_in": 3600,
            "restricted_to": [],
            "token_type": "bearer",
            "refresh_token": "new_refresh_token!!"
        }

        httpretty.register_uri(httpretty.POST,
                               "https://www.box.com/api/oauth2/token",
                               body=json.dumps(body),
                               status=200,
                               content_type='text/json')

        refresh_token = "refresh_token_dummy#!"
        box = boxpython.BoxSession(self.client_id,
                                   self.client_secret,
                                   refresh_token,
                                   last_access_token=None)

        query_body = httpretty.last_request().body

        self.assertEqual(
            urlparse.parse_qs(query_body), {
                "client_id": [self.client_id],
                "client_secret": [self.client_secret],
                "grant_type": ["refresh_token"],
                "refresh_token": [refresh_token],
            })

        self.assertEqual(body['refresh_token'], box.refresh_token)
        self.assertEqual(body['access_token'], box.access_token)
示例#4
0
    def test_create_boxsession_no_refresh_token(self):

        refresh_token = "refresh_token_dummy#!"
        access_token = "access_token_dummy#!"
        boxpython.BoxSession(self.client_id, self.client_secret, refresh_token,
                             access_token)

        self.assertIsInstance(httpretty.httpretty.last_request,
                              httpretty.core.HTTPrettyRequestEmpty)
示例#5
0
    def run_big_file_senario(self):

        (client_id, client_secret, refresh_token,
         access_token) = self.__get_box_data(interactive=True)

        box = boxpython.BoxSession(client_id, client_secret, refresh_token,
                                   access_token, self.__new_tokens_callback)

        folder_id = self.__create_boxpython_test_folder(box)

        self.passed_in_progress_callback = False
        my_file_content2 = os.urandom(1024 * 1024 * 1)  #1 MO
        my_file2 = self.__create_file(my_file_content2,
                                      "/tmp/test_big_file.bin")
        try:
            resp = box.chunk_upload_file(
                "test_big_file.bin",
                folder_id,
                my_file2,
                progress_callback=self.__progress_callback,
                chunk_size=int(len(my_file_content2) / 10.0))
            my_file2_id = int(resp['entries'][0]['id'])
            self.assertTrue(self.passed_in_progress_callback)

            self.passed_in_progress_callback = False
            try:
                my_file2_dl = my_file2 + 'dl'
                resp = box.download_file(
                    my_file2_id,
                    my_file2_dl,
                    progress_callback=self.__progress_callback,
                    chunk_size=int(len(my_file_content2) / 10.0))

                self.assertTrue(filecmp.cmp(my_file2, my_file2_dl))
                self.assertTrue(self.passed_in_progress_callback)
            finally:
                os.remove(my_file2_dl)
        finally:
            os.remove(my_file2)
示例#6
0
    def test_get_folder_info_with_expired_refresh_token(self):
        body_token = {
            "access_token": "T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl",
            "expires_in": 3600,
            "restricted_to": [],
            "token_type": "bearer",
            "refresh_token": "new_refresh_token!!"
        }

        httpretty.register_uri(httpretty.POST,
                               "https://www.box.com/api/oauth2/token",
                               body=json.dumps(body_token),
                               status=200,
                               content_type='text/json')

        folder_id = 168
        body = get_dummy_folder_result()
        body['id'] = folder_id

        httpretty.register_uri(httpretty.GET,
                               "https://api.box.com/2.0/folders/%s" %
                               folder_id,
                               responses=[
                                   httpretty.Response(body=json.dumps({}),
                                                      status=401),
                                   httpretty.Response(body=json.dumps({}),
                                                      status=401),
                               ])

        refresh_token = "refresh_token_dummy expired #!"
        access_token = "access_token_dummy expired #!"
        box = boxpython.BoxSession(self.client_id, self.client_secret,
                                   refresh_token, access_token)

        with self.assertRaises(boxpython.BoxError) as cm:
            resp = box.get_folder_info(folder_id)

        self.assertEqual(cm.exception.status, 401)
示例#7
0
    def run_full_scenario(self):

        (client_id, client_secret, refresh_token,
         access_token) = self.__get_box_data(interactive=True)

        box = boxpython.BoxSession(client_id, client_secret, refresh_token,
                                   access_token, self.__new_tokens_callback)

        box.get_folder_info(0)

        folder_id = self.__create_boxpython_test_folder(box)

        resp = box.get_user_info()
        self.assertTrue('login' in resp)
        self.assertTrue('job_title' in resp)
        self.assertTrue('avatar_url' in resp)

        resp = box.get_folder_items(folder_id)
        self.assertEqual(
            resp, {
                u'total_count':
                0,
                u'offset':
                0,
                u'limit':
                100,
                u'order': [{
                    u'direction': u'ASC',
                    u'by': u'type'
                }, {
                    u'direction': u'ASC',
                    u'by': u'name'
                }],
                u'entries': []
            })

        resp = box.get_folder_items(folder_id, limit=1000, offset=2)
        self.assertEqual(
            resp, {
                u'total_count':
                0,
                u'offset':
                2,
                u'limit':
                1000,
                u'order': [{
                    u'direction': u'ASC',
                    u'by': u'type'
                }, {
                    u'direction': u'ASC',
                    u'by': u'name'
                }],
                u'entries': []
            })

        resp = box.get_folder_items(folder_id,
                                    limit=1000,
                                    offset=2,
                                    fields_list=['name', 'created_at'])
        self.assertEqual(
            resp, {
                u'total_count':
                0,
                u'offset':
                2,
                u'limit':
                1000,
                u'order': [{
                    u'direction': u'ASC',
                    u'by': u'type'
                }, {
                    u'direction': u'ASC',
                    u'by': u'name'
                }],
                u'entries': []
            })

        resp = box.create_folder("new_folder", folder_id)
        new_folder = int(resp['id'])

        resp = box.get_folder_items(folder_id)
        self.assertEqual(resp['total_count'], 1)
        self.assertEqual(int(resp['entries'][0]['id']), new_folder)

        my_file_content1 = "content of my file"
        my_file1 = self.__create_file(my_file_content1)
        try:
            resp = box.upload_file("my_file1.txt", new_folder, my_file1)
            my_file1_id = int(resp['entries'][0]['id'])
        finally:
            os.remove(my_file1)

        resp = box.get_file_info(my_file1_id)
        self.assertEqual(resp['name'], "my_file1.txt")

        box.delete_file(my_file1_id)

        with self.assertRaises(boxpython.BoxError) as cm:
            box.get_file_info(my_file1_id)

        # Create file

        my_file_content1 = "content of my file " * 20
        my_file1 = self.__create_file(my_file_content1)
        try:
            resp = box.upload_file("my_file1.txt", new_folder, my_file1)
            my_file1_id = int(resp['entries'][0]['id'])
        except:
            os.remove(my_file1)
            raise

        try:
            resp = box.upload_file("my_file1.txt", new_folder, my_file1)
            raise Exception(
                "Uploading existing file should raise an error 409")
        except:
            pass
        finally:
            os.remove(my_file1)

        self.__check_uploaded_file(box, my_file1_id, my_file_content1)

        # Update file

        my_file_content1 = "content of my file updated " * 20
        my_file1 = self.__create_file(my_file_content1)
        try:
            resp = box.upload_new_file_version("my_file1.txt", new_folder,
                                               my_file1_id, my_file1)
        except:
            pass
        finally:
            os.remove(my_file1)

        self.__check_uploaded_file(box, my_file1_id, my_file_content1)

        # Copy file
        resp = box.create_folder("sub_folder", new_folder)
        sub_folder = int(resp['id'])
        resp = box.copy_file(my_file1_id, sub_folder)
        my_file1_copied_id = int(resp['id'])

        self.__check_uploaded_file(box, my_file1_id, my_file_content1)
        self.__check_uploaded_file(box, my_file1_copied_id, my_file_content1)

        # Chunk upload

        self.passed_in_progress_callback = False
        my_file_content2 = os.urandom(1024 * 1024 * 1)  #1 MO
        my_file2 = self.__create_file(my_file_content2)
        try:
            resp = box.chunk_upload_file(
                "my_file2.txt",
                new_folder,
                my_file2,
                progress_callback=self.__progress_callback)
            my_file2_id = int(resp['entries'][0]['id'])
        finally:
            os.remove(my_file2)
        self.assertTrue(self.passed_in_progress_callback)

        self.passed_in_progress_callback = False
        my_file_content3 = b''
        my_file3 = self.__create_file(my_file_content3)
        try:
            resp = box.chunk_upload_file(
                "my_file3.txt",
                new_folder,
                my_file3,
                progress_callback=self.__progress_callback)
            my_file3_id = int(resp['entries'][0]['id'])
        finally:
            os.remove(my_file3)
        self.assertTrue(self.passed_in_progress_callback)

        self.passed_in_progress_callback = False
        my_file_content4 = b''
        my_file4 = self.__create_file(my_file_content4)
        try:
            resp = box.chunk_upload_file(
                "my_file4.txt",
                new_folder,
                my_file4,
                progress_callback=self.__progress_callback)
            my_file4_id = int(resp['entries'][0]['id'])
        finally:
            os.remove(my_file4)
        self.assertTrue(self.passed_in_progress_callback)

        self.__check_uploaded_file(box, my_file2_id, my_file_content2)
        self.__check_uploaded_file(box, my_file3_id, my_file_content3)
        self.__check_uploaded_file(box, my_file4_id, my_file_content4)

        # Search

        search_result = box.search(query="boxpython_test_folder")

        self.assertTrue(search_result["entries"] is not None)
        # Sometimes, it takes a little bit of time for the search indexes to be
        # updated with the new file/folder metadata. So we do not check values.
        #self.assertEqual(folder_id, search_result['entries'][0]['id'])

        resp = box.delete_folder(folder_id)