use of io.hops.hopsworks.api.dataset.inode.InodeDTO in project hopsworks by logicalclocks.
the class DatasetResource method getByPath.
@GET
@Path("{path: .+}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Get or list files in path.", response = InodeDTO.class)
@AllowedProjectRoles({ AllowedProjectRoles.DATA_OWNER, AllowedProjectRoles.DATA_SCIENTIST })
@JWTRequired(acceptedTokens = { Audience.API, Audience.JOB }, allowedUserRoles = { "HOPS_ADMIN", "HOPS_USER" })
@ApiKeyRequired(acceptedScopes = { ApiScope.DATASET_VIEW }, allowedUserRoles = { "HOPS_ADMIN", "HOPS_USER" })
public Response getByPath(@PathParam("path") String path, @QueryParam("type") DatasetType datasetType, @QueryParam("action") DatasetActions.Get action, @QueryParam("mode") FilePreviewMode mode, @BeanParam Pagination pagination, @BeanParam InodeBeanParam inodeBeanParam, @BeanParam DatasetExpansionBeanParam datasetExpansionBeanParam, @Context UriInfo uriInfo, @Context SecurityContext sc) throws DatasetException, ProjectException, MetadataException, SchematizedTagException {
Users user = jwtHelper.getUserPrincipal(sc);
ResourceRequest resourceRequest = new ResourceRequest(ResourceRequest.Name.INODES);
resourceRequest.setExpansions(datasetExpansionBeanParam.getResources());
Project project = this.getProject();
DatasetPath datasetPath = datasetHelper.getDatasetPathIfFileExist(project, path, datasetType);
InodeDTO dto;
switch(action == null ? DatasetActions.Get.STAT : action) {
case BLOB:
dto = inodeBuilder.buildBlob(uriInfo, resourceRequest, user, datasetPath, mode);
break;
case LISTING:
resourceRequest.setOffset(pagination.getOffset());
resourceRequest.setLimit(pagination.getLimit());
resourceRequest.setSort(inodeBeanParam.getSortBySet());
resourceRequest.setFilter(inodeBeanParam.getFilter());
dto = inodeBuilder.buildItems(uriInfo, resourceRequest, user, datasetPath);
break;
case STAT:
if (datasetPath.isTopLevelDataset()) {
ResourceRequest datasetResourceRequest = new ResourceRequest(ResourceRequest.Name.DATASET);
datasetResourceRequest.setExpansions(datasetExpansionBeanParam.getResources());
DatasetDTO datasetDTO = datasetBuilder.build(uriInfo, datasetResourceRequest, user, datasetPath, null, null, true);
return Response.ok().entity(datasetDTO).build();
} else {
dto = inodeBuilder.buildStat(uriInfo, resourceRequest, user, datasetPath);
}
break;
default:
throw new WebApplicationException("Action not valid.", Response.Status.NOT_FOUND);
}
return Response.ok().entity(dto).build();
}
use of io.hops.hopsworks.api.dataset.inode.InodeDTO in project hopsworks by logicalclocks.
the class ModelsBuilder method build.
// Build specific
public ModelDTO build(UriInfo uriInfo, ResourceRequest resourceRequest, Users user, Project userProject, Project modelRegistryProject, ProvStateDTO fileProvenanceHit, String modelsFolder) throws DatasetException, ModelRegistryException, SchematizedTagException, MetadataException {
ModelDTO modelDTO = new ModelDTO();
uri(modelDTO, uriInfo, userProject, modelRegistryProject, fileProvenanceHit);
if (expand(modelDTO, resourceRequest).isExpand()) {
if (fileProvenanceHit.getXattrs() != null && fileProvenanceHit.getXattrs().containsKey(MODEL_SUMMARY_XATTR_NAME)) {
ModelDTO modelSummary = modelUtils.convertProvenanceHitToModel(fileProvenanceHit);
modelDTO.setId(fileProvenanceHit.getMlId());
modelDTO.setName(modelSummary.getName());
modelDTO.setVersion(modelSummary.getVersion());
modelDTO.setUserFullName(modelSummary.getUserFullName());
modelDTO.setCreated(fileProvenanceHit.getCreateTime());
modelDTO.setMetrics(modelSummary.getMetrics());
modelDTO.setDescription(modelSummary.getDescription());
modelDTO.setProgram(modelSummary.getProgram());
modelDTO.setFramework(modelSummary.getFramework());
modelDTO.setTags(tagsBuilder.build(uriInfo, resourceRequest, user, userProject, modelRegistryProject, modelDTO));
String modelVersionPath = modelsFolder + "/" + modelDTO.getName() + "/" + modelDTO.getVersion() + "/";
DatasetPath modelSchemaPath = datasetHelper.getDatasetPath(userProject, modelVersionPath + Settings.HOPS_MODELS_SCHEMA, DatasetType.DATASET);
if (resourceRequest.contains(ResourceRequest.Name.MODELSCHEMA) && modelSchemaPath.getInode() != null) {
InodeDTO modelSchemaDTO = inodeBuilder.buildBlob(uriInfo, new ResourceRequest(ResourceRequest.Name.INODES), user, modelSchemaPath, modelSchemaPath.getInode(), FilePreviewMode.HEAD);
modelDTO.setModelSchema(modelSchemaDTO);
} else {
InodeDTO modelSchemaDTO = inodeBuilder.buildResource(uriInfo, modelRegistryProject, modelSchemaPath);
modelDTO.setModelSchema(modelSchemaDTO);
}
DatasetPath inputExamplePath = datasetHelper.getDatasetPath(userProject, modelVersionPath + Settings.HOPS_MODELS_INPUT_EXAMPLE, DatasetType.DATASET);
if (resourceRequest.contains(ResourceRequest.Name.INPUTEXAMPLE) && inputExamplePath.getInode() != null) {
InodeDTO inputExampleDTO = inodeBuilder.buildBlob(uriInfo, new ResourceRequest(ResourceRequest.Name.INODES), user, inputExamplePath, inputExamplePath.getInode(), FilePreviewMode.HEAD);
modelDTO.setInputExample(inputExampleDTO);
} else {
InodeDTO inputExampleDTO = inodeBuilder.buildResource(uriInfo, modelRegistryProject, inputExamplePath);
modelDTO.setInputExample(inputExampleDTO);
}
modelDTO.setEnvironment(modelSummary.getEnvironment());
modelDTO.setExperimentId(modelSummary.getExperimentId());
modelDTO.setExperimentProjectName(modelSummary.getExperimentProjectName());
modelDTO.setProjectName(modelSummary.getProjectName());
modelDTO.setModelRegistryId(modelRegistryProject.getId());
}
}
return modelDTO;
}
use of io.hops.hopsworks.api.dataset.inode.InodeDTO in project hopsworks by logicalclocks.
the class DatasetResource method postByPath.
@POST
@Path("{path: .+}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Post an action on a file, dir or dataset.")
@AllowedProjectRoles({ AllowedProjectRoles.DATA_OWNER, AllowedProjectRoles.DATA_SCIENTIST })
@JWTRequired(acceptedTokens = { Audience.API, Audience.JOB }, allowedUserRoles = { "HOPS_ADMIN", "HOPS_USER" })
@ApiKeyRequired(acceptedScopes = { ApiScope.DATASET_CREATE }, allowedUserRoles = { "HOPS_ADMIN", "HOPS_USER" })
public Response postByPath(@Context UriInfo uriInfo, @Context SecurityContext sc, @PathParam("path") String path, @QueryParam("type") DatasetType datasetType, @QueryParam("target_project") String targetProjectName, @QueryParam("action") DatasetActions.Post action, @QueryParam("description") String description, @QueryParam("searchable") Boolean searchable, @QueryParam("generate_readme") Boolean generateReadme, @QueryParam("destination_path") String destPath, @QueryParam("destination_type") DatasetType destDatasetType, @DefaultValue("READ_ONLY") @QueryParam("permission") DatasetAccessPermission permission) throws DatasetException, ProjectException, HopsSecurityException, ProvenanceException, MetadataException, SchematizedTagException {
Users user = jwtHelper.getUserPrincipal(sc);
DatasetPath datasetPath;
DatasetPath distDatasetPath;
Project project = this.getProject();
switch(action == null ? DatasetActions.Post.CREATE : action) {
case CREATE:
if (datasetType != null && !datasetType.equals(DatasetType.DATASET)) {
// can only create dataset
throw new DatasetException(RESTCodes.DatasetErrorCode.DATASET_OPERATION_INVALID, Level.FINE);
}
datasetPath = datasetHelper.getNewDatasetPath(project, path, DatasetType.DATASET);
if (datasetPath.isTopLevelDataset()) {
checkIfDataOwner(project, user);
}
if (datasetPath.isTopLevelDataset() && !datasetHelper.isBasicDatasetProjectParent(project, datasetPath)) {
// fake shared dataset with :: in dataset name at dataset creation
throw new DatasetException(RESTCodes.DatasetErrorCode.DATASET_NAME_INVALID, Level.FINE);
}
ProvTypeDTO projectProvCore = fsProvenanceController.getMetaStatus(user, project, searchable);
ResourceRequest resourceRequest;
if (datasetPath.isTopLevelDataset()) {
datasetController.createDirectory(project, user, datasetPath.getFullPath(), datasetPath.getDatasetName(), datasetPath.isTopLevelDataset(), description, Provenance.getDatasetProvCore(projectProvCore, Provenance.MLType.DATASET), generateReadme, permission);
resourceRequest = new ResourceRequest(ResourceRequest.Name.DATASET);
Dataset ds = datasetController.getByProjectAndFullPath(project, datasetPath.getFullPath().toString());
datasetHelper.updateDataset(project, datasetPath, ds);
datasetPath.setInode(ds.getInode());
DatasetDTO dto = datasetBuilder.build(uriInfo, resourceRequest, user, datasetPath, null, null, false);
return Response.created(dto.getHref()).entity(dto).build();
} else {
datasetHelper.checkIfDatasetExists(project, datasetPath);
datasetHelper.updateDataset(project, datasetPath);
datasetController.createDirectory(project, user, datasetPath.getFullPath(), datasetPath.getDatasetName(), datasetPath.isTopLevelDataset(), description, Provenance.getDatasetProvCore(projectProvCore, Provenance.MLType.DATASET), generateReadme, permission);
resourceRequest = new ResourceRequest(ResourceRequest.Name.INODES);
Inode inode = inodeController.getInodeAtPath(datasetPath.getFullPath().toString());
datasetPath.setInode(inode);
InodeDTO dto = inodeBuilder.buildStat(uriInfo, resourceRequest, user, datasetPath, inode);
return Response.created(dto.getHref()).entity(dto).build();
}
case COPY:
datasetPath = datasetHelper.getDatasetPathIfFileExist(project, path, datasetType);
distDatasetPath = datasetHelper.getDatasetPath(project, destPath, destDatasetType);
datasetController.copy(project, user, datasetPath.getFullPath(), distDatasetPath.getFullPath(), datasetPath.getDataset(), distDatasetPath.getDataset());
break;
case MOVE:
datasetPath = datasetHelper.getDatasetPathIfFileExist(project, path, datasetType);
distDatasetPath = datasetHelper.getDatasetPath(project, destPath, destDatasetType);
datasetController.move(project, user, datasetPath.getFullPath(), distDatasetPath.getFullPath(), datasetPath.getDataset(), distDatasetPath.getDataset());
break;
case SHARE:
checkIfDataOwner(project, user);
datasetPath = datasetHelper.getDatasetPathIfFileExist(project, path, datasetType);
datasetController.share(targetProjectName, datasetPath.getFullPath().toString(), permission, project, user);
break;
case ACCEPT:
checkIfDataOwner(project, user);
datasetPath = datasetHelper.getDatasetPathIfFileExist(project, path, datasetType);
datasetController.acceptShared(project, user, datasetPath.getDatasetSharedWith());
break;
case ZIP:
datasetPath = datasetHelper.getDatasetPathIfFileExist(project, path, datasetType);
if (destPath != null) {
distDatasetPath = datasetHelper.getDatasetPath(project, destPath, destDatasetType);
datasetController.zip(project, user, datasetPath.getFullPath(), distDatasetPath.getFullPath());
} else {
datasetController.zip(project, user, datasetPath.getFullPath(), null);
}
break;
case UNZIP:
datasetPath = datasetHelper.getDatasetPathIfFileExist(project, path, datasetType);
if (destPath != null) {
distDatasetPath = datasetHelper.getDatasetPath(project, destPath, destDatasetType);
datasetController.unzip(project, user, datasetPath.getFullPath(), distDatasetPath.getFullPath());
} else {
datasetController.unzip(project, user, datasetPath.getFullPath(), null);
}
break;
case REJECT:
checkIfDataOwner(project, user);
datasetPath = datasetHelper.getDatasetPathIfFileExist(project, path, datasetType);
datasetController.rejectShared(datasetPath.getDatasetSharedWith());
break;
case PUBLISH:
checkIfDataOwner(project, user);
datasetPath = datasetHelper.getDatasetPathIfFileExist(project, path, datasetType);
datasetController.shareWithCluster(project, datasetPath.getDataset(), user, datasetPath.getFullPath());
break;
case UNPUBLISH:
checkIfDataOwner(project, user);
datasetPath = datasetHelper.getDatasetPathIfFileExist(project, path, datasetType);
datasetController.unshareFromCluster(project, datasetPath.getDataset(), user, datasetPath.getFullPath());
break;
case IMPORT:
checkIfDataOwner(project, user);
Project srcProject = projectController.findProjectByName(targetProjectName);
datasetPath = datasetHelper.getDatasetPathIfFileExist(srcProject, path, datasetType);
datasetController.share(project.getName(), datasetPath.getFullPath().toString(), DatasetAccessPermission.READ_ONLY, srcProject, user);
break;
case UNSHARE_ALL:
checkIfDataOwner(project, user);
datasetPath = datasetHelper.getDatasetPathIfFileExist(project, path, datasetType);
datasetController.unshareAll(datasetPath.getDataset(), user);
break;
default:
throw new WebApplicationException("Action not valid.", Response.Status.NOT_FOUND);
}
return Response.noContent().build();
}
Aggregations