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

Add /folder/{id}/move API endpoint #19

Merged
merged 5 commits into from
Sep 27, 2023
Merged
Show file tree
Hide file tree
Changes from 2 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
4 changes: 3 additions & 1 deletion import_tracker/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from girder_jobs.models.job import Job

from import_tracker.models import AssetstoreImport
from import_tracker.rest import listAllImports, listImports
from import_tracker.rest import listAllImports, listImports, moveFolder


class ImportTrackerCancelError(Exception):
Expand Down Expand Up @@ -176,3 +176,5 @@ def load(self, info):
info['apiRoot'].assetstore.route('GET', ('all_imports',), listAllImports)
wrapShouldImportFile()
wrapImportData(info['apiRoot'].assetstore)

info['apiRoot'].folder.route('PUT', (':id', 'move'), moveFolder)
32 changes: 31 additions & 1 deletion import_tracker/rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@
from girder.api import access
from girder.api.describe import Description, autoDescribeRoute
from girder.api.rest import boundHandler
from girder.constants import SortDir
from girder.constants import AccessType, SortDir
from girder.models.assetstore import Assetstore
from girder.models.folder import Folder
from girder.models.item import Item
from girder.models.upload import Upload
from girder.utility import model_importer, path

from .models import AssetstoreImport
Expand Down Expand Up @@ -71,6 +74,22 @@ def getImports(query=None, user=None, unique=False, limit=None, offset=None, sor
return processCursor(cursor, user)


def moveLeafFiles(folder, user, assetstore):
Folder().updateFolder(folder)
child_items = Folder().childItems(folder)
child_folders = Folder().childFolders(folder, 'folder', user=user)

results = []
for item in child_items:
for (_, file) in Item().fileList(item, data=False):
results.append(Upload().moveFileToAssetstore(file, user, assetstore))
willdunklin marked this conversation as resolved.
Show resolved Hide resolved

for child_folder in child_folders:
results += moveLeafFiles(child_folder, user, assetstore)

return results


@access.admin
@boundHandler
@autoDescribeRoute(
Expand Down Expand Up @@ -98,3 +117,14 @@ def listAllImports(self, unique, limit, offset, sort):
return getImports(
None,
self.getCurrentUser(), unique, limit, offset, sort)


@access.admin
@boundHandler
@autoDescribeRoute(
Description('Move folder contents to an assetstore.')
.modelParam('id', 'Source folder ID', model=Folder, level=AccessType.WRITE)
.modelParam('assetstoreId', 'Destination assetstore ID', model=Assetstore, paramType='formData')
)
def moveFolder(self, folder, assetstore):
return moveLeafFiles(folder, self.getCurrentUser(), assetstore)