Add upload/replace from URL.
This commit is contained in:
parent
f1a9018918
commit
35b9a4d044
4 changed files with 109 additions and 10 deletions
|
@ -101,6 +101,23 @@ class TestPhotos(test_base.TestBase):
|
||||||
self.photos = self.client.photos.list()
|
self.photos = self.client.photos.list()
|
||||||
self.assertEqual(len(self.photos), 3)
|
self.assertEqual(len(self.photos), 3)
|
||||||
|
|
||||||
|
def test_upload_from_url(self):
|
||||||
|
""" Ensure that a photo can be imported from a URL """
|
||||||
|
# Make an existing photo public
|
||||||
|
self.photos[0].update(permission=True)
|
||||||
|
# Upload a duplicate of an existing photo
|
||||||
|
self.client.photo.upload_from_url(self.photos[0].pathDownload,
|
||||||
|
allowDuplicate=True)
|
||||||
|
# Check there are now four photos
|
||||||
|
photos = self.client.photos.list()
|
||||||
|
self.assertEqual(len(photos), 4)
|
||||||
|
# Check that the new one is a duplicate
|
||||||
|
self.assertEqual(photos[0].hash, photos[1].hash)
|
||||||
|
|
||||||
|
# Put the environment back the way we found it
|
||||||
|
photos[1].delete()
|
||||||
|
self.photos[0].update(permission=False)
|
||||||
|
|
||||||
def test_update(self):
|
def test_update(self):
|
||||||
""" Update a photo by editing the title """
|
""" Update a photo by editing the title """
|
||||||
title = "\xfcmlaut" # umlauted umlaut
|
title = "\xfcmlaut" # umlauted umlaut
|
||||||
|
@ -178,16 +195,11 @@ class TestPhotos(test_base.TestBase):
|
||||||
allowDuplicate=True)
|
allowDuplicate=True)
|
||||||
# Check that its new hash is correct
|
# Check that its new hash is correct
|
||||||
self.assertEqual(self.photos[0].hash, self.photos[1].hash)
|
self.assertEqual(self.photos[0].hash, self.photos[1].hash)
|
||||||
# Put it back
|
# Put it back using base64 encoding
|
||||||
self.photos[0].replace("tests/data/test_photo1.jpg",
|
self.photos[0].replace_encoded("tests/data/test_photo1.jpg",
|
||||||
allowDuplicate=True)
|
allowDuplicate=True)
|
||||||
self.assertEqual(self.photos[0].hash, original_hash)
|
self.assertEqual(self.photos[0].hash, original_hash)
|
||||||
|
|
||||||
def test_replace_encoded(self):
|
|
||||||
""" If photo.replace_encoded gets implemented, write a test! """
|
|
||||||
with self.assertRaises(NotImplementedError):
|
|
||||||
self.client.photo.replace_encoded(None, None)
|
|
||||||
|
|
||||||
def test_dynamic_url(self):
|
def test_dynamic_url(self):
|
||||||
""" If photo.dynamic_url gets implemented, write a test! """
|
""" If photo.dynamic_url gets implemented, write a test! """
|
||||||
with self.assertRaises(NotImplementedError):
|
with self.assertRaises(NotImplementedError):
|
||||||
|
|
|
@ -233,6 +233,7 @@ class TestPhotoReplace(TestPhotos):
|
||||||
self.assertEqual(self.test_photos[1].get_fields(),
|
self.assertEqual(self.test_photos[1].get_fields(),
|
||||||
self.test_photos_dict[0])
|
self.test_photos_dict[0])
|
||||||
|
|
||||||
|
class TestPhotoReplaceEncoded(TestPhotos):
|
||||||
@mock.patch.object(trovebox.Trovebox, 'post')
|
@mock.patch.object(trovebox.Trovebox, 'post')
|
||||||
def test_photo_replace_encoded(self, mock_post):
|
def test_photo_replace_encoded(self, mock_post):
|
||||||
"""
|
"""
|
||||||
|
@ -282,6 +283,50 @@ class TestPhotoReplace(TestPhotos):
|
||||||
self.assertEqual(self.test_photos[1].get_fields(),
|
self.assertEqual(self.test_photos[1].get_fields(),
|
||||||
self.test_photos_dict[0])
|
self.test_photos_dict[0])
|
||||||
|
|
||||||
|
class TestPhotoReplaceFromUrl(TestPhotos):
|
||||||
|
@mock.patch.object(trovebox.Trovebox, 'post')
|
||||||
|
def test_photo_replace_from_url(self, mock_post):
|
||||||
|
"""
|
||||||
|
Check that a photo can be imported from a url to
|
||||||
|
replace an existing photo.
|
||||||
|
"""
|
||||||
|
mock_post.return_value = self._return_value(self.test_photos_dict[0])
|
||||||
|
result = self.client.photo.replace_from_url(self.test_photos[1],
|
||||||
|
"test_url", title="Test")
|
||||||
|
mock_post.assert_called_with("/photo/%s/replace.json"
|
||||||
|
% self.test_photos[1].id,
|
||||||
|
photo="test_url", title="Test")
|
||||||
|
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
|
||||||
|
|
||||||
|
@mock.patch.object(trovebox.Trovebox, 'post')
|
||||||
|
def test_photo_id_replace_from_url(self, mock_post):
|
||||||
|
"""
|
||||||
|
Check that a photo can be imported from a url to
|
||||||
|
replace an existing photo using its ID.
|
||||||
|
"""
|
||||||
|
mock_post.return_value = self._return_value(self.test_photos_dict[0])
|
||||||
|
result = self.client.photo.replace_from_url(self.test_photos[1].id,
|
||||||
|
"test_url", title="Test")
|
||||||
|
mock_post.assert_called_with("/photo/%s/replace.json"
|
||||||
|
% self.test_photos[1].id,
|
||||||
|
photo="test_url", title="Test")
|
||||||
|
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
|
||||||
|
|
||||||
|
@mock.patch.object(trovebox.Trovebox, 'post')
|
||||||
|
def test_photo_object_replace_from_url(self, mock_post):
|
||||||
|
"""
|
||||||
|
Check that a photo can be imported from a url to
|
||||||
|
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_from_url("test_url", title="Test")
|
||||||
|
mock_post.assert_called_with("/photo/%s/replace.json"
|
||||||
|
% photo_id,
|
||||||
|
photo="test_url", 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')
|
||||||
def test_photo_update(self, mock_post):
|
def test_photo_update(self, mock_post):
|
||||||
|
@ -357,6 +402,7 @@ class TestPhotoUpload(TestPhotos):
|
||||||
self.assertIn("photo", files)
|
self.assertIn("photo", files)
|
||||||
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
|
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
|
||||||
|
|
||||||
|
class TestPhotoUploadEncoded(TestPhotos):
|
||||||
@mock.patch.object(trovebox.Trovebox, 'post')
|
@mock.patch.object(trovebox.Trovebox, 'post')
|
||||||
def test_photo_upload_encoded(self, mock_post):
|
def test_photo_upload_encoded(self, mock_post):
|
||||||
"""Check that a photo can be uploaded using Base64 encoding"""
|
"""Check that a photo can be uploaded using Base64 encoding"""
|
||||||
|
@ -368,6 +414,18 @@ class TestPhotoUpload(TestPhotos):
|
||||||
photo=encoded_file, title="Test")
|
photo=encoded_file, title="Test")
|
||||||
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
|
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
|
||||||
|
|
||||||
|
class TestPhotoUploadFromUrl(TestPhotos):
|
||||||
|
@mock.patch.object(trovebox.Trovebox, 'post')
|
||||||
|
def test_photo_upload_from_url(self, mock_post):
|
||||||
|
"""
|
||||||
|
Check that a photo can be imported from a url.
|
||||||
|
"""
|
||||||
|
mock_post.return_value = self._return_value(self.test_photos_dict[0])
|
||||||
|
result = self.client.photo.upload_from_url("test_url", title="Test")
|
||||||
|
mock_post.assert_called_with("/photo/upload.json",
|
||||||
|
photo="test_url", title="Test")
|
||||||
|
self.assertEqual(result.get_fields(), self.test_photos_dict[0])
|
||||||
|
|
||||||
class TestPhotoDynamicUrl(TestPhotos):
|
class TestPhotoDynamicUrl(TestPhotos):
|
||||||
@mock.patch.object(trovebox.Trovebox, 'get')
|
@mock.patch.object(trovebox.Trovebox, 'get')
|
||||||
def test_photo_dynamic_url(self, _):
|
def test_photo_dynamic_url(self, _):
|
||||||
|
|
|
@ -110,7 +110,19 @@ class ApiPhoto(ApiBase):
|
||||||
**kwds)["result"]
|
**kwds)["result"]
|
||||||
return Photo(self._client, result)
|
return Photo(self._client, result)
|
||||||
|
|
||||||
# def replace_from_url(self, url, **kwds):
|
def replace_from_url(self, photo, url, **kwds):
|
||||||
|
"""
|
||||||
|
Endpoint: /photo/<id>replace.json
|
||||||
|
|
||||||
|
Import a photo from the specified URL to replace an existing
|
||||||
|
photo.
|
||||||
|
"""
|
||||||
|
result = self._client.post("/photo/%s/replace.json" %
|
||||||
|
self._extract_id(photo),
|
||||||
|
photo=url,
|
||||||
|
**kwds)["result"]
|
||||||
|
return Photo(self._client, result)
|
||||||
|
|
||||||
|
|
||||||
def update(self, photo, **kwds):
|
def update(self, photo, **kwds):
|
||||||
"""
|
"""
|
||||||
|
@ -163,7 +175,15 @@ 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 upload_from_url(self, url, **kwds):
|
||||||
|
"""
|
||||||
|
Endpoint: /photo/upload.json
|
||||||
|
|
||||||
|
Import a photo from the specified URL
|
||||||
|
"""
|
||||||
|
result = self._client.post("/photo/upload.json", photo=url,
|
||||||
|
**kwds)["result"]
|
||||||
|
return Photo(self._client, result)
|
||||||
|
|
||||||
def dynamic_url(self, photo, **kwds):
|
def dynamic_url(self, photo, **kwds):
|
||||||
""" Not yet implemented """
|
""" Not yet implemented """
|
||||||
|
|
|
@ -49,6 +49,15 @@ class Photo(TroveboxObject):
|
||||||
**kwds)
|
**kwds)
|
||||||
self._replace_fields(result.get_fields())
|
self._replace_fields(result.get_fields())
|
||||||
|
|
||||||
|
def replace_from_url(self, url, **kwds):
|
||||||
|
"""
|
||||||
|
Endpoint: /photo/<id>replace.json
|
||||||
|
|
||||||
|
Import a photo from the specified URL to replace this photo.
|
||||||
|
"""
|
||||||
|
result = self._client.photo.replace_from_url(self, url, **kwds)
|
||||||
|
self._replace_fields(result.get_fields())
|
||||||
|
|
||||||
def update(self, **kwds):
|
def update(self, **kwds):
|
||||||
"""
|
"""
|
||||||
Endpoint: /photo/<id>/update.json
|
Endpoint: /photo/<id>/update.json
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue