Skip to content

Commit 664ec76

Browse files
authored
Merge pull request #11255 from anqiuy/feature/azure-blob-storage
Implement BaseFileNode for azure blob storage
2 parents f7df09c + e7f24b7 commit 664ec76

File tree

5 files changed

+72
-1
lines changed

5 files changed

+72
-1
lines changed

addons.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
"twofactor",
1818
"wiki",
1919
"googledrive",
20-
"bitbucket"
20+
"bitbucket",
21+
"azureblobstorage"
2122
],
2223
"addons_default": [
2324
"osfstorage"

addons/azureblobstorage/__init__.py

Whitespace-only changes.

addons/azureblobstorage/apps.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from addons.base.apps import BaseAddonAppConfig
2+
3+
4+
class AzureBlobStorageAddonAppConfig(BaseAddonAppConfig):
5+
6+
default = True
7+
name = 'addons.azureblobstorage'
8+
label = 'addons_azureblobstorage'
9+
full_name = 'Azure Blob Storage'
10+
short_name = 'azureblobstorage'
11+
owners = ['user', 'node']
12+
configs = ['accounts', 'node']
13+
categories = ['storage']
14+
has_hgrid_files = True
15+
16+
# Define actions for NodeLog
17+
FOLDER_SELECTED = 'azureblobstorage_folder_selected'
18+
NODE_AUTHORIZED = 'azureblobstorage_node_authorized'
19+
NODE_DEAUTHORIZED = 'azureblobstorage_node_deauthorized'
20+
21+
actions = (FOLDER_SELECTED, NODE_AUTHORIZED, NODE_DEAUTHORIZED, )
22+
23+
@property
24+
def routes(self):
25+
# No Flask routes needed for gravyvalet-managed addon
26+
return []
27+
28+
@property
29+
def user_settings(self):
30+
# No UserSettings for gravyvalet-managed addon
31+
return None
32+
33+
@property
34+
def node_settings(self):
35+
# No NodeSettings for gravyvalet-managed addon
36+
return None

addons/azureblobstorage/models.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# -*- coding: utf-8 -*-
2+
3+
from osf.models.files import File, Folder, BaseFileNode
4+
from osf.models.external import ExternalProvider
5+
6+
class AzureBlobStorageFileNode(BaseFileNode):
7+
_provider = 'azureblobstorage'
8+
9+
10+
class AzureBlobStorageFolder(AzureBlobStorageFileNode, Folder):
11+
pass
12+
13+
14+
class AzureBlobStorageFile(AzureBlobStorageFileNode, File):
15+
version_identifier = 'version'
16+
17+
18+
class AzureBlobStorageProvider(ExternalProvider):
19+
"""An alternative to `ExternalProvider` not tied to OAuth"""
20+
21+
name = 'Azure Blob Storage'
22+
short_name = 'azureblobstorage'
23+
24+
def __init__(self, account=None):
25+
super(AzureBlobStorageProvider, self).__init__()
26+
27+
self.account = account
28+
29+
def __repr__(self):
30+
return '<{name}: {status}>'.format(
31+
name=self.__class__.__name__,
32+
status=self.account.display_name if self.account else 'anonymous'
33+
)

api/base/settings/defaults.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101

102102
# Addons
103103
'addons.osfstorage',
104+
'addons.azureblobstorage',
104105
'addons.bitbucket',
105106
'addons.boa',
106107
'addons.box',

0 commit comments

Comments
 (0)