Skip to content

Commit 28762d4

Browse files
authored
Split sections on sub-sections
1 parent 92c0e50 commit 28762d4

File tree

1 file changed

+57
-45
lines changed

1 file changed

+57
-45
lines changed

README.md

Lines changed: 57 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,37 @@
66
[<img src="https://evrone.com/logo/evrone-sponsored-logo.png" width=300>](https://evrone.com/?utm_source=github.com&utm_campaign=evrone-python-codestyle)
77

88
## Содержание
9-
- [Основные принципы при написании кода](#основные-принципы-при-написании-кода)
109
- [Про код](#про-код)
11-
- [Размеры методов, функций и модулей](#размеры-методов-функций-и-модулей)
12-
- [Импорты](#импорты)
13-
- [Файлы `__init__.py`](#файлы-__init__py)
14-
- [Докстринги](#докстринги)
15-
- [Документация к REST API](#документация-к-rest-api)
10+
- [Основные принципы](#основные-принципы)
11+
- [Атомарность операций](#атомарность-операций)
12+
- [Размеры методов, функций и модулей](#размеры-методов-функций-и-модулей)
13+
- [Импорты](#импорты)
14+
- [Файлы `__init__.py`](#файлы-__init__py)
15+
- [Докстринги](#докстринги)
1616
- [Про Pull Request](#про-pull-request)
17-
- [Размер Pull Request](#размер-pull-request)
18-
- [Пакетный менеджер](#пакетный-менеджер)
19-
- [Форматирование кода](#форматирование-кода)
20-
- [Типизация](#типизация)
17+
- [Создание Pull Request](#создание-pull-request)
18+
- [Размер Pull Request](#размер-pull-request)
19+
- [Про тулинг](#про-тулинг)
20+
- [Пакетный менеджер](#пакетный-менеджер)
21+
- [Форматирование кода](#форматирование-кода)
22+
- [Pre-commit хуки](#pre-commit-хуки)
23+
- [Типизация](#типизация)
24+
- [Прочее](#прочее)
25+
- [Документация к REST API](#документация-к-rest-api)
2126

2227

23-
## Основные принципы при написании кода
28+
## Про код
29+
30+
### Основные принципы
2431
- **Поддерживаемость** (представьте, сможете ли вы понять свой код через год или через два)
2532
- **Простота** (между сложным и простым решением следует выбрать простое)
2633
- **Очевидность** (представьте, когда подключится новый программист, насколько ему будет понятно, почему именно **так** написан этот код)
2734

2835

29-
## Про код
36+
### Атомарность операций
3037
**1 действие ~ 1 строка**
3138

32-
На каждой строке надо постараться делать ровно одно действие.
39+
Постарайтесь делать атомарные операции в коде - на каждой строке ровно **одно** действие.
3340

3441
Плохо ❌:
3542
```python
@@ -74,7 +81,7 @@ result = calculate_weather(hello)
7481
**Почему?** Потому что код становится более читабельным, не нужно исполнять несколько выражений в голове во время чтения кода. Разбитый до простых атомных операций код воспринимается гораздо лучше, чем сложный уан-лайнер. Постарайтесь упростить свой код настолько, насколько это возможно - код чаще читается, чем пишется.
7582

7683

77-
## Размеры методов, функций и модулей
84+
### Размеры методов, функций и модулей
7885

7986
Предельный размер метода или функции - **50** строк.
8087
Достижение предельного размера говорит о том, что функция (метод) делает слишком много - декомпозируйте действия внутри функции (метода).
@@ -86,7 +93,7 @@ result = calculate_weather(hello)
8693
Длина строки - 100 символов.
8794

8895

89-
## Импорты
96+
### Импорты
9097

9198
Рекомендуемый способ импортирования - абсолютный.
9299

@@ -107,36 +114,31 @@ from some.absolute.path import foo, bar
107114
импорте всегда нужно помнить путь и вычислять в уме локацию модулей `foo.py`, `bar.py` относительно `spam.py`
108115

109116

110-
## Файлы `__init__.py`
117+
### Файлы `__init__.py`
111118

112119
В `__init__.py` файлах пишем только импорты.
113120

114121
**Почему?** Потому что `__init__.py` - последнее место, в которое посмотрит программист, который будет читать код в будущем.
115122

116123

117-
## Докстринги
124+
### Докстринги
118125
Рекомендуем добавлять докстринги в функции, методы и классы.
119126

120127
**Почему?** Потому что программист, который впервые увидит ваш код, сможет быстрее понять, что в нем происходит.
121128
Код читается намного больше, чем пишется.
122129

123130

124-
## Документация к REST API
125-
Рекомендуемый формат документации - [OpenAPI](https://www.openapis.org).
126-
Схема для OpenAPI должна генерироваться "на лету", чтобы обеспечивать клиентов API свежими изменениями.
127-
128-
**Почему?** Потому что это один из распространенных форматов для документирования REST API, которая вышла из Swagger. Данный формат документации поддерживается большим количеством клиентов (Swagger, Postman, Insomnia Designer и многие другие). Также, рукописная документация имеет свойство быстро устаревать, а документация, которая генерируется напрямую из кода позволяет не думать о постоянном обновлении документации.
129-
130-
131131
## Про Pull Request
132+
133+
### Создание Pull Request
132134
**1 Pull Request = 1 issue**
133135

134136
Один Pull Request должен решать ровно одно issue.
135137

136138
**Почему?** Потому что ревьюверу сложнее держать контекст нескольких задач в голове и переключаться между ними.
137139

138140

139-
## Размер Pull Request
141+
### Размер Pull Request
140142
Итоговый дифф PR не должен превышать +/- 600 измененных строк.
141143

142144
Плохо ❌:
@@ -158,14 +160,15 @@ from some.absolute.path import foo, bar
158160
Также, большинству ревьюверов будет сложно воспринять такой объем изменений за один раз.
159161

160162

161-
## Пакетный менеджер
163+
## Тулинг
162164

163-
[poetry](https://python-poetry.org) - менеджер зависимостей и сборщик пакетов
165+
### Пакетный менеджер (poetry)
164166

167+
[poetry](https://python-poetry.org) - менеджер зависимостей и сборщик пакетов
165168

166-
## Форматирование кода
167169

168-
[black](https://black.readthedocs.io/en/stable/) - автоформаттер кода по PEP8
170+
### Форматирование кода (Black)
171+
[Black](https://black.readthedocs.io/en/stable/) - автоформаттер кода по PEP8
169172

170173
Рекомендуемый конфиг в `pyproject.toml`:
171174
```toml
@@ -192,6 +195,7 @@ exclude = '''
192195
```
193196

194197

198+
### Форматирование импортов (isort)
195199
[isort](https://pycqa.github.io/isort/) - автоформаттер блока импортов
196200

197201
Рекомендуемый конфиг в `pyproject.toml`:
@@ -209,6 +213,7 @@ lines_after_imports = 2
209213
```
210214

211215

216+
### Линтер (flake8)
212217
[flake8](https://flake8.pycqa.org/en/latest/) - валидатор соответствия PEP8
213218

214219
Рекомендуемый конфиг в `.flake8`:
@@ -223,7 +228,24 @@ per-file-ignores =
223228
```
224229

225230

226-
## Pre-commit хуки
231+
### Тайп-чекер (mypy)
232+
233+
[mypy](http://mypy.readthedocs.io) - чекер для статической типизации
234+
235+
Рекомендуемый конфиг `mypy.ini`:
236+
237+
```ini
238+
[mypy]
239+
ignore_missing_imports = True
240+
allow_untyped_globals = True
241+
242+
[mypy-*.migrations.*]
243+
ignore_errors = True
244+
245+
```
246+
247+
248+
### Pre-commit хуки (pre-commit)
227249

228250
[pre-commit](https://pre-commit.com) - фреймворк для управления `pre-commit` хуками
229251

@@ -250,20 +272,10 @@ repos:
250272
```
251273

252274

253-
## Типизация
275+
## Прочее
254276

255-
[mypy](http://mypy.readthedocs.io) - чекер для статической типизации
256-
257-
258-
Рекомендуемый конфиг `mypy.ini`:
259-
260-
```ini
261-
[mypy]
262-
ignore_missing_imports = True
263-
allow_untyped_globals = True
264-
265-
[mypy-*.migrations.*]
266-
ignore_errors = True
267-
268-
```
277+
### Документация к REST API
278+
Рекомендуемый формат документации - [OpenAPI](https://www.openapis.org).
279+
Схема для OpenAPI должна генерироваться "на лету", чтобы обеспечивать клиентов API свежими изменениями.
269280

281+
**Почему?** Потому что это один из распространенных форматов для документирования REST API, который вышел из Swagger. Данный формат документации поддерживается большим количеством клиентов (Swagger, Postman, Insomnia Designer и многие другие). Также, рукописная документация имеет свойство быстро устаревать, а документация, которая генерируется напрямую из кода позволяет не думать о постоянном обновлении документации.

0 commit comments

Comments
 (0)