def test_extract_image(self): entry_data = MagicMock() entry_data.top_image.src = 'http://foo.com/bar/image.jpg' expected_url = 'tests/data/downloaded.jpg' if os.path.isfile(expected_url): os.remove(expected_url) # Mock response for downloading. image_data = open('tests/data/image.jpg', 'rb').read() mock_response = BytesIO(image_data) mock_response.headers = { 'Accept-Ranges': 'bytes', 'Last-Modified': 'Wed, 05 Sep 2013 08:53:26 GMT', 'Content-Length': str(len(image_data)) } mock_urlopen = self.create_patch('urllib.request.urlopen', return_value=mock_response) image_url = feed.extract_image(entry_data, filename='downloaded.jpg', save_dir='tests/data/') self.assertEqual(image_url, expected_url) self.assertTrue(os.path.isfile(expected_url)) self.assertEqual(len(image_data), len(open(expected_url, 'rb').read()))
def open(self, url, data=None): self.requested.append(url) w = int(re.search(r'width=(\d+)', url, re.IGNORECASE).group(1)) h = int(re.search(r'height=(\d+)', url, re.IGNORECASE).group(1)) format = re.search(r'format=image(/|%2F)(\w+)', url, re.IGNORECASE).group(2) transparent = re.search(r'transparent=(\w+)', url, re.IGNORECASE) transparent = True if transparent and transparent.group(1).lower() == 'true' else False result = BytesIO() create_debug_img((int(w), int(h)), transparent).save(result, format=format) result.seek(0) result.headers = {'Content-type': 'image/'+format} return result
def open(self, url, data=None): self.requested.append(url) w = int(re.search(r"width=(\d+)", url, re.IGNORECASE).group(1)) h = int(re.search(r"height=(\d+)", url, re.IGNORECASE).group(1)) format = re.search(r"format=image(/|%2F)(\w+)", url, re.IGNORECASE).group(2) transparent = re.search(r"transparent=(\w+)", url, re.IGNORECASE) transparent = True if transparent and transparent.group(1).lower() == "true" else False result = BytesIO() create_debug_img((int(w), int(h)), transparent).save(result, format=format) result.seek(0) result.headers = {"Content-type": "image/" + format} return result
def mock_response(self, partial=False): """ Create a mock HTTP response to work with. Args: | partial (bool) -- True = only the 'remaining' bytes are sent, False = all the bytes are sent. """ if partial: # Start after the first 12 bytes. mock_response = BytesIO(self.data[12:]) else: mock_response = BytesIO(self.data) mock_response.headers = { 'Accept-Ranges': 'bytes', 'Last-Modified': 'Wed, 05 Sep 2013 08:53:26 GMT', 'Content-Length': str(self.content_length) } self.mock_urlopen.return_value = mock_response return mock_response
def test_save_from_url(self): # Mock out S3/Boto. key = MagicMock() self.create_patch('argos.util.storage.S3Connection', return_value=MagicMock()) self.create_patch('argos.util.storage.Key', return_value=key) # Mock response for downloading. image_data = open('tests/data/image.jpg', 'rb').read() mock_response = BytesIO(image_data) mock_response.headers = { 'Accept-Ranges': 'bytes', 'Last-Modified': 'Wed, 05 Sep 2013 08:53:26 GMT', 'Content-Length': str(len(image_data)) } mock_urlopen = self.create_patch('urllib.request.urlopen', return_value=mock_response) storage.save_from_url('http://someurl.com/image.jpg', 'downloaded.jpg') # Get the bytes data that the key was given. called_data = key.set_contents_from_file.call_args_list[0][0][0].getvalue() self.assertEqual(called_data, image_data) self.assertEqual(key.key, 'downloaded.jpg')
def open(self, url, data=None): self.requested.append(url) result = BytesIO(b'{}') result.seek(0) result.headers = {} return result