Skip to content

Commit

Permalink
Merge branch 'feature/gravy_valet_integration' into feature/gravy_val…
Browse files Browse the repository at this point in the history
…et_integration
  • Loading branch information
jwalz committed Jul 12, 2024
2 parents 595c26a + 9196ecb commit 8ca143f
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 13 deletions.
4 changes: 4 additions & 0 deletions addons/base/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,10 @@ def has_auth(self):
"""Whether the node has added credentials for this addon."""
return False

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

def to_json(self, user):
ret = super(BaseNodeSettings, self).to_json(user)
ret.update({
Expand Down
14 changes: 9 additions & 5 deletions api/nodes/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1541,18 +1541,21 @@ class NodeStorageProvidersList(JSONAPIBaseView, generics.ListAPIView, NodeMixin)

ordering = ('-id',)

def get_provider_item(self, storage_addon):
return NodeStorageProvider(self.get_node(), storage_addon.config.short_name, storage_addon)
def get_provider_item(self, storage_addon, node=None):
node = node or self.get_node()
return NodeStorageProvider(resource=node, provider_settings=storage_addon)

def get_queryset(self):
node = self.get_node()
return [
self.get_provider_item(addon)
self.get_provider_item(addon, node=node)
for addon
in self.get_node().get_addons()
in node.get_addons()
if addon.config.has_hgrid_files
and addon.configured
]


class NodeStorageProviderDetail(JSONAPIBaseView, generics.RetrieveAPIView, NodeMixin):
"""The documentation for this endpoint can be found [here](https://developer.osf.io/#operation/nodes_providers_read).
"""
Expand All @@ -1571,7 +1574,8 @@ class NodeStorageProviderDetail(JSONAPIBaseView, generics.RetrieveAPIView, NodeM
view_name = 'node-storage-provider-detail'

def get_object(self):
return NodeStorageProvider(self.get_node(), self.kwargs['provider'])
node = self.get_node()
return NodeStorageProvider(node, provider_settings=node.get_addon(self.kwargs['provider']))


class NodeLogList(JSONAPIBaseView, generics.ListAPIView, NodeMixin, ListFilterMixin):
Expand Down
35 changes: 27 additions & 8 deletions osf/external/gravy_valet/translations.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def make_ephemeral_user_settings(gv_account_data, requesting_user):
legacy_config = _LegacyConfigsForWBKey[service_wb_key].value
return EphemeralUserSettings(
config=EphemeralAddonConfig.from_legacy_config(legacy_config),
gv_id=gv_account_data.resource_id,
gv_data=gv_account_data,
active_user=requesting_user,
)

Expand All @@ -32,8 +32,7 @@ def make_ephemeral_node_settings(gv_addon_data, requested_resource, requesting_u
legacy_config = _LegacyConfigsForWBKey[service_wb_key].value
return EphemeralNodeSettings(
config=EphemeralAddonConfig.from_legacy_config(legacy_config),
gv_id=gv_addon_data.resource_id,
folder_id=gv_addon_data.get_attribute('root_folder'),
gv_data=gv_addon_data,
configured_resource=requested_resource,
active_user=requesting_user,
)
Expand Down Expand Up @@ -61,8 +60,7 @@ def from_legacy_config(cls, legacy_config):
class EphemeralNodeSettings:
'''Minimalist dataclass for storing/translating the actually used properties of NodeSettings.'''
config: EphemeralAddonConfig
folder_id: str
gv_id: str
gv_data: gv_requests.JSONAPIResultEntry

# These are needed in order to make further requests for credentials
configured_resource: type # Node
Expand All @@ -75,6 +73,21 @@ class EphemeralNodeSettings:
def short_name(self):
return self.config.short_name

@property
def gv_id(self):
return self.gv_data.resource_id

@property
def configured(self):
return self.gv_data.get_included_attribute(
include_path=['base_account'],
attribute_name='credentials_available'
)

@property
def folder_id(self):
return self.gv_data.get_attribute('root_folder')

def serialize_waterbutler_credentials(self):
# sufficient for most OAuth services, including Box
# TODO: Define per-service translation (and/or common schemes)
Expand All @@ -92,7 +105,7 @@ def serialize_waterbutler_settings(self):

def _fetch_wb_config(self):
result = gv_requests.get_waterbutler_config(
gv_addon_pk=self.gv_id,
gv_addon_pk=self.gv_data.resource_id,
requested_resource=self.configured_resource,
requesting_user=self.active_user
)
Expand All @@ -101,20 +114,26 @@ def _fetch_wb_config(self):
def create_waterbutler_log(self, *args, **kwargs):
pass

def save():
def save(self):
pass


@dataclasses.dataclass
class EphemeralUserSettings:
'''Minimalist dataclass for storing the actually used properties of UserSettings.'''
config: EphemeralAddonConfig
gv_id: str
gv_data: gv_requests.JSONAPIResultEntry
# This is needed to support making further requests
active_user: type # : OSFUser

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

@property
def gv_id(self):
return self.gv_data.resource_id

@property
def can_be_merged(self):
return True

0 comments on commit 8ca143f

Please sign in to comment.