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()); }
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); }