Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if include_link == gr_source.INCLUDE_LINK:
content += ' - %s' % obj['url']
ret = {
'id': 'fake id',
'url': 'http://fake/url',
'content': content,
'granary_message': 'granary message',
}
if verb == 'rsvp-yes':
ret['type'] = 'post'
images = self._images(obj)
if images:
ret['images'] = images
return gr_source.creation_result(ret)
if obj.get('verb') == 'like':
return gr_source.creation_result(
abort=True, error_plain='Cannot publish likes',
error_html='Cannot publish likes')
content = self._content_for_create(obj, ignore_formatting=ignore_formatting)
if include_link == gr_source.INCLUDE_LINK:
content += ' - %s' % obj['url']
content = 'preview of ' + content
images = self._images(obj)
if images:
content += ' with images %s' % ','.join(images)
return gr_source.creation_result(description=content)
""")
self.expect_requests_get('http://orig.domain/baz', """
<article>
A fantastically well-written article
</article>
""")
self.source.gr_source.create({
'verb': 'like',
'displayName': 'liked this',
'url': 'http://foo.com/bar',
'object': [{'url': 'http://orig.domain/baz'}],
'objectType': 'activity',
}, include_link=gr_source.INCLUDE_LINK, ignore_formatting=False). \
AndReturn(gr_source.creation_result({
'url': 'http://fake/url',
'id': 'http://fake/url',
'content': 'liked this',
}))
self.mox.ReplayAll()
self.assert_created('')
if preview:
media_previews = [
'<video src="%s" controls=""><a href="%s">%s</a></video>' %
(util.get_url(vid, key='stream'),
util.get_url(vid, key='stream'),
vid.get('displayName') or 'this video')
for vid in videos
] + [
'<img alt="%s" src="%s">' %
(util.get_url(img), img.get('displayName') or '')
for img in images
]
if media_previews:
preview_content += '<br><br>' + ' '.join(media_previews)
return source.creation_result(content=preview_content,
description=preview_description)
else:
ids = self.upload_media(images + videos)
if ids:
data['media_ids'] = ids
resp = self._post(API_STATUSES, json=data)
else:
return source.creation_result(
abort=False,
error_plain='Cannot publish type=%s, verb=%s to Mastodon' % (type, verb),
error_html='Cannot publish type=%s, verb=%s to Mastodon' % (type, verb))
if 'url' not in resp:
resp['url'] = base_url
def delete(self, id):
"""Deletes a tweet. The authenticated user must have authored it.
Args:
id: int or string, tweet id to delete
Returns: CreationResult, content is Twitter API response dict
"""
resp = self.urlopen(API_DELETE_TWEET, data=urllib.parse.urlencode({'id': id}))
return source.creation_result(resp)
return self._render_preview(result, include_link=include_link)
else:
result = self.source.gr_source.create(
obj, include_link=include_link, ignore_formatting=ignore_formatting)
self.entity.published = result.content
if not result.content:
return result # there was an error
if 'url' not in self.entity.published:
self.entity.published['url'] = obj.get('url')
self.entity.type = self.entity.published.get('type') or models.get_type(obj)
self.response.headers['Content-Type'] = 'application/json'
logging.info('Returning %s', json_dumps(self.entity.published, indent=2))
self.response.headers['Location'] = self.entity.published['url']
self.response.status = 201
return gr_source.creation_result(
json_dumps(self.entity.published, indent=2))
'type': 'comment',
'url': resp.get('permalink'),
})
return source.creation_result(resp)
if type == 'like':
if not base_id:
return source.creation_result(
abort=True,
error_plain='Could not find a photo to favorite.',
error_html='Could not find a photo to <a href="http://indiewebcamp.com/like">favorite</a>. '
'Check that your post has an <a href="http://indiewebcamp.com/like">like-of</a> '
'link to a Flickr photo or to an original post that publishes a '
'<a href="http://indiewebcamp.com/rel-syndication">rel-syndication</a> link to Flickr.')
if preview:
return source.creation_result(
description='favorite <a href="%s">this photo</a>.' % base_url)
# this method doesn't return any data
self.call_api_method('flickr.favorites.add', {
'photo_id': base_id,
})
# TODO should we canonicalize the base_url (e.g. removing trailing path
# info like "/in/contacts/")
return source.creation_result({
'type': 'like',
'url': '%s#favorited-by-%s' % (base_url, self.user_id()),
})
return source.creation_result(
abort=False,
error_plain='Cannot publish type=%s to Flickr.' % type,
logging.debug(
'instagram create request with type=%s, verb=%s, id=%s, url=%s',
type, verb, base_id, base_url)
if type == 'comment':
# most applications are not approved by instagram to create comments;
# better to give a useful error message than try and fail.
if not self.allow_comment_creation:
return source.creation_result(
abort=True,
error_plain='Cannot publish comments on Instagram',
error_html='<a href="http://instagram.com/developer/endpoints/comments/#post_media_comments">Cannot publish comments</a> on Instagram. The Instagram API technically supports creating comments, but <a href="http://stackoverflow.com/a/26889101/682648">anecdotal</a> <a href="http://stackoverflow.com/a/20229275/682648">evidence</a> suggests they are very selective about which applications they approve to do so.')
content = self._content_for_create(obj)
if preview:
return source.creation_result(
content=content,
description='<span class="verb">comment</span> on <a href="%s">'
'this post</a>:\n%s' % (base_url, self.embed_post(base_obj)))
self.urlopen(API_COMMENT_URL % base_id, data=urllib.parse.urlencode({
'access_token': self.access_token,
'text': content,
}))
# response will be empty even on success, see
# http://instagram.com/developer/endpoints/comments/#post_media_comments.
# TODO where can we get the comment id?
obj = self.comment_to_object({}, base_id, None)
return source.creation_result(obj)
elif type == 'activity' and verb == 'like':
if not base_url:
# 3. u-url if available
# 4. actual final fetched URL
if self.shortlink:
obj['url'] = self.shortlink
elif self.source_url() != self.fetched.url:
obj['url'] = self.source_url()
elif 'url' not in obj:
obj['url'] = self.fetched.url
logging.debug('Converted to ActivityStreams object: %s', json_dumps(obj, indent=2))
# posts and comments need content
obj_type = obj.get('objectType')
if obj_type in ('note', 'article', 'comment'):
if (not obj.get('content') and not obj.get('summary') and
not obj.get('displayName')):
return gr_source.creation_result(
abort=False,
error_plain='Could not find content in %s' % self.fetched.url,
error_html='Could not find <a href="http://microformats.org/">content</a> in %s' % self.fetched.url)
self.preprocess(obj)
include_link = self.include_link(item)
if not self.authorize():
return gr_source.creation_result(abort=True)
if self.PREVIEW:
result = self.source.gr_source.preview_create(
obj, include_link=include_link, ignore_formatting=ignore_formatting)
previewed = result.content or result.description
if self.entity.type == 'preview':