Skip to content

Commit

Permalink
Merge branch 'gv-files-provider-waffle' of https://github.com/Johneto…
Browse files Browse the repository at this point in the history
…rdoff/osf.io into gv-files-provider-waffle

* 'gv-files-provider-waffle' of https://github.com/Johnetordoff/osf.io:
  Fix get auth number two (CenterForOpenScience#10614)
  • Loading branch information
John Tordoff committed May 16, 2024
2 parents 48da8ab + 016fed7 commit 1b668ff
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 38 deletions.
1 change: 0 additions & 1 deletion addons/base/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@ def __init__(self, resource, config_id, auth):
self.external_storage_service_data = self.get_external_service_addon_data(auth)
self.addon_name = self.external_storage_service_data['data']['attributes']['name']
self.legacy_config = settings.ADDONS_AVAILABLE_DICT[self.addon_name]
>>>>>>> 4425024fe01577420ebc4c03b0b4f494754759ab
self.resource = resource
self.auth = auth
self.FOLDER_SELECTED = self.legacy_config.FOLDER_SELECTED
Expand Down
57 changes: 22 additions & 35 deletions addons/base/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -302,40 +302,25 @@ def get_authenticated_resource(resource_id):
return resource


def get_file_version_from_wb(waterbutler_data: dict) -> FileVersion:
path = waterbutler_data.get('path')
if waterbutler_data['provider'] != 'osfstorage' or not path:
return

path = waterbutler_data.get('path')
file_id = path.strip('/')
version = waterbutler_data.get('version')
if version:
try:
return FileVersion.objects.filter(
basefilenode___id=file_id,
identifier=int(version)
).select_related('region').get()
except FileVersion.DoesNotExist:
raise HTTPError(http_status.HTTP_400_BAD_REQUEST)
else:
try:
return BaseFileNode.active.get(
_id=file_id,
).versions.order_by(
'-created'
).first()
except BaseFileNode.DoesNotExist:
raise HTTPError(http_status.HTTP_400_BAD_REQUEST)

def _get_osfstorage_file_version(file_node: OsfStorageFileNode, version_string: str = None) -> FileVersion:
if not (file_node and file_node.is_file):
return None

def get_file_node_from_wb(waterbutler_data: dict) -> FileVersion:
path = waterbutler_data.get('path')
file_id = path.strip('/')
try:
return BaseFileNode.active.get(_id=file_id)
except BaseFileNode.DoesNotExist:
raise HTTPError(http_status.HTTP_400_BAD_REQUEST)
return FileVersion.objects.select_related('region').get(
basefilenode=file_node,
identifier=version_string or str(file_node.versions.count())
)
except FileVersion.DoesNotExist:
raise HTTPError(http_status.HTTP_400_BAD_REQUEST, 'Requested File Version unavailable')


def _get_osfstorage_file_node(file_path: str) -> OsfStorageFileNode:
if not file_path:
return None

file_id = file_path.strip('/')
return OsfStorageFileNode.load(file_id)


def authenticate_user_if_needed(auth, waterbutler_data, resource):
Expand Down Expand Up @@ -406,7 +391,11 @@ def get_auth(auth, **kwargs):
provider = None

# Get the file version from Waterbutler data, which is used for file-specific actions
fileversion = get_file_version_from_wb(waterbutler_data)
file_node = None
fileversion = None
if waterbutler_data['provider'] == 'osfstorage':
file_node = _get_osfstorage_file_node(waterbutler_data.get('path'))
fileversion = _get_osfstorage_file_version(file_node, waterbutler_data.get('version'))

# Fetch Waterbutler credentials and settings for the resource
credentials, waterbutler_settings = get_waterbutler_data(
Expand All @@ -419,10 +408,8 @@ def get_auth(auth, **kwargs):
if fileversion:
# Trigger any file-specific signals based on the action taken (e.g., file viewed, downloaded)
if action == 'render':
file_node = get_file_node_from_wb(waterbutler_data)
file_signals.file_viewed.send(auth=auth, fileversion=fileversion, file_node=file_node)
elif action == 'download':
file_node = get_file_node_from_wb(waterbutler_data)
file_signals.file_downloaded.send(auth=auth, fileversion=fileversion, file_node=file_node)

# Construct the response payload including the JWT
Expand Down
1 change: 0 additions & 1 deletion api/nodes/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ def get_file_object(target, path, provider, request):
obj = get_object_or_error(model, Q(target_object_id=target.pk, target_content_type=content_type, _id=path.strip('/')), request)
return obj

from osf.utils.requests import get_current_request
addon = target.get_addon(provider, request=request)
if isinstance(target, AbstractNode) and not addon or not addon.configured:
raise NotFound(f'The {provider} provider is not configured for this project.')
Expand Down
2 changes: 1 addition & 1 deletion api_tests/providers/test_files_with_gv.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ def file_url(self, node, provider_gv_id, file):
'version': 'v2',
'node_id': node._id,
'provider': f'{provider_gv_id}/',
'path': f'{file._id}/'
'path': f'{file._id}/'
}
)

Expand Down

0 comments on commit 1b668ff

Please sign in to comment.