From 1ab78472d630109decfafd55bdc57c7a78d75df1 Mon Sep 17 00:00:00 2001 From: Karandeep Johar Date: Tue, 7 Jul 2020 10:58:31 -0700 Subject: [PATCH] Make with_path_root() update existing headers rather than overwrite them --- dropbox/dropbox.py | 15 ++++++++++----- test/test_dropbox.py | 12 ++++++++++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/dropbox/dropbox.py b/dropbox/dropbox.py index 321991a3..34a3ac86 100644 --- a/dropbox/dropbox.py +++ b/dropbox/dropbox.py @@ -53,6 +53,10 @@ HTTP_STATUS_INVALID_PATH_ROOT = 422 TOKEN_EXPIRATION_BUFFER = 300 +SELECT_ADMIN_HEADER = 'Dropbox-API-Select-Admin' + +SELECT_USER_HEADER = 'Dropbox-API-Select-User' + class RouteResult(object): """The successful result of a call to a route.""" @@ -652,10 +656,11 @@ def with_path_root(self, path_root): if not isinstance(path_root, PathRoot): raise ValueError("path_root must be an instance of PathRoot") + new_headers = self._headers.copy() if self._headers else {} + new_headers[PATH_ROOT_HEADER] = stone_serializers.json_encode(PathRoot_validator, path_root) + return self.clone( - headers={ - PATH_ROOT_HEADER: stone_serializers.json_encode(PathRoot_validator, path_root) - } + headers=new_headers ) class Dropbox(_DropboxTransport, DropboxBase): @@ -682,7 +687,7 @@ def as_admin(self, team_member_id): of this admin of the team. :rtype: Dropbox """ - return self._get_dropbox_client_with_select_header('Dropbox-API-Select-Admin', + return self._get_dropbox_client_with_select_header(SELECT_ADMIN_HEADER, team_member_id) def as_user(self, team_member_id): @@ -695,7 +700,7 @@ def as_user(self, team_member_id): of this member of the team. :rtype: Dropbox """ - return self._get_dropbox_client_with_select_header('Dropbox-API-Select-User', + return self._get_dropbox_client_with_select_header(SELECT_USER_HEADER, team_member_id) def _get_dropbox_client_with_select_header(self, select_header_name, team_member_id): diff --git a/test/test_dropbox.py b/test/test_dropbox.py index f233dd9e..c4573cc0 100644 --- a/test/test_dropbox.py +++ b/test/test_dropbox.py @@ -24,7 +24,7 @@ session, stone_serializers, ) -from dropbox.dropbox import PATH_ROOT_HEADER +from dropbox.dropbox import PATH_ROOT_HEADER, SELECT_USER_HEADER from dropbox.exceptions import ( ApiError, AuthError, @@ -239,7 +239,15 @@ def test_team(self, dbxt): @dbx_team_from_env def test_as_user(self, dbxt): dbx_as_user = dbxt.as_user('1') - self.assertIsInstance(dbx_as_user, Dropbox) + path_root = PathRoot.root("123") + + dbx_new = dbx_as_user.with_path_root(path_root) + + self.assertIsInstance(dbx_new, Dropbox) + self.assertEqual(dbx_new._headers.get(SELECT_USER_HEADER), '1') + + expected = stone_serializers.json_encode(PathRoot_validator, path_root) + self.assertEqual(dbx_new._headers.get(PATH_ROOT_HEADER), expected) @dbx_team_from_env def test_as_admin(self, dbxt):