def test_upload_attachment(client, monkeypatch): mock_post = mock.Mock() mock_post.return_value.status_code = 200 mock_post.return_value.json.return_value = { "attachment_id": "12345", } monkeypatch.setattr('requests.Session.post', mock_post) attachment = attachments.Image(url='https://some-image.com/image.jpg') res = client.upload_attachment(attachment) assert res == {"attachment_id": "12345"} assert mock_post.call_count == 1 mock_post.assert_called_with( 'https://graph.facebook.com/v2.12/me/message_attachments', params={ 'access_token': 12345678, }, json={ 'message': { 'attachment': { 'type': 'image', 'payload': { 'url': 'https://some-image.com/image.jpg' } } } }, timeout=None)
def test_quick_replies(self): qr = quick_replies.QuickReply(title='QR', payload='QR payload') qrs = quick_replies.QuickReplies(quick_replies=[qr] * 2) res = attachments.Image(url='http://facebook.com/image.jpg', quick_replies=qrs) expected = { 'attachment': { 'type': 'image', 'payload': { 'url': 'http://facebook.com/image.jpg' }, }, 'quick_replies': [ { 'content_type': 'text', 'title': 'QR', 'payload': 'QR payload' }, { 'content_type': 'text', 'title': 'QR', 'payload': 'QR payload' }, ], } assert expected == res.to_dict()
def test_upload_no_quick_replies(client): replies = quick_replies.QuickReplies( [quick_replies.QuickReply(title='hello', payload='hello')]) attachment = attachments.Image(url='https://some-image.com/image.jpg', quick_replies=replies) with pytest.raises(ValueError): client.upload_attachment(attachment)
def test_media_template(self): btn = elements.Button(button_type='web_url', title='Web button', url='http://facebook.com') attachment = attachments.Image(attachment_id='12345') res = templates.MediaTemplate(attachment, buttons=[btn]) expected = { 'attachment': { 'type': 'template', 'payload': { 'template_type': 'media', 'elements': [{ 'media_type': 'image', 'attachment_id': '12345', 'buttons': [{ 'type': 'web_url', 'title': 'Web button', 'url': 'http://facebook.com' }] }] } } } assert expected == res.to_dict()
def handleAttachments(messaging_event): log("Inside Attachments") # Location, image (stickers, emojis, gifs, add photo, add image files, take a picture, like sign), add other type of files for file in messaging_event["message"]["attachments"]: attachment = {} if file["type"] == "location": pass elif file["type"] == "image": image_url = file['payload']['url'] save_message( str(messaging_event["sender"]["id"]), str(image_url), datetime.fromtimestamp(messaging_event['timestamp'] / 1000).astimezone(pytz.timezone('UTC'))) result = algorithmia.colorit( image_url=image_url, image_path=True, user_id=messaging_event["sender"]["id"]) if isinstance(result, str): if result == "It's not a black & white image. Provide a black & white one.": log(result) attachment = { "text": "It is a colorful image! Provide a grayscale one." } else: attachment_id = upload_image(messaging_event['url'] + result) attachment = attachments.Image(attachment_id=attachment_id) res = templates.MediaTemplate(attachment) attachment = res.to_dict() else: pass return attachment
def upload_image(url): log(url) attachment = attachments.Image(url=url, is_reusable=True) client = MessengerClient(page_access_token=os.environ['PAGE_ACCESS_TOKEN']) res = client.upload_attachment(attachment) log(res) return res['attachment_id']
def test_image(self): res = attachments.Image(url='http://facebook.com/image.jpg') expected = { 'attachment': { 'type': 'image', 'payload': { 'url': 'http://facebook.com/image.jpg' } } } assert expected == res.to_dict()
def test_attachment_id(self): res = attachments.Image(attachment_id=12345) expected = { 'attachment': { 'type': 'image', 'payload': { 'attachment_id': 12345, } } } assert expected == res.to_dict()
def test_media_template_no_buttons(self): attachment = attachments.Image(attachment_id='12345') res = templates.MediaTemplate(attachment) expected = { 'attachment': { 'type': 'template', 'payload': { 'template_type': 'media', 'elements': [{ 'media_type': 'image', 'attachment_id': '12345', }] } } } assert expected == res.to_dict()
def send_image_url(self, recipient_id: Text, image_url: Text) -> None: """Sends an image. Default will just post the url as a string.""" self.send(recipient_id, attachments.Image(url=image_url))
def test_quick_replies_throws_error(self): with pytest.raises(ValueError) as err: attachments.Image(url='http://facebook.com/image.jpg', quick_replies='error') assert str( err.value) == 'quick_replies must be an instance of QuickReplies.'
def test_upload_url_required(client): attachment = attachments.Image(attachment_id='12345') with pytest.raises(ValueError): client.upload_attachment(attachment)