From f75282697f42559df3d2b595714a250915c0c1ba Mon Sep 17 00:00:00 2001 From: Vincenzo Pirrone Date: Mon, 6 Jun 2016 15:14:01 +0100 Subject: [PATCH 1/2] move metadata() to Item in order to support folder metadata --- boxsdk/object/file.py | 21 --------------------- boxsdk/object/item.py | 21 +++++++++++++++++++++ test/unit/object/test_metadata.py | 30 ++++++++++++++++++++++-------- 3 files changed, 43 insertions(+), 29 deletions(-) diff --git a/boxsdk/object/file.py b/boxsdk/object/file.py index 5710c878b..53e4b8feb 100644 --- a/boxsdk/object/file.py +++ b/boxsdk/object/file.py @@ -4,7 +4,6 @@ from boxsdk.config import API from .item import Item -from .metadata import Metadata class File(Item): @@ -219,26 +218,6 @@ def unlock(self): data = {'lock': None} return self.update_info(data) - def metadata(self, scope='global', template='properties'): - """ - Instantiate a :class:`Metadata` object associated with this file. - - :param scope: - Scope of the metadata. Must be either 'global' or 'enterprise'. - :type scope: - `unicode` - :param template: - The name of the metadata template. - See https://box-content.readme.io/reference#metadata-object for more details. - :type template: - `unicode` - :return: - A new metadata instance associated with this file. - :rtype: - :class:`Metadata` - """ - return Metadata(self._session, self, scope, template) - def get_shared_link_download_url( self, access=None, diff --git a/boxsdk/object/item.py b/boxsdk/object/item.py index cc885af72..bfb1b7c66 100644 --- a/boxsdk/object/item.py +++ b/boxsdk/object/item.py @@ -4,6 +4,7 @@ import json +from boxsdk.object.metadata import Metadata from .base_object import BaseObject from boxsdk.config import API from boxsdk.exception import BoxAPIException @@ -322,3 +323,23 @@ def delete(self, params=None, etag=None): """ headers = {'If-Match': etag} if etag is not None else None return super(Item, self).delete(params, headers) + + def metadata(self, scope='global', template='properties'): + """ + Instantiate a :class:`Metadata` object associated with this file. + + :param scope: + Scope of the metadata. Must be either 'global' or 'enterprise'. + :type scope: + `unicode` + :param template: + The name of the metadata template. + See https://box-content.readme.io/reference#metadata-object for more details. + :type template: + `unicode` + :return: + A new metadata instance associated with this file. + :rtype: + :class:`Metadata` + """ + return Metadata(self._session, self, scope, template) diff --git a/test/unit/object/test_metadata.py b/test/unit/object/test_metadata.py index 409914bd7..c805f0d35 100644 --- a/test/unit/object/test_metadata.py +++ b/test/unit/object/test_metadata.py @@ -3,6 +3,9 @@ from __future__ import unicode_literals import json import pytest + +from boxsdk.object.file import File +from boxsdk.object.folder import Folder from boxsdk.object.metadata import MetadataUpdate @@ -32,25 +35,30 @@ def metadata_template(): @pytest.mark.parametrize('success', [True, False]) -def test_delete(mock_box_session, make_mock_box_request, test_file, metadata_scope, metadata_template, success): +@pytest.mark.parametrize('item_class', [File, Folder]) +def test_delete(mock_box_session, make_mock_box_request, item_class, mock_object_id, metadata_scope, metadata_template, success): # pylint:disable=redefined-outer-name + item = item_class(mock_box_session, mock_object_id) mock_box_session.delete.return_value, _ = make_mock_box_request(response_ok=success) - metadata = test_file.metadata(metadata_scope, metadata_template) + metadata = item.metadata(metadata_scope, metadata_template) assert metadata.delete() is success mock_box_session.delete.assert_called_once_with(metadata.get_url()) +@pytest.mark.parametrize('item_class', [File, Folder]) def test_create( mock_box_session, make_mock_box_request, - test_file, + item_class, + mock_object_id, metadata_scope, metadata_template, metadata_response, ): # pylint:disable=redefined-outer-name + item = item_class(mock_box_session, mock_object_id) mock_box_session.post.return_value, _ = make_mock_box_request(response=metadata_response) - metadata = test_file.metadata(metadata_scope, metadata_template) + metadata = item.metadata(metadata_scope, metadata_template) response = metadata.create(metadata_response) assert response is metadata_response mock_box_session.post.assert_called_once_with( @@ -60,17 +68,20 @@ def test_create( ) +@pytest.mark.parametrize('item_class', [File, Folder]) def test_get( mock_box_session, make_mock_box_request, - test_file, + item_class, + mock_object_id, metadata_scope, metadata_template, metadata_response, ): # pylint:disable=redefined-outer-name + item = item_class(mock_box_session, mock_object_id) mock_box_session.get.return_value, _ = make_mock_box_request(response=metadata_response) - metadata = test_file.metadata(metadata_scope, metadata_template) + metadata = item.metadata(metadata_scope, metadata_template) response = metadata.get() assert response is metadata_response mock_box_session.get.assert_called_once_with(metadata.get_url()) @@ -86,18 +97,21 @@ def metadata_update(): return update +@pytest.mark.parametrize('item_class', [File, Folder]) def test_update( mock_box_session, make_mock_box_request, - test_file, + item_class, + mock_object_id, metadata_scope, metadata_template, metadata_response, metadata_update, ): # pylint:disable=redefined-outer-name + item = item_class(mock_box_session, mock_object_id) mock_box_session.put.return_value, _ = make_mock_box_request(response=metadata_response) - metadata = test_file.metadata(metadata_scope, metadata_template) + metadata = item.metadata(metadata_scope, metadata_template) response = metadata.update(metadata_update) assert response is metadata_response mock_box_session.put.assert_called_once_with( From 436bfa6cf4b78e8aa2cb9121a2c4518098b5f180 Mon Sep 17 00:00:00 2001 From: Vincenzo Pirrone Date: Mon, 6 Jun 2016 17:34:45 +0100 Subject: [PATCH 2/2] updated metadata() comments --- boxsdk/object/item.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/boxsdk/object/item.py b/boxsdk/object/item.py index bfb1b7c66..c6988c5e3 100644 --- a/boxsdk/object/item.py +++ b/boxsdk/object/item.py @@ -326,7 +326,7 @@ def delete(self, params=None, etag=None): def metadata(self, scope='global', template='properties'): """ - Instantiate a :class:`Metadata` object associated with this file. + Instantiate a :class:`Metadata` object associated with this item. :param scope: Scope of the metadata. Must be either 'global' or 'enterprise'. @@ -338,7 +338,7 @@ def metadata(self, scope='global', template='properties'): :type template: `unicode` :return: - A new metadata instance associated with this file. + A new metadata instance associated with this item. :rtype: :class:`Metadata` """