From 3097eadb8eccea216eb013920cdf0a5b4b47d2c8 Mon Sep 17 00:00:00 2001 From: Kelsey Morris Date: Fri, 8 Jul 2016 15:06:21 -0700 Subject: [PATCH 1/2] Allow custom subclasses of smart objects --- boxsdk/object/file.py | 2 +- boxsdk/object/folder.py | 8 +++----- boxsdk/object/group.py | 6 +++--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/boxsdk/object/file.py b/boxsdk/object/file.py index 5710c878b..5bd378aaa 100644 --- a/boxsdk/object/file.py +++ b/boxsdk/object/file.py @@ -127,7 +127,7 @@ def update_contents_with_stream( files = {'file': ('unused', file_stream)} headers = {'If-Match': etag} if etag is not None else None - return File( + return self.__class__( session=self._session, object_id=self._object_id, response_object=self._session.post(url, expect_json_response=False, files=files, headers=headers).json(), diff --git a/boxsdk/object/folder.py b/boxsdk/object/folder.py index db07b6050..d50209456 100644 --- a/boxsdk/object/folder.py +++ b/boxsdk/object/folder.py @@ -6,8 +6,6 @@ from six import text_type from boxsdk.config import API -from boxsdk.object.collaboration import Collaboration -from boxsdk.object.file import File from boxsdk.object.group import Group from boxsdk.object.item import Item from boxsdk.object.user import User @@ -217,7 +215,7 @@ def upload_stream( box_response = self._session.post(url, data=data, files=files, expect_json_response=False) file_response = box_response.json()['entries'][0] file_id = file_response['id'] - return File( + return Translator().translate(file_response['type'])( session=self._session, object_id=file_id, response_object=file_response, @@ -296,7 +294,7 @@ def create_subfolder(self, name): } box_response = self._session.post(url, data=json.dumps(data)) response = box_response.json() - return Folder( + return self.__class__( session=self._session, object_id=response['id'], response_object=response, @@ -359,7 +357,7 @@ def add_collaborator(self, collaborator, role, notify=False): box_response = self._session.post(url, expect_json_response=True, data=data, params=params) collaboration_response = box_response.json() collab_id = collaboration_response['id'] - return Collaboration( + return Translator().translate(collaboration_response['type'])( session=self._session, object_id=collab_id, response_object=collaboration_response, diff --git a/boxsdk/object/group.py b/boxsdk/object/group.py index 9d8a8b7e8..0128d9b69 100644 --- a/boxsdk/object/group.py +++ b/boxsdk/object/group.py @@ -6,7 +6,7 @@ from .base_object import BaseObject from boxsdk.config import API -from boxsdk.object.group_membership import GroupMembership +from boxsdk.util.translator import Translator class Group(BaseObject): @@ -46,7 +46,7 @@ def membership(self, starting_index=0, limit=100, include_page_info=False): """ url = self.get_url('memberships') - membership_factory = partial(GroupMembership, group=self) + membership_factory = partial(Translator().translate("group_membership"), group=self) for group_membership_tuple in self._paging_wrapper(url, starting_index, limit, membership_factory): if include_page_info: yield group_membership_tuple @@ -80,4 +80,4 @@ def add_member(self, user, role): box_response = self._session.post(url, data=json.dumps(body_attributes)) response = box_response.json() - return GroupMembership(self._session, response['id'], response, user=user, group=self) + return Translator().translate(response['type'])(self._session, response['id'], response, user=user, group=self) From df425464acb269983c0cb3fefcd18af59099c291 Mon Sep 17 00:00:00 2001 From: Kelsey Morris Date: Fri, 8 Jul 2016 15:30:22 -0700 Subject: [PATCH 2/2] Fix import statements --- boxsdk/auth/jwt_auth.py | 2 +- boxsdk/object/group.py | 6 +++--- boxsdk/object/group_membership.py | 4 ++-- boxsdk/object/item.py | 4 ++-- boxsdk/object/search.py | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/boxsdk/auth/jwt_auth.py b/boxsdk/auth/jwt_auth.py index 266fff254..67bca5b23 100644 --- a/boxsdk/auth/jwt_auth.py +++ b/boxsdk/auth/jwt_auth.py @@ -10,8 +10,8 @@ from cryptography.hazmat.primitives import serialization import jwt -from .oauth2 import OAuth2 from boxsdk.util.compat import total_seconds +from .oauth2 import OAuth2 class JWTAuth(OAuth2): diff --git a/boxsdk/object/group.py b/boxsdk/object/group.py index 0128d9b69..7786ac90d 100644 --- a/boxsdk/object/group.py +++ b/boxsdk/object/group.py @@ -1,12 +1,12 @@ # coding: utf-8 -from __future__ import unicode_literals +from __future__ import unicode_literals, absolute_import from functools import partial import json from .base_object import BaseObject -from boxsdk.config import API -from boxsdk.util.translator import Translator +from ..config import API +from ..util.translator import Translator class Group(BaseObject): diff --git a/boxsdk/object/group_membership.py b/boxsdk/object/group_membership.py index 5ee679242..bd2a09ade 100644 --- a/boxsdk/object/group_membership.py +++ b/boxsdk/object/group_membership.py @@ -1,9 +1,9 @@ # coding: utf-8 -from __future__ import unicode_literals +from __future__ import unicode_literals, absolute_import from .base_object import BaseObject -from boxsdk.util.translator import Translator +from ..util.translator import Translator class GroupMembership(BaseObject): diff --git a/boxsdk/object/item.py b/boxsdk/object/item.py index d0d99cd44..c2e9a89bc 100644 --- a/boxsdk/object/item.py +++ b/boxsdk/object/item.py @@ -4,8 +4,8 @@ import json from .base_object import BaseObject -from boxsdk.config import API -from boxsdk.exception import BoxAPIException +from ..config import API +from ..exception import BoxAPIException class Item(BaseObject): diff --git a/boxsdk/object/search.py b/boxsdk/object/search.py index 00ef73989..eaee934ab 100644 --- a/boxsdk/object/search.py +++ b/boxsdk/object/search.py @@ -1,11 +1,11 @@ # coding: utf-8 -from __future__ import unicode_literals +from __future__ import unicode_literals, absolute_import import json from .base_endpoint import BaseEndpoint -from boxsdk.util.translator import Translator +from ..util.translator import Translator class MetadataSearchFilter(object):