public static DatasetNominationStorageItem DatasetToNomination(DatasetStorageItem dataset, ContactInfoOptions contactOptions, LicenseStorageItem license) { return(new DatasetNominationStorageItem { Id = dataset.Id, DatasetId = WellKnownIds.DatasetNominationDatasetId, Name = dataset.Name, Description = dataset.Description, Domain = dataset.Domain, DomainId = dataset.DomainId, ProjectUri = dataset.ProjectUri ?? dataset.SourceUri, SourceUri = dataset.SourceUri ?? dataset.ProjectUri, Version = dataset.Version, Published = dataset.Published, Created = dataset.Created, Modified = dataset.Modified, License = license?.Name ?? dataset.License, LicenseId = license?.Id ?? dataset.LicenseId, Tags = (dataset.Tags ?? Enumerable.Empty <string>()).ToList(), DigitalObjectIdentifier = dataset.DigitalObjectIdentifier, ContactName = contactOptions.Name, ContactInfo = contactOptions.Email, UserId = Guid.Empty, CreatedByUserName = dataset.CreatedByUserName, CreatedByUserEmail = dataset.CreatedByUserEmail, ModifiedByUserName = dataset.ModifiedByUserName, ModifiedByUserEmail = dataset.ModifiedByUserEmail, IsDownloadAllowed = dataset?.IsDownloadAllowed ?? false, NominationStatus = NominationStatus.PendingApproval, }); }
private DatasetStorageItem CreateDatasetDoc(Action <DatasetStorageItem> initFn = null) { var id = Guid.NewGuid(); var dataset = new DatasetStorageItem { Id = id, Name = $"Automated Test Dataset {id.ToString()}", Description = "Lorem ipsum ...", SourceUri = "https://www.microsoft.com/en-us/research/tools/?facet%5Btax%5D%5Bmsr-product-type%5D%5B%5D=243083", ProjectUri = "https://www.microsoft.com/en-us/research/", Version = "1.2.3", Published = new DateTime(2018, 12, 13).ToUniversalTime(), DigitalObjectIdentifier = "/Some/Id", Created = new DateTime(2019, 7, 1).ToUniversalTime(), CreatedByUserEmail = TestUserEmail, CreatedByUserName = TestUserName, License = "Creative Commons", LicenseId = new Guid("19c49d7e-16e9-4f2d-b914-439b0488cdbe"), Domain = "computer science", DomainId = "COMPUTER SCIENCE", DatasetOwners = new List <DatasetOwner> { new DatasetOwner { Name = TestUserName, Email = TestUserEmail, } } }; initFn?.Invoke(dataset); return(dataset); }
public bool IsUserDatasetOwner(DatasetStorageItem dataset, IPrincipal user) { if (dataset is null) { throw new ArgumentNullException(nameof(dataset)); } return(IsUserInDatasetOwnersList(dataset.DatasetOwners, user)); }
public void ShouldIndicateOwnerOfDatasetStorageItem() { var ownersService = Services.GetService <DatasetOwnersService>(); var dataset = new DatasetStorageItem { DatasetOwners = new List <DatasetOwner> { new DatasetOwner { Name = "Some User", Email = "*****@*****.**" } } }; var user = CreateTestUser("*****@*****.**"); var isOwner = ownersService.IsUserDatasetOwner(dataset, user); Assert.True(isOwner); }
/// <summary> /// Updates the current dataset document details in Azure Search (without having to /// wait for the indexer to run). /// </summary> /// <param name="dataset">The updated dataset contents.</param> /// <param name="token">Cancellation token.</param> /// <returns></returns> public async Task <IndexingResult> UpdateDatasetDocInSearchIndex(DatasetStorageItem dataset, CancellationToken token) { if (dataset is null) { throw new ArgumentNullException(nameof(dataset)); } var searchDoc = new DatasetSearchItem() { Id = dataset.Id, Name = dataset.Name, Description = dataset.Description, Published = dataset.Published, Created = dataset.Created, Modified = dataset.Modified, License = dataset.License, LicenseId = dataset.LicenseId, Domain = dataset.Domain, DomainId = dataset.DomainId, Tags = dataset.Tags, FileCount = dataset.FileCount, FileTypes = dataset.FileTypes, Size = dataset.Size, IsCompressedAvailable = dataset.IsCompressedAvailable, IsDownloadAllowed = dataset.IsDownloadAllowed, IsFeatured = dataset.IsFeatured }; var actions = new IndexAction <DatasetSearchItem>[] { IndexAction.MergeOrUpload(searchDoc) }; var batch = IndexBatch.New(actions); var results = await Client.Documents.IndexAsync(batch); return(results.Results.FirstOrDefault()); }
public static DatasetEditStorageItem ToDatasetEditStorageItem(this DatasetStorageItem source, Action <DatasetEditStorageItem> update = null) { return(ModelMapper <DatasetStorageItemMapper> .Mapper.Map <DatasetStorageItem, DatasetEditStorageItem>(source).WithUpdate(update)); }
private async Task <Func <Task> > SetupDataset(DatasetStorageItem dataset, Action <DatasetStorage> setParamsFn = null) { var sasTokens = Services.GetService <SasTokenService>(); var datasetStorage = new DatasetStorage { Id = dataset.Id, DatasetName = dataset.Name, AccountName = sasTokens.DefaultDatasetStorageAccount(), }; await sasTokens.FindUniqueDatasetContainerName(datasetStorage); await sasTokens.CreateDatasetContainer(datasetStorage); var blobClient = await Services.GetBlobClient(); var container = blobClient.GetContainerReference(datasetStorage.ContainerName); foreach (var testFile in TestFiles) { var blob = container.GetBlockBlobReference($"{testFile}.txt"); var content = $"{testFile}, generated {DateTime.UtcNow.ToString()}"; await blob.UploadTextAsync(content); } var datasetId = dataset.Id.ToString(); var requestOptions = new RequestOptions { PartitionKey = new PartitionKey(datasetId) }; var cosmosConfig = Services.GetService <IOptions <CosmosConfiguration> >().Value; var cosmosClient = await Services.GetCosmosClient(); var response = await cosmosClient.CreateDocumentAsync( UriFactory.CreateDocumentCollectionUri(cosmosConfig.Database, cosmosConfig.DatasetCollection), dataset, requestOptions); var containerDetails = new DatasetItemContainerDetails { DatasetId = dataset.Id, Account = datasetStorage.AccountName, Container = datasetStorage.ContainerName, Uri = container.Uri.ToString(), }; var link = new Attachment { Id = containerDetails.Name, ContentType = containerDetails.ContentType, MediaLink = containerDetails.Uri }; link.SetPropertyValue("storageType", "blob"); link.SetPropertyValue("container", containerDetails.Container); link.SetPropertyValue("account", containerDetails.Account); await cosmosClient.UpsertAttachmentAsync( response.Resource.SelfLink, link, requestOptions); setParamsFn?.Invoke(datasetStorage); return(async() => { await cosmosClient.DeleteDocumentAsync( UriFactory.CreateDocumentUri(cosmosConfig.Database, cosmosConfig.DatasetCollection, datasetId), requestOptions); await sasTokens.DeleteDatasetContainer(datasetStorage); }); }