Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Lelikov-DBP committed Jan 24, 2022
1 parent 7f67621 commit 09617a3
Show file tree
Hide file tree
Showing 11 changed files with 104 additions and 132 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,19 @@

```sh
docker-compose build
docker-compose run --rm python
docker-compose run --rm python-course
```

## Запуск тестов

```sh
docker-compose run --rm python coverage run -m pytest
docker-compose run --rm python-course pytest
```

## Запуск линтеров

```sh
docker-compose run --rm python bash -c "black --check . && mypy . && flake8"
docker-compose run --rm python-course bash -c "black --check . && mypy . && flake8"
```

## Задача
Expand All @@ -31,6 +31,6 @@ docker-compose run --rm python bash -c "black --check . && mypy . && flake8"

Далее для каждой из задач реализовать недостающие методы так, чтобы все тесты проходили. Дополнительную информацию можно найти в комментарии к тесту.

Проверять можно запуская `docker-compose run --rm python coverage run -m pytest`
Проверять можно запуская `docker-compose run --rm python-course coverage run -m pytest`

3. После того как все тесты проходят, нужно создать pull request в своем репозитори в `main` и отправить на ревью.
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
version: "3.7"
services:
python:
python-course:
build: .
volumes:
- .:/app
4 changes: 2 additions & 2 deletions exercises/filter_map.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from typing import Callable
from typing import Any, Callable, List, Tuple


class FilterMapExercise:
@staticmethod
def filter_map(func: Callable, input_array: list) -> list:
def filter_map(func: Callable[[Any], Tuple[bool, Any]], input_array: List[Any]) -> List[Any]:
"""
Реализовать функцию, которая ведет себя как filter и map. К каждому значению из
списка применяется функция, которая в ответ возвращает кортеж
Expand Down
7 changes: 5 additions & 2 deletions exercises/flask.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@

class FlaskExercise:
"""
Вы должны создать роутинг для обработки CRUD запросов.
Вы должны создать API для обработки CRUD запросов.
В данной задаче все пользователи хранятся в одном словаре, где ключ - это имя пользователя,
а значение - его параметры. {"user1": {"age": 33}, "user2": {"age": 20}}
POST /user - создание пользователя.
В теле запроса приходит JSON в формате {"name": <имя пользователя>}.
Ответ должен вернуться так же в JSON в формате {"data": "User <имя пользователя> is created!"}
Expand All @@ -24,4 +27,4 @@ class FlaskExercise:

@staticmethod
def configure_routes(app: Flask) -> None:
pass
pass
8 changes: 5 additions & 3 deletions exercises/map.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ class MapExercise:
def rating(list_of_movies: list[dict]) -> float:
"""
!!Задание нужно решить используя map!!
Посчитать средний рейтинг фильмов у которых две или больше стран.
Посчитать средний рейтинг фильмов (rating_kinopoisk) у которых две или больше стран.
Фильмы у которых рейтиг не задан или равен 0 не учитывать в расчете среднего.
:param list_of_movies: Список фильмов
:param list_of_movies: Список фильмов.
Ключи словаря: name, rating_kinopoisk, rating_imdb, genres, year, access_level, country
:return: Средний рейтинг фильмов у которых две или больше стран
"""
pass
Expand All @@ -17,9 +18,10 @@ def rating(list_of_movies: list[dict]) -> float:
def chars_count(list_of_movies: list[dict], rating: Union[float, int]) -> int:
"""
!!Задание нужно решить используя map!!
Посчитать количество букв 'и' в названиях всех фильмов с рейтингом больше
Посчитать количество букв 'и' в названиях всех фильмов с рейтингом (rating_kinopoisk) больше
или равным заданному значению
:param list_of_movies: Список фильмов
Ключи словаря: name, rating_kinopoisk, rating_imdb, genres, year, access_level, country
:param rating: Заданный рейтинг
:return: Количество букв 'и' в названиях всех фильмов с рейтингом больше
или равным заданному значению
Expand Down
104 changes: 11 additions & 93 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ Flask = "^2.0.2"
[tool.poetry.dev-dependencies]
flake8 = "^4.0.1"
black = "^21.12b0"
pytest-cov = "^3.0.0"
mypy = "^0.920"
pytest = "^6.2.5"

[build-system]
requires = ["poetry>=0.12"]
Expand Down
26 changes: 18 additions & 8 deletions tests/pass_test_filter_map.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
from exercises.filter_map import FilterMapExercise


def is_not_null_even(x: int) -> tuple[bool, int]:
if not x or x % 2:
return False, 0
return True, x


def square_positive(x: int) -> tuple[bool, int]:
if x >= 0:
return True, x * x
return False, 0


class TestFilterMapExercise:
def test_filter_map(self) -> None:
def is_odd(x: int) -> tuple[bool, int]:
if not x or x % 2:
return False, 0
return True, x

empty = FilterMapExercise.filter_map(is_odd, [])
assert not empty
assert isinstance(empty, list)
empty = FilterMapExercise.filter_map(is_not_null_even, [])
assert empty == []

filtered_list = FilterMapExercise.filter_map(is_odd, [-1, 0, 1, 2, 4])
filtered_list = FilterMapExercise.filter_map(is_not_null_even, [-1, 0, 1, 2, 4])
assert filtered_list == [2, 4]

filtered_list = FilterMapExercise.filter_map(is_not_null_even, [-1, 0, 1, 2, 4])
assert filtered_list == [0, 0, 1, 4, 16]
Loading

0 comments on commit 09617a3

Please sign in to comment.