class Issue36RegressionTests(MainTests): """ This testcase addresses #36 in django-piston where request.FILES is passed empty to the handler if the request.method is PUT. """ def fetch_request(self, sender, request, *args, **kwargs): self.request = request def setUp(self): super(self.__class__, self).setUp() self.data = TestModel() self.data.save() # Register to the WSGIRequest signals to get the latest generated # request object. signals.entry_request_started.connect(self.fetch_request) def tearDown(self): super(self.__class__, self).tearDown() self.data.delete() signals.entry_request_started.disconnect(self.fetch_request) def test_simple(self): # First try it with POST to see if it works there if True: fp = open(__file__, 'r') try: response = self.client.post( '/api/entries.xml', {'file': fp}, HTTP_AUTHORIZATION=self.auth_string) self.assertEquals( 1, len(self.request.FILES), 'request.FILES on POST is empty when it should contain 1 file' ) finally: fp.close() if not hasattr(self.client, 'put'): import warnings warnings.warn( 'Issue36RegressionTest partially requires Django 1.1 or newer. Skipped.' ) return # ... and then with PUT fp = open(__file__, 'r') try: response = self.client.put('/api/entry-%d.xml' % self.data.pk, {'file': fp}, HTTP_AUTHORIZATION=self.auth_string) self.assertEquals( 1, len(self.request.FILES), 'request.FILES on PUT is empty when it should contain 1 file') finally: fp.close()
class Issue36RegressionTests(MainTests): """ This testcase addresses #36 in django-piston where request.FILES is passed empty to the handler if the request.method is PUT. """ def fetch_request(self, sender, request, *args, **kwargs): self.request = request def setUp(self): super(self.__class__, self).setUp() self.data = TestModel() self.data.save() # Register to the WSGIRequest signals to get the latest generated # request object. signals.entry_request_started.connect(self.fetch_request) def tearDown(self): super(self.__class__, self).tearDown() self.data.delete() signals.entry_request_started.disconnect(self.fetch_request) def test_simple(self): # First try it with POST to see if it works there if True: fp = open(__file__, "r") try: response = self.client.post("/api/entries.xml", {"file": fp}, HTTP_AUTHORIZATION=self.auth_string) self.assertEquals( 1, len(self.request.FILES), "request.FILES on POST is empty when it should contain 1 file" ) finally: fp.close() if not hasattr(self.client, "put"): import warnings warnings.warn("Issue36RegressionTest partially requires Django 1.1 or newer. Skipped.") return # ... and then with PUT fp = open(__file__, "r") try: response = self.client.put( "/api/entry-%d.xml" % self.data.pk, {"file": fp}, HTTP_AUTHORIZATION=self.auth_string ) self.assertEquals(1, len(self.request.FILES), "request.FILES on PUT is empty when it should contain 1 file") finally: fp.close()