Skip to content

Commit b28d7ae

Browse files
Add a method postDriveMounted to mount the drive and successfully mount a drive. Try to get the content of this drive.
1 parent b5cc12e commit b28d7ae

File tree

6 files changed

+32
-27
lines changed

6 files changed

+32
-27
lines changed

jupyter_drives/base.py

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class DrivesConfig(Configurable):
3434
help="The secret access key for the bucket.",
3535
)
3636

37+
3738
region_name = Unicode(
3839
"eu-north-1",
3940
config = True,

jupyter_drives/handlers.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ async def get(self):
5959
async def post(self):
6060
body = self.get_json_body()
6161
result = await self._manager.mount_drive(**body)
62-
self.finish(json.dump(result.message))
62+
self.finish(result["message"])
6363

6464
class ContentsJupyterDrivesHandler(JupyterDrivesAPIHandler):
6565
"""
@@ -97,6 +97,7 @@ def setup_handlers(web_app: tornado.web.Application, config: traitlets.config.Co
9797

9898
provider = DrivesConfig(config=config).provider
9999
entry_point = MANAGERS.get(provider)
100+
100101
if entry_point is None:
101102
log.error(f"JupyterDrives Manager: No manager defined for provider '{provider}'.")
102103
raise NotImplementedError()
@@ -128,7 +129,8 @@ def setup_handlers(web_app: tornado.web.Application, config: traitlets.config.Co
128129
for pattern, handler in handlers_with_path
129130
]
130131
)
131-
132+
133+
132134
log.debug(f"Jupyter-Drives Handlers: {drives_handlers}")
133135

134136
web_app.add_handlers(host_pattern, drives_handlers)

jupyter_drives/managers/s3.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ async def mount_drive(self, drive_name):
9393
)
9494

9595
# checking if the drive wasn't mounted already
96-
if self.s3_content_managers[drive_name] is None:
96+
if drive_name not in self.s3_content_managers or self.s3_content_managers[drive_name] is None:
9797
self.s3_content_managers[drive_name] = s3_contents_manager
9898

9999
response = {

src/handler.ts

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ export async function requestAPI<T>(
2020
'jupyter-drives', // API Namespace
2121
endPoint
2222
);
23-
2423
let response: Response;
2524
try {
2625
response = await ServerConnection.makeRequest(requestUrl, init, settings);

src/index.ts

+12-20
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@ import {
1717
} from '@jupyterlab/apputils';
1818

1919
import { SidePanel } from '@jupyterlab/ui-components';
20-
2120
import { IBucket } from './s3requests';
2221
import { Dialog, ICommandPalette, showDialog } from '@jupyterlab/apputils';
2322
import { DriveListModel, DriveListView } from './drivelistmanager';
2423
import { addJupyterLabThemeChangeListener } from '@jupyter/web-components';
25-
import { getDriveContent, getDrivesList } from './s3requests';
24+
import {
25+
getDriveContents,
26+
getDrivesList,
27+
postDriveMounted
28+
} from './s3requests';
2629

2730
/**
2831
* The class name added to the filebrowser filterbox node.
@@ -40,13 +43,14 @@ function buildMountedDriveNameList(driveList: Drive[]): string[] {
4043
return driveNameList;
4144
}
4245

43-
const s3AvailableBuckets2 = await getDrivesList();
44-
console.log('List of buckets is:', s3AvailableBuckets2);
46+
const s3AvailableBuckets = await getDrivesList();
47+
console.log('List of buckets is:', s3AvailableBuckets);
4548
const driveName = 'jupyter-drive-bucket1';
4649
const path = 'examples';
47-
const driveContent = await getDriveContent(driveName, path);
50+
await postDriveMounted(driveName);
51+
const driveContent = await getDriveContents(driveName, path);
4852
console.log('driveContent:', driveContent);
49-
const s3AvailableBuckets1: IBucket[] = [
53+
/*const s3AvailableBuckets1: IBucket[] = [
5054
{
5155
creation_date: '2023-12-15T13:27:57.000Z',
5256
name: 'jupyterDriveBucket1',
@@ -82,25 +86,13 @@ const s3AvailableBuckets1: IBucket[] = [
8286
region: 'us-east-1',
8387
status: 'active'
8488
}
85-
];
89+
];*/
8690

8791
namespace CommandIDs {
8892
export const openDrivesDialog = 'drives:open-drives-dialog';
8993
export const removeDriveBrowser = 'drives:remove-drive-browser';
9094
}
9195

92-
/**
93-
* Initialization data for the @jupyter/drives extension.
94-
*/
95-
const plugin: JupyterFrontEndPlugin<void> = {
96-
id: '@jupyter/drives:plugin',
97-
description: 'A Jupyter extension to support drives in the backend.',
98-
autoStart: true,
99-
activate: (app: JupyterFrontEnd) => {
100-
console.log('JupyterLab extension @jupyter/drives is activated!');
101-
}
102-
};
103-
/*const s3BucketsList: IBucket[] = await getDrivesList();*/
10496
/*async*/ function createDrivesList(bucketList: IBucket[]) {
10597
const S3Drives: Drive[] = [];
10698
bucketList.forEach(item => {
@@ -182,7 +174,7 @@ export /*async */ function activateAddDrivesPlugin(
182174
addJupyterLabThemeChangeListener();
183175
const selectedDrivesModelMap = new Map<Drive[], DriveListModel>();
184176
let selectedDrives: Drive[] = [];
185-
const availableDrives = createDrivesList(s3AvailableBuckets1);
177+
const availableDrives = createDrivesList(s3AvailableBuckets);
186178
let driveListModel = selectedDrivesModelMap.get(selectedDrives);
187179
const mountedDriveNameList: string[] =
188180
buildMountedDriveNameList(selectedDrives);

src/s3requests.ts

+14-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { requestAPI } from './handler';
2+
import { Contents } from '@jupyterlab/services';
23

34
export interface IBucket {
45
name: string;
@@ -14,8 +15,18 @@ export async function getDrivesList() {
1415
});
1516
}
1617

17-
export async function getDriveContent(driveName: string, path: string) {
18-
return await requestAPI<Array<IBucket>>('drives/' + driveName + '/' + path, {
19-
method: 'GET'
18+
export async function postDriveMounted(driveName: string) {
19+
await requestAPI<any>('drives', {
20+
method: 'POST',
21+
body: `{"drive_name":"${driveName}"}`
2022
});
2123
}
24+
25+
export async function getDriveContents(driveName: string, path: string) {
26+
return await requestAPI<Contents.IModel>(
27+
'drives' + '/' + driveName + '/' + path,
28+
{
29+
method: 'GET'
30+
}
31+
);
32+
}

0 commit comments

Comments
 (0)