Skip to content

Commit 3f5908c

Browse files
kelseymorris95jmoldow
authored andcommitted
Allow custom subclasses of smart objects (#149)
Enable `Translator` registered subclasses of smart objects to be returned from smart object methods. Remove all hard coded smart object return types in favor of a lookup in `Translator` or returning an instance of `self.__class__`.
1 parent 76652d9 commit 3f5908c

File tree

7 files changed

+16
-18
lines changed

7 files changed

+16
-18
lines changed

boxsdk/auth/jwt_auth.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
from cryptography.hazmat.primitives import serialization
1111
import jwt
1212

13-
from .oauth2 import OAuth2
1413
from boxsdk.util.compat import total_seconds
14+
from .oauth2 import OAuth2
1515

1616

1717
class JWTAuth(OAuth2):

boxsdk/object/file.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def update_contents_with_stream(
127127

128128
files = {'file': ('unused', file_stream)}
129129
headers = {'If-Match': etag} if etag is not None else None
130-
return File(
130+
return self.__class__(
131131
session=self._session,
132132
object_id=self._object_id,
133133
response_object=self._session.post(url, expect_json_response=False, files=files, headers=headers).json(),

boxsdk/object/folder.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
from six import text_type
77

88
from boxsdk.config import API
9-
from boxsdk.object.collaboration import Collaboration
10-
from boxsdk.object.file import File
119
from boxsdk.object.group import Group
1210
from boxsdk.object.item import Item
1311
from boxsdk.object.user import User
@@ -217,7 +215,7 @@ def upload_stream(
217215
box_response = self._session.post(url, data=data, files=files, expect_json_response=False)
218216
file_response = box_response.json()['entries'][0]
219217
file_id = file_response['id']
220-
return File(
218+
return Translator().translate(file_response['type'])(
221219
session=self._session,
222220
object_id=file_id,
223221
response_object=file_response,
@@ -296,7 +294,7 @@ def create_subfolder(self, name):
296294
}
297295
box_response = self._session.post(url, data=json.dumps(data))
298296
response = box_response.json()
299-
return Folder(
297+
return self.__class__(
300298
session=self._session,
301299
object_id=response['id'],
302300
response_object=response,
@@ -359,7 +357,7 @@ def add_collaborator(self, collaborator, role, notify=False):
359357
box_response = self._session.post(url, expect_json_response=True, data=data, params=params)
360358
collaboration_response = box_response.json()
361359
collab_id = collaboration_response['id']
362-
return Collaboration(
360+
return Translator().translate(collaboration_response['type'])(
363361
session=self._session,
364362
object_id=collab_id,
365363
response_object=collaboration_response,

boxsdk/object/group.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# coding: utf-8
22

3-
from __future__ import unicode_literals
3+
from __future__ import unicode_literals, absolute_import
44
from functools import partial
55
import json
66

77
from .base_object import BaseObject
8-
from boxsdk.config import API
9-
from boxsdk.object.group_membership import GroupMembership
8+
from ..config import API
9+
from ..util.translator import Translator
1010

1111

1212
class Group(BaseObject):
@@ -46,7 +46,7 @@ def membership(self, starting_index=0, limit=100, include_page_info=False):
4646
"""
4747
url = self.get_url('memberships')
4848

49-
membership_factory = partial(GroupMembership, group=self)
49+
membership_factory = partial(Translator().translate("group_membership"), group=self)
5050
for group_membership_tuple in self._paging_wrapper(url, starting_index, limit, membership_factory):
5151
if include_page_info:
5252
yield group_membership_tuple
@@ -80,4 +80,4 @@ def add_member(self, user, role):
8080
box_response = self._session.post(url, data=json.dumps(body_attributes))
8181
response = box_response.json()
8282

83-
return GroupMembership(self._session, response['id'], response, user=user, group=self)
83+
return Translator().translate(response['type'])(self._session, response['id'], response, user=user, group=self)

boxsdk/object/group_membership.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# coding: utf-8
22

3-
from __future__ import unicode_literals
3+
from __future__ import unicode_literals, absolute_import
44

55
from .base_object import BaseObject
6-
from boxsdk.util.translator import Translator
6+
from ..util.translator import Translator
77

88

99
class GroupMembership(BaseObject):

boxsdk/object/item.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import json
55

66
from .base_object import BaseObject
7-
from boxsdk.config import API
8-
from boxsdk.exception import BoxAPIException
7+
from ..config import API
8+
from ..exception import BoxAPIException
99

1010

1111
class Item(BaseObject):

boxsdk/object/search.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# coding: utf-8
22

3-
from __future__ import unicode_literals
3+
from __future__ import unicode_literals, absolute_import
44

55
import json
66

77
from .base_endpoint import BaseEndpoint
8-
from boxsdk.util.translator import Translator
8+
from ..util.translator import Translator
99

1010

1111
class MetadataSearchFilter(object):

0 commit comments

Comments
 (0)