Add photo replace endpoints
This commit is contained in:
parent
3da64a59cc
commit
c635c7c0c0
4 changed files with 147 additions and 36 deletions
|
@ -170,9 +170,18 @@ class TestPhotos(test_base.TestBase):
|
||||||
self.assertEqual(next_prev["next"][0].id, self.photos[2].id)
|
self.assertEqual(next_prev["next"][0].id, self.photos[2].id)
|
||||||
|
|
||||||
def test_replace(self):
|
def test_replace(self):
|
||||||
""" If photo.replace gets implemented, write a test! """
|
""" Test that a photo can be replaced with another """
|
||||||
with self.assertRaises(NotImplementedError):
|
# Replace the first photo with a copy of the second
|
||||||
self.client.photo.replace(None, None)
|
original_hash = self.photos[0].hash
|
||||||
|
self.assertNotEqual(original_hash, self.photos[1].hash)
|
||||||
|
self.photos[0].replace("tests/data/test_photo2.jpg",
|
||||||
|
allowDuplicate=True)
|
||||||
|
# Check that its new hash is correct
|
||||||
|
self.assertEqual(self.photos[0].hash, self.photos[1].hash)
|
||||||
|
# Put it back
|
||||||
|
self.photos[0].replace("tests/data/test_photo1.jpg",
|
||||||
|
allowDuplicate=True)
|
||||||
|
self.assertEqual(self.photos[0].hash, original_hash)
|
||||||
|
|
||||||
def test_replace_encoded(self):
|
def test_replace_encoded(self):
|
||||||
""" If photo.replace_encoded gets implemented, write a test! """
|
""" If photo.replace_encoded gets implemented, write a test! """
|
||||||
|
|
|
@ -180,41 +180,107 @@ class TestPhotoDeleteSource(TestPhotos):
|
||||||
|
|
||||||
class TestPhotoReplace(TestPhotos):
|
class TestPhotoReplace(TestPhotos):
|
||||||
@mock.patch.object(trovebox.Trovebox, 'post')
|
@mock.patch.object(trovebox.Trovebox, 'post')
|
||||||
def test_photo_replace(self, _):
|
def test_photo_replace(self, mock_post):
|
||||||
""" If photo.replace gets implemented, write a test! """
|
"""Check that an existing photo can be replaced"""
|
||||||
with self.assertRaises(NotImplementedError):
|
mock_post.return_value = self._return_value(self.test_photos_dict[0])
|
||||||
self.client.photo.replace(self.test_photos[0], self.test_file)
|
result = self.client.photo.replace(self.test_photos[1],
|
||||||
|
self.test_file, title="Test")
|
||||||
|
# It's not possible to compare the file object,
|
||||||
|
# so check each parameter individually
|
||||||
|
endpoint = mock_post.call_args[0]
|
||||||
|
title = mock_post.call_args[1]["title"]
|
||||||
|
files = mock_post.call_args[1]["files"]
|
||||||
|
self.assertEqual(endpoint,
|
||||||
|
("/photo/%s/replace.json" % self.test_photos[1].id,))
|
||||||
|
self.assertEqual(title, "Test")
|
||||||
|
self.assertIn("photo", files)
|
||||||
|
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
|
||||||
|
|
||||||
@mock.patch.object(trovebox.Trovebox, 'post')
|
@mock.patch.object(trovebox.Trovebox, 'post')
|
||||||
def test_photo_replace_id(self, _):
|
def test_photo_replace_id(self, mock_post):
|
||||||
""" If photo.replace gets implemented, write a test! """
|
"""Check that an existing photo can be replaced using its ID"""
|
||||||
with self.assertRaises(NotImplementedError):
|
mock_post.return_value = self._return_value(self.test_photos_dict[0])
|
||||||
self.client.photo.replace("1a", self.test_file)
|
result = self.client.photo.replace(self.test_photos[1].id,
|
||||||
|
self.test_file, title="Test")
|
||||||
|
# It's not possible to compare the file object,
|
||||||
|
# so check each parameter individually
|
||||||
|
endpoint = mock_post.call_args[0]
|
||||||
|
title = mock_post.call_args[1]["title"]
|
||||||
|
files = mock_post.call_args[1]["files"]
|
||||||
|
self.assertEqual(endpoint,
|
||||||
|
("/photo/%s/replace.json" % self.test_photos[1].id,))
|
||||||
|
self.assertEqual(title, "Test")
|
||||||
|
self.assertIn("photo", files)
|
||||||
|
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
|
||||||
|
|
||||||
@mock.patch.object(trovebox.Trovebox, 'post')
|
@mock.patch.object(trovebox.Trovebox, 'post')
|
||||||
def test_photo_object_replace(self, _):
|
def test_photo_object_replace(self, mock_post):
|
||||||
""" If photo.replace gets implemented, write a test! """
|
"""
|
||||||
with self.assertRaises(NotImplementedError):
|
Check that an existing photo can be replaced when using the
|
||||||
self.test_photos[0].replace(self.test_file)
|
Photo object directly.
|
||||||
|
"""
|
||||||
|
photo_id = self.test_photos[1].id
|
||||||
|
mock_post.return_value = self._return_value(self.test_photos_dict[0])
|
||||||
|
self.test_photos[1].replace(self.test_file, title="Test")
|
||||||
|
# It's not possible to compare the file object,
|
||||||
|
# so check each parameter individually
|
||||||
|
endpoint = mock_post.call_args[0]
|
||||||
|
title = mock_post.call_args[1]["title"]
|
||||||
|
files = mock_post.call_args[1]["files"]
|
||||||
|
self.assertEqual(endpoint, ("/photo/%s/replace.json" % photo_id,))
|
||||||
|
self.assertEqual(title, "Test")
|
||||||
|
self.assertIn("photo", files)
|
||||||
|
self.assertEqual(self.test_photos[1].get_fields(),
|
||||||
|
self.test_photos_dict[0])
|
||||||
|
|
||||||
@mock.patch.object(trovebox.Trovebox, 'post')
|
@mock.patch.object(trovebox.Trovebox, 'post')
|
||||||
def test_photo_replace_encoded(self, _):
|
def test_photo_replace_encoded(self, mock_post):
|
||||||
""" If photo.replace_encoded gets implemented, write a test! """
|
"""
|
||||||
with self.assertRaises(NotImplementedError):
|
Check that a photo can be uploaded using Base64 encoding to
|
||||||
self.client.photo.replace_encoded(self.test_photos[0],
|
replace an existing photo.
|
||||||
self.test_file)
|
"""
|
||||||
|
mock_post.return_value = self._return_value(self.test_photos_dict[0])
|
||||||
|
result = self.client.photo.replace_encoded(self.test_photos[1],
|
||||||
|
self.test_file, title="Test")
|
||||||
|
with open(self.test_file, "rb") as in_file:
|
||||||
|
encoded_file = base64.b64encode(in_file.read())
|
||||||
|
mock_post.assert_called_with("/photo/%s/replace.json"
|
||||||
|
% self.test_photos[1].id,
|
||||||
|
photo=encoded_file, title="Test")
|
||||||
|
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
|
||||||
|
|
||||||
@mock.patch.object(trovebox.Trovebox, 'post')
|
@mock.patch.object(trovebox.Trovebox, 'post')
|
||||||
def test_photo_replace_encoded_id(self, _):
|
def test_photo_replace_encoded_id(self, mock_post):
|
||||||
""" If photo.replace_encoded gets implemented, write a test! """
|
"""
|
||||||
with self.assertRaises(NotImplementedError):
|
Check that a photo can be uploaded using Base64 encoding to
|
||||||
self.client.photo.replace_encoded("1a", self.test_file)
|
replace an existing photo using its ID.
|
||||||
|
"""
|
||||||
|
mock_post.return_value = self._return_value(self.test_photos_dict[0])
|
||||||
|
result = self.client.photo.replace_encoded(self.test_photos[1].id,
|
||||||
|
self.test_file, title="Test")
|
||||||
|
with open(self.test_file, "rb") as in_file:
|
||||||
|
encoded_file = base64.b64encode(in_file.read())
|
||||||
|
mock_post.assert_called_with("/photo/%s/replace.json"
|
||||||
|
% self.test_photos[1].id,
|
||||||
|
photo=encoded_file, title="Test")
|
||||||
|
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
|
||||||
|
|
||||||
@mock.patch.object(trovebox.Trovebox, 'post')
|
@mock.patch.object(trovebox.Trovebox, 'post')
|
||||||
def test_photo_object_replace_encoded(self, _):
|
def test_photo_object_replace_encoded(self, mock_post):
|
||||||
""" If photo.replace_encoded gets implemented, write a test! """
|
"""
|
||||||
with self.assertRaises(NotImplementedError):
|
Check that a photo can be uploaded using Base64 encoding to
|
||||||
self.test_photos[0].replace_encoded(photo_file=self.test_file)
|
replace an existing photo when using the Photo object directly.
|
||||||
|
"""
|
||||||
|
photo_id = self.test_photos[1].id
|
||||||
|
mock_post.return_value = self._return_value(self.test_photos_dict[0])
|
||||||
|
self.test_photos[1].replace_encoded(self.test_file, title="Test")
|
||||||
|
with open(self.test_file, "rb") as in_file:
|
||||||
|
encoded_file = base64.b64encode(in_file.read())
|
||||||
|
mock_post.assert_called_with("/photo/%s/replace.json"
|
||||||
|
% photo_id,
|
||||||
|
photo=encoded_file, title="Test")
|
||||||
|
self.assertEqual(self.test_photos[1].get_fields(),
|
||||||
|
self.test_photos_dict[0])
|
||||||
|
|
||||||
class TestPhotoUpdate(TestPhotos):
|
class TestPhotoUpdate(TestPhotos):
|
||||||
@mock.patch.object(trovebox.Trovebox, 'post')
|
@mock.patch.object(trovebox.Trovebox, 'post')
|
||||||
|
|
|
@ -84,12 +84,34 @@ class ApiPhoto(ApiBase):
|
||||||
**kwds)["result"]
|
**kwds)["result"]
|
||||||
|
|
||||||
def replace(self, photo, photo_file, **kwds):
|
def replace(self, photo, photo_file, **kwds):
|
||||||
""" Not yet implemented """
|
"""
|
||||||
raise NotImplementedError()
|
Endpoint: /photo/<id>/replace.json
|
||||||
|
|
||||||
|
Uploads the specified photo file to replace an existing photo.
|
||||||
|
"""
|
||||||
|
with open(photo_file, 'rb') as in_file:
|
||||||
|
result = self._client.post("/photo/%s/replace.json" %
|
||||||
|
self._extract_id(photo),
|
||||||
|
files={'photo': in_file},
|
||||||
|
**kwds)["result"]
|
||||||
|
return Photo(self._client, result)
|
||||||
|
|
||||||
def replace_encoded(self, photo, photo_file, **kwds):
|
def replace_encoded(self, photo, photo_file, **kwds):
|
||||||
""" Not yet implemented """
|
"""
|
||||||
raise NotImplementedError()
|
Endpoint: /photo/<id>/replace.json
|
||||||
|
|
||||||
|
Base64-encodes and uploads the specified photo filename to
|
||||||
|
replace an existing photo.
|
||||||
|
"""
|
||||||
|
with open(photo_file, "rb") as in_file:
|
||||||
|
encoded_photo = base64.b64encode(in_file.read())
|
||||||
|
result = self._client.post("/photo/%s/replace.json" %
|
||||||
|
self._extract_id(photo),
|
||||||
|
photo=encoded_photo,
|
||||||
|
**kwds)["result"]
|
||||||
|
return Photo(self._client, result)
|
||||||
|
|
||||||
|
# def replace_from_url(self, url, **kwds):
|
||||||
|
|
||||||
def update(self, photo, **kwds):
|
def update(self, photo, **kwds):
|
||||||
"""
|
"""
|
||||||
|
@ -142,6 +164,8 @@ class ApiPhoto(ApiBase):
|
||||||
**kwds)["result"]
|
**kwds)["result"]
|
||||||
return Photo(self._client, result)
|
return Photo(self._client, result)
|
||||||
|
|
||||||
|
# def upload_from_url(self, url, **kwds):
|
||||||
|
|
||||||
def dynamic_url(self, photo, **kwds):
|
def dynamic_url(self, photo, **kwds):
|
||||||
""" Not yet implemented """
|
""" Not yet implemented """
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
|
@ -30,12 +30,24 @@ class Photo(TroveboxObject):
|
||||||
return self._client.photo.delete_source(self, **kwds)
|
return self._client.photo.delete_source(self, **kwds)
|
||||||
|
|
||||||
def replace(self, photo_file, **kwds):
|
def replace(self, photo_file, **kwds):
|
||||||
""" Not implemented yet """
|
"""
|
||||||
raise NotImplementedError()
|
Endpoint: /photo/<id>/replace.json
|
||||||
|
|
||||||
|
Uploads the specified photo file to replace this photo.
|
||||||
|
"""
|
||||||
|
result = self._client.photo.replace(self, photo_file, **kwds)
|
||||||
|
self._replace_fields(result.get_fields())
|
||||||
|
|
||||||
def replace_encoded(self, photo_file, **kwds):
|
def replace_encoded(self, photo_file, **kwds):
|
||||||
""" Not implemented yet """
|
"""
|
||||||
raise NotImplementedError()
|
Endpoint: /photo/<id>/replace.json
|
||||||
|
|
||||||
|
Base64-encodes and uploads the specified photo file to
|
||||||
|
replace this photo.
|
||||||
|
"""
|
||||||
|
result = self._client.photo.replace_encoded(self, photo_file,
|
||||||
|
**kwds)
|
||||||
|
self._replace_fields(result.get_fields())
|
||||||
|
|
||||||
def update(self, **kwds):
|
def update(self, **kwds):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue