Skip to content

Commit e688dc1

Browse files
committed
feat: add TextFileReader
1 parent 4497b95 commit e688dc1

8 files changed

Lines changed: 50 additions & 11 deletions

File tree

.github/workflows/tests.yml

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
name: test
22

3-
on: [push, pull_request]
3+
on:
4+
push:
5+
branches: [ main ]
6+
pull_request:
47

58
jobs:
69
test:
@@ -32,9 +35,13 @@ jobs:
3235
run: poetry install --no-interaction
3336
- name: Code Quality
3437
run: |
35-
source .venv/bin/activate
3638
poetry run pre-commit run --all-files
3739
- name: Run tests
3840
run: |
39-
source .venv/bin/activate
40-
poetry run pytest tests/
41+
poetry run pytest --cov=src tests/ --cov-report=xml
42+
- name: Upload coverage reports to Codecov
43+
uses: codecov/codecov-action@v5
44+
with:
45+
token: ${{ secrets.CODECOV_TOKEN }}
46+
slug: glefer-training/file-parser
47+
if: github.event_name != 'pull_request'

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
/.coverage
2+
/coverage.xml
23
__pycache__

.pre-commit-config.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ repos:
1313
entry: poetry run black
1414
language: system
1515
types: [file, python]
16-
files: '^(src|test)/'
16+
files: '^(src|tests)/'
1717
- id: isort
1818
name: isort
1919
entry: poetry run isort
2020
language: system
2121
types: [file, python]
22-
files: '^(src|test)/'
22+
files: '^(src|tests)/'
2323
- id: flake8
2424
name: flake8
2525
entry: poetry run flake8
2626
language: system
2727
types: [file, python]
28-
files: '^(src|test)/'
28+
files: '^(src|tests)/'

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# File calculation parser
2+
3+
![Coverage](https://codecov.io/gh/glefer-training/file-parser/branch/main/graph/badge.svg)

src/file_calculation_parser/main.py

Lines changed: 0 additions & 2 deletions
This file was deleted.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class TextFileReader:
2+
def __init__(self, filename: str):
3+
self._filename = filename
4+
5+
def read(self):
6+
with open(self._filename, "r", encoding="utf-8") as f:
7+
yield from (row.strip() for row in f if row.strip())

tests/test_a.py

Lines changed: 0 additions & 2 deletions
This file was deleted.

tests/test_reader.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import os
2+
import tempfile
3+
import unittest
4+
5+
from src.file_calculation_parser.reader import TextFileReader
6+
7+
8+
class TestTextReader(unittest.TestCase):
9+
def setUp(self):
10+
"""Create temporary file with some rows to testing"""
11+
self._temp_filename: str = tempfile.NamedTemporaryFile(delete=False).name
12+
self._files_rows: list = ["row1", "row2", "row3", " ", "", "\n"]
13+
14+
with open(self._temp_filename, "w", encoding="utf-8") as f:
15+
f.write("\n".join(self._files_rows))
16+
17+
def test_can_read_each_rows(self):
18+
"""Check if TextReader read each file and remove empty rows"""
19+
reader: TextFileReader = TextFileReader(self._temp_filename)
20+
expected_result: list = [row.strip() for row in self._files_rows if row.strip()]
21+
self.assertListEqual(list(reader.read()), expected_result)
22+
23+
def tearDown(self):
24+
if os.path.exists(self._temp_filename):
25+
os.remove(self._temp_filename)

0 commit comments

Comments
 (0)