Пример #1
0
        public async Task <Establishment[]> DownloadEstablishmentsAsync(CancellationToken cancellationToken)
        {
            var downloadLinks = await GetAvailableDownloadLinksAsync(cancellationToken);

            var downloadLinksNames = downloadLinks.Select(x => x.Title).Aggregate((x, y) => $"{x}, {y}");

            _logger.Debug($"Found {downloadLinks.Length} download links - {downloadLinksNames}");

            var establishmentLink =
                downloadLinks.SingleOrDefault(l =>
                                              l.Title.Equals("Establishment fields", StringComparison.CurrentCultureIgnoreCase));

            if (establishmentLink == null)
            {
                _logger.Debug($"Failed to find link with text 'Establishment fields'");
                return(new Establishment[0]);
            }

            var csv = await DownloadCsvAsync(establishmentLink.Url, cancellationToken);

            _logger.Debug($"Downloaded csv of {csv.Length} bytes");

            using (var stream = new MemoryStream(csv))
                using (var reader = new StreamReader(stream))
                    using (var parser = new EstablishmentFileParser(reader))
                    {
                        var establishments = parser.GetRecords();
                        return(establishments);
                    }
        }
        public void ThenItShouldParseWithSuccess()
        {
            FileInfo sampleFile = new FileInfo(
                "Samples/edubasealldata20200210.csv");

            FileStream   fileStream   = sampleFile.OpenRead();
            StreamReader streamReader = new StreamReader(fileStream);

            EstablishmentFileParser establishmentFileParser =
                new EstablishmentFileParser(streamReader);

            Establishment[] establishments =
                establishmentFileParser.GetRecords();

            Assert.AreEqual(establishments.Length, 48354);
        }
Пример #3
0
        public async Task <Establishment[]> DownloadEstablishmentsAsync(CancellationToken cancellationToken)
        {
            if (_zip == null)
            {
                await AcquireExtract(cancellationToken);
            }

            var zipEntry = _zip.Entries.SingleOrDefault(e => e.Name == _configuration.ExtractEstablishmentsFileName);

            if (zipEntry == null)
            {
                throw new Exception($"Extract does not contain entry for {_configuration.ExtractEstablishmentsFileName}");
            }

            using (var stream = zipEntry.Open())
                using (var reader = new StreamReader(stream))
                    using (var parser = new EstablishmentFileParser(reader))
                    {
                        var establishments = parser.GetRecords();
                        return(establishments);
                    }
        }