async def wrapped(self, **kwargs): file_ids = list() try: async for part in await self.request.multipart(): if not part.filename: kwargs[part.name] = (await part.read()).decode() else: grid_in = await fs.add(self.get_content_type(part.filename) ) try: chunk = await part.read_chunk() while chunk: _, chunk = await asyncio.gather( grid_in.write(chunk), part.read_chunk()) await grid_in.close() except: await grid_in.abort() raise file_id = await fs.link_by_md5(grid_in.md5, grid_in._id) if file_id: await fs.unlink(grid_in._id) else: file_id = grid_in._id file_ids.append(file_id) kwargs[part.name] = file_id return await coro(self, **kwargs) except: await asyncio.gather(*[fs.unlink(file_id) for file_id in file_ids]) # TODO(iceboy): call self.response.force_close() after aiohttp supports it. raise
async def wrapped(self, **kwargs): file_ids = list() try: async for part in await self.request.multipart(): if not part.filename: kwargs[part.name] = (await part.read()).decode() else: grid_in = await fs.add(self.get_content_type(part.filename)) try: chunk = await part.read_chunk() while chunk: _, chunk = await asyncio.gather(grid_in.write(chunk), part.read_chunk()) await grid_in.close() except: await grid_in.abort() raise file_id = await fs.link_by_md5(grid_in.md5, grid_in._id) if file_id: await fs.unlink(grid_in._id) else: file_id = grid_in._id file_ids.append(file_id) kwargs[part.name] = file_id return await coro(self, **kwargs) except: await asyncio.gather(*[fs.unlink(file_id) for file_id in file_ids]) # TODO(iceboy): call self.response.force_close() after aiohttp supports it. raise