Skip to content

Instantly share code, notes, and snippets.

@mitgr81
Forked from DazWorrall/Output
Last active October 6, 2017 07:15
Show Gist options
  • Save mitgr81/8355834 to your computer and use it in GitHub Desktop.
Save mitgr81/8355834 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
from flask import Flask, Request, request
CONTENTS = 'my file contents'
try:
from StringIO import StringIO
except ImportError:
from io import BytesIO as StringIO
CONTENTS = CONTENTS.encode('utf-8')
import unittest
RESULT = False
class TestFileFail(unittest.TestCase):
def test_1(self):
class FileObj(StringIO):
def close(self):
print('in file close')
global RESULT
RESULT = True
class MyRequest(Request):
def _get_file_stream(*args, **kwargs):
return FileObj()
app = Flask(__name__)
app.debug = True
app.request_class = MyRequest
@app.route("/upload", methods=['POST'])
def upload():
f = request.files['file']
print('in upload handler')
self.assertIsInstance(
f.stream,
FileObj,
)
# Note I've monkeypatched werkzeug.datastructures.FileStorage
# so it wont squash exceptions
f.close()
#f.stream.close()
return 'ok'
client = app.test_client()
resp = client.post(
'/upload',
data = {
'file': (StringIO(CONTENTS), 'hello world.txt'),
}
)
self.assertEqual(
'ok',
resp.get_data(as_text=True),
)
global RESULT
self.assertTrue(RESULT)
def test_2(self):
pass
if __name__ == '__main__':
unittest.main()
in upload handler
in file close
..
----------------------------------------------------------------------
Ran 2 tests in 0.021s
OK
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment