Skip to content

Commit

Permalink
feat(FR-372): support id based object resolution
Browse files Browse the repository at this point in the history
  • Loading branch information
agatha197 committed Jan 16, 2025
1 parent 529a225 commit d708bec
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 29 deletions.
8 changes: 0 additions & 8 deletions react/src/components/ModelCardModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -215,14 +215,6 @@ const ModelCardModal: React.FC<ModelCardModalProps> = ({
size="small"
disabled={!model_card?.vfolder?.cloneable}
onClick={() => {
// const event = new CustomEvent('backend-ai-vfolder-cloning', {
// detail: {
// // TODO: change this to vfolder name
// name: mode_card?.name,
// },
// });
// onRequestClose();
// document.dispatchEvent(event);
setVisibleCloneModal(true);
}}
>
Expand Down
4 changes: 2 additions & 2 deletions react/src/components/ModelCloneModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,11 @@ const ModelCloneModal: React.FC<ModelCloneModalProps> = ({
formRef.current
?.validateFields()
.then((values) => {
if (vfolder?.name && vfolder.host) {
if (vfolder?.id && vfolder.host) {
mutationToClone.mutate(
{
input: values,
name: vfolder.name,
name: vfolder.id,
},
{
onSuccess(data) {
Expand Down
14 changes: 9 additions & 5 deletions src/components/backend-ai-data-view.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ export default class BackendAIData extends BackendAIPage {
@property({ type: Object }) _helpDescriptionStorageProxyInfo = Object();
@property({ type: Object }) options;
@property({ type: Number }) capacity;
@property({ type: String }) cloneFolderName = '';
@property({ type: String }) cloneFolderID = '';
@property({ type: Object }) storageProxyInfo = Object();
@property({ type: String }) folderType = 'user';
@property({ type: Number }) currentGroupIdx = 0;
Expand Down Expand Up @@ -550,7 +550,7 @@ export default class BackendAIData extends BackendAIPage {
<mwc-textfield
id="clone-folder-src"
label="${_t('data.FolderToCopy')}"
value="${this.cloneFolderName}"
value="${this.cloneFolderID}"
disabled
></mwc-textfield>
<mwc-textfield
Expand Down Expand Up @@ -819,7 +819,11 @@ export default class BackendAIData extends BackendAIPage {
document.addEventListener('backend-ai-vfolder-cloning', (e: any) => {
if (e.detail) {
const selectedItems = e.detail;
this.cloneFolderName = selectedItems.name;
this.cloneFolderID = globalThis.backendaiclient.supports(
'vfolder-id-based',
)
? selectedItems.id
: selectedItems.name;
this._cloneFolderDialog();
}
});
Expand Down Expand Up @@ -976,7 +980,7 @@ export default class BackendAIData extends BackendAIPage {
this.allowedGroups = group_info.groups;
}
this.cloneFolderNameInput.value = await this._checkFolderNameAlreadyExists(
this.cloneFolderName,
this.cloneFolderID,
);
this.openDialog('clone-folder-dialog');
}
Expand Down Expand Up @@ -1267,7 +1271,7 @@ export default class BackendAIData extends BackendAIPage {
};
const job = globalThis.backendaiclient.vfolder.clone(
input,
this.cloneFolderName,
this.cloneFolderID,
);
job
.then(() => {
Expand Down
18 changes: 11 additions & 7 deletions src/components/backend-ai-folder-explorer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ export default class BackendAIFolderExplorer extends BackendAIPage {
// [target vfolder information]
@property({ type: String }) vfolderID = '';
@property({ type: String }) vfolderName = '';
@property({ type: String }) vfolder = '';
@property({ type: Array }) vfolderFiles = [];
@property({ type: String }) vhost = '';
@property({ type: Boolean }) isWritable = false;
Expand Down Expand Up @@ -496,7 +497,7 @@ export default class BackendAIFolderExplorer extends BackendAIPage {
const path = this.breadcrumb.concat(fn).join('/');
const job = globalThis.backendaiclient.vfolder.request_download_token(
path,
this.vfolderName,
this.vfolder,
archive,
);
job
Expand Down Expand Up @@ -777,6 +778,9 @@ export default class BackendAIFolderExplorer extends BackendAIPage {
return vfolder.id === this.vfolderID;
});
this.vfolderName = vfolder.name;
this.vfolder = globalThis.backendaiclient.supports('vfolder-id-based')
? vfolder.id
: vfolder.name;
this.vhost = vfolder.host;
this.isWritable = vfolder.permission.includes('w');

Expand All @@ -791,7 +795,7 @@ export default class BackendAIFolderExplorer extends BackendAIPage {
this.fileListGrid.selectedItems = [];
const filesInfo = await globalThis.backendaiclient.vfolder.list_files(
this.breadcrumb.join('/'),
this.vfolderName,
this.vfolder,
);

const details = filesInfo.items;
Expand Down Expand Up @@ -968,7 +972,7 @@ export default class BackendAIFolderExplorer extends BackendAIPage {
const job = globalThis.backendaiclient.vfolder.rename_file(
path,
newName,
this.vfolderName,
this.vfolder,
this.is_dir,
);
job
Expand Down Expand Up @@ -1034,7 +1038,7 @@ export default class BackendAIFolderExplorer extends BackendAIPage {
const job = globalThis.backendaiclient.vfolder.delete_files(
filenames,
true,
this.vfolderName,
this.vfolder,
);
job.then((res) => {
this.notification.text =
Expand All @@ -1054,7 +1058,7 @@ export default class BackendAIFolderExplorer extends BackendAIPage {
const job = globalThis.backendaiclient.vfolder.delete_files(
[path],
true,
this.vfolderName,
this.vfolder,
);
job
.then((res) => {
Expand Down Expand Up @@ -1121,7 +1125,7 @@ export default class BackendAIFolderExplorer extends BackendAIPage {
this.mkdirNameInput.reportValidity();
if (this.mkdirNameInput.checkValidity()) {
const job = globalThis.backendaiclient.vfolder
.mkdir([...this.breadcrumb, newfolder].join('/'), this.vfolderName)
.mkdir([...this.breadcrumb, newfolder].join('/'), this.vfolder)
.catch((err) => {
if (err & err.message) {
this.notification.text = PainKiller.relieve(err.title);
Expand Down Expand Up @@ -1290,7 +1294,7 @@ export default class BackendAIFolderExplorer extends BackendAIPage {
const job = globalThis.backendaiclient.vfolder.create_upload_session(
path,
fileObj,
this.vfolderName,
this.vfolder,
);
job.then((url) => {
const start_date = new Date().getTime();
Expand Down
24 changes: 20 additions & 4 deletions src/components/backend-ai-storage-list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ export default class BackendAiStorageList extends BackendAIPage {
@property({ type: Boolean }) enableVfolderTrashBin = false;
@property({ type: Boolean }) authenticated = false;
@property({ type: String }) renameFolderName = '';
@property({ type: String }) renameFolderID = '';
@property({ type: String }) deleteFolderName = '';
@property({ type: String }) deleteFolderID = '';
@property({ type: String }) leaveFolderName = '';
Expand Down Expand Up @@ -1932,8 +1933,10 @@ export default class BackendAiStorageList extends BackendAIPage {
* @param {Event} e - click the info icon button
* */
_infoFolder(e) {
const folderName = this._getControlName(e);
const job = globalThis.backendaiclient.vfolder.info(folderName);
const folder = globalThis.backendaiclient.supports('vfolder-id-based')
? this._getControlID(e)
: this._getControlName(e);
const job = globalThis.backendaiclient.vfolder.info(folder);
job
.then((value) => {
this.folderInfo = value;
Expand All @@ -1955,7 +1958,10 @@ export default class BackendAiStorageList extends BackendAIPage {
* @param {Event} e - click the settings icon button
* */
_modifyFolderOptionDialog(e) {
globalThis.backendaiclient.vfolder.name = this._getControlName(e);
globalThis.backendaiclient.vfolder.name =
globalThis.backendaiclient.supports('vfolder-id-based')
? this._getControlID(e)
: this._getControlName(e);
const job = globalThis.backendaiclient.vfolder.info(
globalThis.backendaiclient.vfolder.name,
);
Expand Down Expand Up @@ -2075,6 +2081,7 @@ export default class BackendAiStorageList extends BackendAIPage {
*/
async _updateFolderName() {
globalThis.backendaiclient.vfolder.name = this.renameFolderName;
globalThis.backendaiclient.vfolder.id = this.renameFolderID;
const newName = this.newFolderNameInput.value;
this.newFolderNameInput.reportValidity();
if (newName) {
Expand All @@ -2101,6 +2108,11 @@ export default class BackendAiStorageList extends BackendAIPage {
* @param {Event} e - click the
*/
_renameFolderDialog(e) {
this.renameFolderID = globalThis.backendaiclient.supports(
'vfolder-id-based',
)
? this._getControlID(e)
: this._getControlName(e);
this.renameFolderName = this._getControlName(e);
this.newFolderNameInput.value = '';
this.openDialog('modify-folder-name-dialog');
Expand Down Expand Up @@ -2427,7 +2439,11 @@ export default class BackendAiStorageList extends BackendAIPage {
* @param {Event} e - click the share button
* */
_shareFolderDialog(e) {
this.selectedFolder = this._getControlName(e);
this.selectedFolder = globalThis.backendaiclient.supports(
'vfolder-id-based',
)
? this._getControlID(e)
: this._getControlName(e);
this.selectedFolderType = this._getControlType(e);
this._initializeSharingFolderDialogLayout();
this.openDialog('share-folder-dialog');
Expand Down
2 changes: 1 addition & 1 deletion src/components/backend-ai-summary-view.ts
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ export default class BackendAISummary extends BackendAIPage {
try {
await globalThis.backendaiclient.vfolder.accept_invitation(invitation.id);
const vfolderInfo = await globalThis.backendaiclient.vfolder.info(
invitation.vfolder_name,
invitation.vfolder_id,
);
const tabName = BackendAISummary.getVFolderTabByVFolderInfo(vfolderInfo);
this.notification.url = `/data?tab=${tabName}&folder=${invitation.vfolder_id.replace('-', '')}`;
Expand Down
10 changes: 8 additions & 2 deletions src/lib/backend.ai-client-esm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -734,6 +734,9 @@ class Client {
this._features['max_network_count'] = true;
this._features['replicas'] = true;
}
if (this.isManagerVersionCompatibleWith(['25.1.0', '24.09.6', '24.03.12'])) {
this._features['vfolder-id-based'] = true;
}
}

/**
Expand Down Expand Up @@ -2079,6 +2082,7 @@ class ResourcePreset {
class VFolder {
public client: any;
public name: any;
public id: any;
public urlPrefix: any;

/**
Expand All @@ -2087,9 +2091,10 @@ class VFolder {
* @param {Client} client - the Client API wrapper object to bind
* @param {string} name - Virtual folder name.
*/
constructor(client, name = null) {
constructor(client, name = null, id = null) {
this.client = client;
this.name = name;
this.id = id;
this.urlPrefix = '/folders';
}

Expand Down Expand Up @@ -2259,9 +2264,10 @@ class VFolder {
*/
async rename(new_name = null): Promise<any> {
const body = { new_name };
const vfolder = this.client.supports('vfolder-id-based') ? this.id : this.name;
let rqst = this.client.newSignedRequest(
'POST',
`${this.urlPrefix}/${this.name}/rename`,
`${this.urlPrefix}/${vfolder}/rename`,
body,
);
return this.client._wrapWithPromise(rqst);
Expand Down
5 changes: 5 additions & 0 deletions src/lib/pep440.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,5 +80,10 @@ describe('isCompatibleMultipleConditions', ()=>{
expect(isCompatibleMultipleConditions('23.03.3', ['24.3.1', '23.03.4'])).toBe(false)
expect(isCompatibleMultipleConditions('25.03.3', ['24.3.1', '23.03.4'])).toBe(true)
expect(isCompatibleMultipleConditions('22.03.3', ['24.3.1', '23.03.4'])).toBe(false)
expect(isCompatibleMultipleConditions('24.12.1', ['25.1.0', '24.09.6', '24.03.12'])).toBe(false)
expect(isCompatibleMultipleConditions('25.1.1', ['25.1.0', '24.09.6', '24.03.12'])).toBe(true)
expect(isCompatibleMultipleConditions('25.0.0', ['25.1.0', '24.09.6', '24.03.12'])).toBe(false)
expect(isCompatibleMultipleConditions('24.09.5', ['25.1.0', '24.09.6', '24.03.12'])).toBe(false)
expect(isCompatibleMultipleConditions('24.09.7', ['25.1.0', '24.09.6', '24.03.12'])).toBe(true)
});
})

0 comments on commit d708bec

Please sign in to comment.