コード例 #1
0
        private async Task <TableLoadResult> GetTableResult(string fullBlobName, DatasetDefinition datasetDefinition)
        {
            string dataset_cache_key = $"{CacheKeys.DatasetRows}:{datasetDefinition.Id}:{GetBlobNameCacheKey(fullBlobName)}".ToLowerInvariant();

            IEnumerable <TableLoadResult> tableLoadResults = await _cacheProvider.GetAsync <TableLoadResult[]>(dataset_cache_key);

            if (tableLoadResults.IsNullOrEmpty())
            {
                ICloudBlob blob = await _blobClient.GetBlobReferenceFromServerAsync(fullBlobName);

                if (blob == null)
                {
                    _logger.Error($"Failed to find blob with path: {fullBlobName}");
                    throw new NonRetriableException($"Failed to find blob with path: {fullBlobName}");
                }

                using (Stream datasetStream = await _blobClient.DownloadToStreamAsync(blob))
                {
                    if (datasetStream == null || datasetStream.Length == 0)
                    {
                        _logger.Error($"Invalid blob returned: {fullBlobName}");
                        throw new NonRetriableException($"Invalid blob returned: {fullBlobName}");
                    }

                    tableLoadResults = _excelDatasetReader.Read(datasetStream, datasetDefinition).ToList();
                }

                await _cacheProvider.SetAsync(dataset_cache_key, tableLoadResults.ToArraySafe(), TimeSpan.FromDays(7), true);
            }

            return(tableLoadResults.FirstOrDefault());
        }
コード例 #2
0
        public DatasetUploadValidationModelValidator(IExcelDatasetReader excelDatasetReader)
        {
            RuleFor(model => model)
            .NotNull()
            .Custom((validationModel, context) =>
            {
                ExcelPackage excelPackage = validationModel.ExcelPackage;

                validationModel.Data = excelDatasetReader.Read(excelPackage, validationModel.DatasetDefinition, false);

                IEnumerable <ProviderSummary> providerSummaries = validationModel.ProviderSummaries();

                Validate(excelPackage, validationModel, providerSummaries);

                if (!_isValid)
                {
                    // message will not be surfaced, purely to return an invalid result.
                    context.AddFailure("Excel did not validate");
                }
            });
        }
        private async Task <(bool success, string errorMessage, List <TableLoadResult> tableLoadResults)> ReadExcelDatasetData(DatasetDefinition datasetDefinition,
                                                                                                                               string blobFileName)
        {
            ICloudBlob blob = await _blobClient.GetBlobReferenceFromServerAsync(blobFileName);

            if (blob == null)
            {
                return(false, $"Failed to find blob with path: {blobFileName}", new List <TableLoadResult>());
            }

            await using Stream datasetStream = await _blobClient.DownloadToStreamAsync(blob);

            if (datasetStream == null || datasetStream.Length == 0)
            {
                return(false, $"Blob {blob.Name} contains no data", new List <TableLoadResult>());
            }

            List <TableLoadResult> tableLoadResults = _excelDatasetReader.Read(datasetStream, datasetDefinition).ToList();

            return(true, null, tableLoadResults);
        }