Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 0 additions & 21 deletions boxsdk/object/file.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

from boxsdk.config import API
from .item import Item
from .metadata import Metadata


class File(Item):
Expand Down Expand Up @@ -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,
Expand Down
21 changes: 21 additions & 0 deletions boxsdk/object/item.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 item.

: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 item.
:rtype:
:class:`Metadata`
"""
return Metadata(self._session, self, scope, template)
30 changes: 22 additions & 8 deletions test/unit/object/test_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -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(
Expand All @@ -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())
Expand All @@ -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(
Expand Down