Exemple #1
0
 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,
     });
 }
Exemple #2
0
        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);
        }
Exemple #3
0
        public bool IsUserDatasetOwner(DatasetStorageItem dataset, IPrincipal user)
        {
            if (dataset is null)
            {
                throw new ArgumentNullException(nameof(dataset));
            }

            return(IsUserInDatasetOwnersList(dataset.DatasetOwners, user));
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        /// <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());
        }
Exemple #6
0
 public static DatasetEditStorageItem ToDatasetEditStorageItem(this DatasetStorageItem source, Action <DatasetEditStorageItem> update = null)
 {
     return(ModelMapper <DatasetStorageItemMapper> .Mapper.Map <DatasetStorageItem, DatasetEditStorageItem>(source).WithUpdate(update));
 }
Exemple #7
0
        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);
            });
        }