Skip to content

Commit 7c00e78

Browse files
committed
ci: make everything work on CodeSpace
1 parent 92dc912 commit 7c00e78

14 files changed

Lines changed: 376 additions & 119 deletions

File tree

.devcontainer/devcontainer.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"${workspaceFolder}/src"
3131
],
3232
"python.testing.pytestArgs": [
33-
"src"
33+
"tests"
3434
],
3535
"python.testing.unittestEnabled": false,
3636
"python.testing.pytestEnabled": true
@@ -42,7 +42,8 @@
4242
"ms-python.vscode-pylance",
4343
"charliermarsh.ruff",
4444
"ms-python.pylint",
45-
"tamasfe.even-better-toml"
45+
"tamasfe.even-better-toml",
46+
"yzhang.markdown-all-in-one"
4647
]
4748
}
4849
}

.python-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.12
1+
3.13

.vscode/testing.code-snippets

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"Arrange/Act/Assert test": {
3+
"scope": "python",
4+
"prefix": "aaa",
5+
"body": [
6+
"# Arrange",
7+
"$1",
8+
"# Act",
9+
"",
10+
"# Assert",
11+
""
12+
],
13+
"description": "Add Arrange/Act/Assert test structure"
14+
}
15+
}

Makefile

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
PYTEST := uv run pytest
2+
PYLINT := uv run pylint
3+
PYRIGHT := uv run pyright
4+
RUFF := uv run ruff
5+
RADON := uv run radon
6+
CLI := uv run src/gilded_rose/main.py
7+
LINT_DIRECTORIES := src/gilded_rose tests
8+
9+
.PHONY: install
10+
install:
11+
$(CLI)
12+
13+
.PHONY: run
14+
run:
15+
$(CLI)
16+
17+
.PHONY: test
18+
test:
19+
$(PYTEST) -v --cov-report term --cov=src/gilded_rose
20+
21+
.PHONY: lint
22+
lint:
23+
$(PYLINT) $(LINT_DIRECTORIES)
24+
$(PYRIGHT) $(LINT_DIRECTORIES)
25+
$(RUFF) format $(LINT_DIRECTORIES)
26+
$(RUFF) check --fix $(LINT_DIRECTORIES)
27+
28+
.PHONY: analyze
29+
analyze:
30+
$(RADON) cc src/
31+
@echo
32+
@echo "To know more about cyclomatic complexity:"
33+
@echo " - https://radon.readthedocs.io/en/latest/intro.html#cyclomatic-complexity"
34+
@echo " - https://radon.readthedocs.io/en/latest/commandline.html#the-cc-command"

README.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,31 @@
11
# Gilded Rose starting position in Python
22

