Skip to content
This repository has been archived by the owner on Apr 9, 2023. It is now read-only.

Commit

Permalink
Tus upload and apply headers in the correct order
Browse files Browse the repository at this point in the history
  • Loading branch information
Ramon Navarro Bosch committed Jan 27, 2017
1 parent b9b29a2 commit d76afaf
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 5 deletions.
5 changes: 5 additions & 0 deletions src/plone.server/plone/server/api/content.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ async def __call__(self):
absolute_url = queryMultiAdapter((obj, self.request), IAbsoluteURL)

headers = {
'Access-Control-Expose-Headers': 'Location',
'Location': absolute_url()
}

Expand Down Expand Up @@ -283,4 +284,8 @@ async def __call__(self):
"""Apply CORS on the OPTIONS view."""
headers = await self.preflight()
resp = await self.render()
if isinstance(resp, Response):
headers.update(resp.headers)
resp.headers = headers
return resp
return Response(response=resp, headers=headers, status=200)
5 changes: 3 additions & 2 deletions src/plone.server/plone/server/api/files.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from plone.server.interfaces import IFileManager
from plone.server.interfaces import IResource
from plone.server.interfaces import IStaticFile
from plone.server.api.content import DefaultOPTIONS
from zope.component import getMultiAdapter

import aiohttp
Expand Down Expand Up @@ -96,9 +97,9 @@ async def __call__(self):

@configure.service(context=IResource, method='OPTIONS', permission='plone.AccessPreflight',
name='@tusupload')
class TusOptionsFile(UploadFile):
class TusOptionsFile(DefaultOPTIONS, UploadFile):

async def __call__(self):
async def render(self):
# We need to get the upload as async IO and look for an adapter
# for the field to save there by chunks
adapter = getMultiAdapter(
Expand Down
8 changes: 5 additions & 3 deletions src/plone.server/plone/server/traversal.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,10 +210,10 @@ def __init__(self, resource, request, view, rendered):
async def handler(self, request):
"""Main handler function for aiohttp."""
if request.method in WRITING_VERBS:
request._db_write_enabled = True
txn = request.conn.transaction_manager.begin(request)
try:
async with locked(self.resource):
request._db_write_enabled = True
txn = request.conn.transaction_manager.begin(request)
# We try to avoid collisions on the same instance of
# plone.server
view_result = await self.view()
Expand Down Expand Up @@ -259,7 +259,9 @@ async def handler(self, request):
view_result = Response({})

# Apply cors if its needed
view_result.headers.update(apply_cors(request))
cors_headers = apply_cors(request)
cors_headers.update(view_result.headers)
view_result.headers = cors_headers

return await self.rendered(view_result)

Expand Down

0 comments on commit d76afaf

Please sign in to comment.