if post.image_url:
upload_url = self.vk_api.photos.getWallUploadServer(group_id=self.group_id)['upload_url']
try:
r = requests.get(post.image_url)
except vk.exceptions.VkAPIError:
time.sleep(1)
r = requests.get(post.image_url)
image_data = r.content
r = requests.post(upload_url, files={'photo': (post.image_name, image_data) }).json()
d = {}
d['server'] = r['server']
d['photo'] = r['photo']
d['hash'] = r['hash']
d['group_id'] = self.group_id
photo_id = self.vk_api.photos.saveWallPhoto(**d)[0]['id']
vk_message = '%s (%s)\n%s\n\n%s\nЧитать дальше: %s' % (post.title, post.author, post.url, post.abstract, post.url)
vk_params = { 'message': vk_message, 'from_group': 1, 'owner_id': -self.group_id }
if post.image_url:
vk_params['attachments'] = '%s,%s' % (photo_id, post.url)
vk_params['copyright'] = post.url
post_id = self.vk_api.wall.post(**vk_params)['post_id']
return post_id
Что касается использования if, то мне самому нравится так писать, но обективно на самом деле правильно явно указывать, что имеешь в виду. Потому что приведение переменной с неизвестным содержимым к булевому значению может иметь непредсказуемые последствия.
Например, такие конструкции:
x=""
if x:
x=0
if x:
x=[]
if x:
- все они реагируют на переменную одинаково. В то время как содержимое совершенно неодинаково. Как почему-то могут быть приведены к False сложные структуры данных из чужих классов, как это не вполне очевидное поведение может измениться в будущих версиях Python - одному Россуму известно.