From 0a8abccc78775b8346103a2397fdfe5db0442551 Mon Sep 17 00:00:00 2001 From: Noam Meltzer Date: Thu, 3 May 2018 00:17:54 +0300 Subject: [PATCH] InputFile: Fix proper naming of file when reading from subprocess.PIPE (#1079) --- telegram/files/inputfile.py | 4 +++- tests/test_inputfile.py | 43 +++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 tests/test_inputfile.py diff --git a/telegram/files/inputfile.py b/telegram/files/inputfile.py index a82cae699..d43e0fccf 100644 --- a/telegram/files/inputfile.py +++ b/telegram/files/inputfile.py @@ -70,7 +70,9 @@ class InputFile(object): self.input_file_content = self.input_file.read() if 'filename' in data: self.filename = self.data.pop('filename') - elif hasattr(self.input_file, 'name'): + elif (hasattr(self.input_file, 'name') and + not isinstance(self.input_file.name, int) and # py3 + self.input_file.name != ''): # py2 # on py2.7, pylint fails to understand this properly # pylint: disable=E1101 self.filename = os.path.basename(self.input_file.name) diff --git a/tests/test_inputfile.py b/tests/test_inputfile.py new file mode 100644 index 000000000..cdcf49726 --- /dev/null +++ b/tests/test_inputfile.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# A library that provides a Python interface to the Telegram Bot API +# Copyright (C) 2015-2018 +# Leandro Toledo de Souza +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser Public License for more details. +# +# You should have received a copy of the GNU Lesser Public License +# along with this program. If not, see [http://www.gnu.org/licenses/]. +import os +import subprocess +import sys + +from telegram import InputFile + + +class TestInputFile(object): + png = os.path.join('tests', 'data', 'game.png') + + def test_subprocess_pipe(self): + if sys.platform == 'win32': + cmd = ['type', self.png] + else: + cmd = ['cat', self.png] + + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=(sys.platform == 'win32')) + in_file = InputFile({'photo': proc.stdout}) + + assert in_file.input_file_content == open(self.png, 'rb').read() + assert in_file.mimetype == 'image/png' + assert in_file.filename == 'image.png' + + proc.kill()