Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ENG-5699] Framework for getting Addon Info from GV #10641

Merged
merged 8 commits into from
Jun 21, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
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
1 change: 1 addition & 0 deletions osf/external/gravy_valet/auth_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ def make_gravy_valet_hmac_headers(
request_method: str,
body: typing.Union[str, bytes] = '',
hmac_key: typing.Optional[str] = None,
additional_header: typing.Optional[dict] = None,
jwalz marked this conversation as resolved.
Show resolved Hide resolved
requesting_user: typing.Optional[OSFUser] = None,
requested_resource: typing.Optional[AbstractNode] = None
) -> dict:
Expand Down
87 changes: 87 additions & 0 deletions osf/external/gravy_valet/compat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import enum

import dataclasses

from addons.box.apps import BoxAddonAppConfig
from osf.models import Node, OSFUser
from . import request_helpers as gv_requests


class _LegacyConfigsForImps(enum.Enum):
"""Mapping from a GravyValet StorageImp name to the Addon config."""
box = BoxAddonAppConfig
aaxelb marked this conversation as resolved.
Show resolved Hide resolved


def make_fake_node_settings(gv_data, requested_resource, requesting_user):
service_wb_key = gv_data.get_nested_attribute(
attribute_path=('base_account', 'external_storage_service'),
attribute_name='wb_key'
aaxelb marked this conversation as resolved.
Show resolved Hide resolved
)
legacy_config = _LegacyConfigsForImps(service_wb_key)
return FakeNodeSettings(
config=FakeAddonConfig.from_legacy_config(legacy_config),
gv_id=gv_data.resource_id,
folder_id=gv_data.get_attribute('configured_root_id'),
configured_resource=requested_resource,
active_user=requesting_user,
)


@dataclasses.dataclass
class FakeAddonConfig:
jwalz marked this conversation as resolved.
Show resolved Hide resolved
short_name: str

@classmethod
def from_legacy_config(legacy_config):
return FakeAddonConfig(
short_name=legacy_config.short_name
)


@dataclasses.dataclass
class FakeNodeSettings:
config: FakeAddonConfig
folder_id: str
gv_id: str
configured_resource: Node
active_user: OSFUser
_storage_config: dict | None
_credentials: dict | None

@property
def short_name(self):
return self.config.short_name

def serialize_waterbutler_credentials(self):
if self._credentials is None:
self._fetch_wb_config()
return self._credentials

def serialize_waterbutler_settings(self):
# sufficient for box
return {
'folder': self.folder_id,
'service': self.short_name,
}

def _fetch_wb_config(self):
result = gv_requests.get_waterbutler_config(
gv_addon_pk=self.gv_id,
requested_resource=self.configured_resource,
requesting_user=self.active_user
)
self._credentials = result.get_attribute('credentials')
self._storage_config = result.get_attribute('settings')


@dataclasses.dataclass
class FakeUserSettings:
config: FakeAddonConfig
gv_id: str


def _get_service_name_from_gv_data(gv_data):
return gv_data.get_included_attribute('base_account.external_storage_service.wb_key')

def _get_configured_folder_from_gv_data(gv_data):
return gv_data.get_attribute('root_folder')
Loading
Loading