Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion osf/models/archive.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ def _set_target(self, addon_short_name):

def set_targets(self):
addons = []
for addon in [self.src_node.get_addon(name)
for addon in [self.src_node.get_addon(name, cached=False)
for name in settings.ADDONS_ARCHIVABLE
if settings.ADDONS_ARCHIVABLE[name] != 'none']:
if not addon or not isinstance(addon, BaseStorageAddon) or not addon.complete:
Expand Down
4 changes: 2 additions & 2 deletions osf/models/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -554,14 +554,14 @@ def get_or_add_addon(self, name, *args, **kwargs):
return addon
return self.add_addon(name, *args, **kwargs)

def get_addon(self, name, is_deleted=False, auth=None):
def get_addon(self, name, is_deleted=False, auth=None, cached=True):
# Avoid test-breakages by avoiding early access to the request context
if name not in self.OSF_HOSTED_ADDONS:
request, user_id = get_request_and_user_id()
if not user_id and auth and auth.user:
user_id = auth.user._id
if flag_is_active(request, features.ENABLE_GV):
return self._get_addon_from_gv(gv_pk=name, requesting_user_id=user_id, auth=auth)
return self._get_addon_from_gv(gv_pk=name, requesting_user_id=user_id, auth=auth, cached=cached)

try:
settings_model = self._settings_model(name)
Expand Down
31 changes: 19 additions & 12 deletions osf/models/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -2447,21 +2447,28 @@ def _remove_from_associated_collections(self, auth=None, force=False):
force=True
)

def _get_addon_from_gv(self, gv_pk, requesting_user_id, auth=None):
def _get_addons_from_gv_without_caching(self, gv_pk, requesting_user_id, auth=None):
requesting_user = OSFUser.load(requesting_user_id)
services = gv_translations.get_external_services(requesting_user)
for service in services:
if service.short_name == gv_pk:
break
else:
return []

return self._get_addons_from_gv(requesting_user_id, service.type, auth=auth)

def _get_addon_from_gv(self, gv_pk, requesting_user_id, auth=None, cached=True):
request = get_current_request()
# This is to avoid making multiple requests to GV
# within the lifespan of one request on the OSF side
try:
gv_addons = request.gv_addons
except AttributeError:
requesting_user = OSFUser.load(requesting_user_id)
services = gv_translations.get_external_services(requesting_user)
for service in services:
if service.short_name == gv_pk:
break
else:
return None
gv_addons = request.gv_addons = self._get_addons_from_gv(requesting_user_id, service.type, auth=auth)
if cached:
try:
gv_addons = request.gv_addons
except AttributeError:
gv_addons = request.gv_addons = self._get_addons_from_gv_without_caching(gv_pk, requesting_user_id, auth=auth)
else:
gv_addons = self._get_addons_from_gv_without_caching(gv_pk, requesting_user_id, auth=auth)

for item in gv_addons:
if item.short_name == gv_pk:
Expand Down
Loading