Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .github/workflows/checker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,51 @@ name: CI
on:
push:
branches: [ main ]
paths:
- '**/*.py'
pull_request:
branches: [ main ]
paths:
- '**/*.py'

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.13'

- name: Install linters
run: |
python -m pip install --upgrade pip
pip install ruff==0.14.0 mypy==1.18.2

- name: Collect Python files
id: files
shell: bash
run: |
FILES=$(git ls-files '*.py' 'homework_*/*.py' 'homework_*/**/*.py')
if [ -z "$FILES" ]; then
echo "none=true" >> "$GITHUB_OUTPUT"
else
printf "%s\n" $FILES > py-files.txt
echo "none=false" >> "$GITHUB_OUTPUT"
fi

- name: Ruff lint
if: steps.files.outputs.none == 'false'
run: |
xargs -a py-files.txt ruff check

- name: Ruff format check
if: steps.files.outputs.none == 'false'
run: |
xargs -a py-files.txt ruff format --check

- name: Mypy type-check
if: steps.files.outputs.none == 'false'
run: |
xargs -a py-files.txt mypy
13 changes: 13 additions & 0 deletions homework_oop/errors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from typing import Iterable


class FieldNotFoundError(KeyError):
def __init__(self, field: str, candidates: Iterable[str]):
self.field = field
self.candidates = tuple(candidates)
message = f"Unknown field: {field}. Did you mean: {', '.join(self.candidates)}"
super().__init__(message)


class InvalidOperationError(Exception):
pass
6 changes: 6 additions & 0 deletions homework_oop/init.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from .reader import CsvRepositoryReader
from .query import DataQuery
from .stats import StatsCalculator
from .storage import StatsSerializer
from .user import UserProfile
from .errors import FieldNotFoundError, InvalidOperationError
10 changes: 10 additions & 0 deletions homework_oop/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from pathlib import Path
from homework_oop import CsvRepositoryReader

def Run():
CsvPath = Path(__file__).parent / "homework_oop" / "repositories.csv"
Rows = CsvRepositoryReader(CsvPath).read()
return Rows

if __name__ == "__main__":
Run()
Loading
Loading