3+
## Credits
4+
5+
This is heavily inspired from [@emilybache](https://github.com/emilybache)'s kata ([code](https://github.com/emilybache/GildedRose-Refactoring-Kata/tree/main/python)) initially created by [Terry Hughes](https://x.com/TerryHughes) in 2011 ([source](https://web.archive.org/web/20240525015111/https://iamnotmyself.com/refactor-this-the-gilded-rose-kata/)).
6+
7+
The essence of the kata is exactly the same but the surroundings have been adapted to have a setup more intuitive with pytest, Dev containers, uv and more.
8+
9+
## Exercice
10+
311
For exercise instructions, check out the [requirements](./docs/requirements.md).
412

513
## Setup
614

715
You need [uv](https://docs.astral.sh/uv/) installed.
816

917
```shell
10-
uv sync
18+
make install
1119
```
1220

1321
## Run the example
1422

1523
```
16-
uv run gilded_rose/main.py
24+
make run
1725
```
1826

1927
## Run the unit tests
2028

2129
```
22-
uv run pytest
30+
make test
2331
```

docs/requirements.md

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

docs/specifications.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Spécification technique de la **Rose dorée**
2+
3+
## Introduction
4+
5+
Bienvenue dans l'équipe de **La rose dorée**. Comme vous le savez, nous sommes une petite auberge idéalement située, tenue par une aubergiste sympathique nommée Allison. Nous achetons et vendons uniquement les meilleurs produits !
6+
7+
Malheureusement, nos articles perdent constamment en **qualité** à mesure qu'ils approchent de leur date limite de vente.
8+
9+
Nous avons un système en place qui met à jour notre inventaire automatiquement. Il a été développé par un certain Leeroy, un type sérieux qui est maintenant parti vers de nouvelles aventures. Votre mission est d’ajouter une nouvelle fonctionnalité à notre système afin que nous puissions commencer à vendre une nouvelle catégorie d’articles.
10+
11+
## Spécifications
12+
13+
### Existant
14+
15+
Voici d'abord une introduction à notre système :
16+
17+
- Tous les `items` ont une valeur `sell_in` qui indique le nombre de jours qu’il nous reste pour les vendre
18+
- Tous les `items` ont une valeur de `quality` qui indique à quel point l’article est précieux
19+
- À la fin de chaque journée, notre système diminue ces deux valeurs pour chaque item
20+
21+
Assez simple, non ? C’est là que ça devient intéressant :
22+
23+
- Une fois la date limite dépassée, la `quality` diminue deux fois plus vite
24+
- La `quality` d’un item n’est jamais négative
25+
- `"Aged Brie"` augmente en fait en `quality` avec le temps
26+
- La `quality` d’un item ne dépasse jamais `50`
27+
- `"Sulfuras"`, en tant qu’item légendaire, n’a jamais besoin d’être vendu et ne perd jamais en `quality`
28+
- Les `"Backstage passes"`, comme le `"Aged Brie"`, augmentent en `quality` à mesure que leur `sell_in` approche :
29+
- La `quality` augmente de `2` lorsqu’il reste `10` jours ou moins, et de `3` lorsqu’il reste `5` jours ou moins, mais
30+
- La `quality` tombe à `0` après le concert
31+
- un item ne peut jamais voir sa `quality` dépasser `50`, cependant `"Sulfuras"` est un item légendaire et, en tant que tel, sa `quality` est de `80` et elle ne change jamais
32+
33+
### Nouvelle fonctionnalité
34+
35+
Nous avons récemment signé un contrat avec un fournisseur d’items conjurés. Cela nécessite une mise à jour de notre système :
36+
37+
- Les items `"Conjured"` se détériorent en `quality` deux fois plus vite que les items normaux
38+
39+
## Cadre
40+
41+
N’hésitez pas à modifier la méthode `update_quality` et à ajouter du nouveau code tant que tout fonctionne correctement.
42+
43+
Cependant, ne modifiez pas la classe `Item` ni la propriété `Items`, car elles appartiennent au gobelin dans le coin, qui entrerait instantanément en rage et vous tuerait d’un seul coup — il ne croit pas au partage de code (vous pouvez rendre la méthode `UpdateQuality` et la propriété `Items` statiques si vous le souhaitez, nous vous couvrirons).

gilded_rose/main.py

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

pyproject.toml

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,35 @@ name = "gilded-rose-kata"
33
version = "0.1.0"
44
description = "Gilded rose kata"
55
readme = "README.md"
6-
requires-python = ">=3.12"
7-
dependencies = []
6+
requires-python = ">=3.13"
7+
dependencies = [
8+
"radon>=6.0.1",
9+
]
10+
11+
[build-system]
12+
build-backend = "hatchling.build"
13+
requires = [
14+
"hatchling",
15+
]
816

917
[tool.uv]
1018
dev-dependencies = [
19+
"pylint>=3.3.7",
20+
"pyright>=1.1.403",
1121
"pytest-cov>=5.0.0",
1222
"pytest>=8.3.3",
23+
"radon>=6.0.1",
24+
"ruff>=0.12.7",
25+
]
26+
27+
[tool.hatch.build.targets.wheel]
28+
packages = [
29+
"src/gilded_rose",
30+
"tests",
31+
]
32+
33+
[tool.coverage.run]
34+
omit = [
35+
"tests/**/*",
36+
"src/gilded_rose/main.py"
1337
]

0 commit comments

Comments
 (0)