examshell-python 0.1.3__tar.gz → 0.1.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- examshell_python-0.1.5/LICENSE +21 -0
- examshell_python-0.1.5/PKG-INFO +138 -0
- examshell_python-0.1.5/README.md +125 -0
- {examshell_python-0.1.3 → examshell_python-0.1.5}/pyproject.toml +1 -1
- examshell_python-0.1.5/src/examshell_python.egg-info/PKG-INFO +138 -0
- {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/SOURCES.txt +1 -0
- examshell_python-0.1.3/PKG-INFO +0 -10
- examshell_python-0.1.3/README.md +0 -0
- examshell_python-0.1.3/src/examshell_python.egg-info/PKG-INFO +0 -10
- {examshell_python-0.1.3 → examshell_python-0.1.5}/setup.cfg +0 -0
- {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/__init__.py +0 -0
- {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/__main__.py +0 -0
- {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/config.py +0 -0
- {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/data/data.json +0 -0
- {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/main.py +0 -0
- {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/models.py +0 -0
- {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/task_generator.py +0 -0
- {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/dependency_links.txt +0 -0
- {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/entry_points.txt +0 -0
- {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/requires.txt +0 -0
- {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Denys Bobrov
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: examshell-python
|
|
3
|
+
Version: 0.1.5
|
|
4
|
+
Summary: Interactive 42-style exam practice shell for Python exercises
|
|
5
|
+
Author: Denis
|
|
6
|
+
License: MIT
|
|
7
|
+
Requires-Python: >=3.10
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: pydantic>=2.0
|
|
11
|
+
Requires-Dist: rich>=13.0
|
|
12
|
+
Dynamic: license-file
|
|
13
|
+
|
|
14
|
+
# examshell-python
|
|
15
|
+
|
|
16
|
+
Interactive terminal shell for practising 42-style Python exam tasks. Simulates the real exam environment — timed pressure, blind grading, sequential levels — or lets you work through exercises freely in practice mode.
|
|
17
|
+
|
|
18
|
+
## Features
|
|
19
|
+
|
|
20
|
+
- **Two modes** — Real (exam simulation) and Practice (free training)
|
|
21
|
+
- **Automatic grading** — `grademe` runs your solution against test cases and shows a results table
|
|
22
|
+
- **Multi-language task descriptions** — each task is described in EN, DE, FR, ES, IT
|
|
23
|
+
- **14 tasks across 6 levels** — from easy warm-ups to hard algorithmic challenges
|
|
24
|
+
- **Clean terminal UI** — built with [Rich](https://github.com/Textualize/rich)
|
|
25
|
+
|
|
26
|
+
## Installation
|
|
27
|
+
|
|
28
|
+
Requires Python 3.10+.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pip install examshell-python
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Or install from source:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
git clone <repo-url>
|
|
38
|
+
cd examshell-python
|
|
39
|
+
pip install .
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Usage
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
examshell42
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
On launch you choose a mode:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
╭─ Choose your Exam mode ─╮
|
|
52
|
+
│ Real mode (1) │
|
|
53
|
+
│ Practice mode (2) │
|
|
54
|
+
╰─────────────────────────╯
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Real mode
|
|
58
|
+
|
|
59
|
+
Simulates the actual exam. Tasks are drawn randomly per level. Each correct solution earns **+16 points**; reach 100 to pass.
|
|
60
|
+
|
|
61
|
+
| Command | Description |
|
|
62
|
+
|------------|------------------------------|
|
|
63
|
+
| `grademe` | Check your solution |
|
|
64
|
+
| `status` | Show current task info again |
|
|
65
|
+
| `finish` | End the exam |
|
|
66
|
+
|
|
67
|
+
### Practice mode
|
|
68
|
+
|
|
69
|
+
Work through all tasks in any order, retry freely, no score pressure.
|
|
70
|
+
|
|
71
|
+
| Command | Description |
|
|
72
|
+
|------------|----------------------------------|
|
|
73
|
+
| `grademe` | Check your solution |
|
|
74
|
+
| `list` | Show all available tasks |
|
|
75
|
+
| `choose` | Pick a task by number |
|
|
76
|
+
| `skip` | Move to the next task |
|
|
77
|
+
| `status` | Show current task info again |
|
|
78
|
+
| `finish` | End the practice session |
|
|
79
|
+
|
|
80
|
+
## How it works
|
|
81
|
+
|
|
82
|
+
When a session starts, examshell creates a working directory (`exam42/`) with two sub-folders:
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
exam42/
|
|
86
|
+
├── subjects/
|
|
87
|
+
│ └── <task_name>/
|
|
88
|
+
│ ├── <task_name>.en.txt ← task description + signature + examples
|
|
89
|
+
│ ├── <task_name>.de.txt
|
|
90
|
+
│ └── ...
|
|
91
|
+
└── rendu/
|
|
92
|
+
└── <task_name>/
|
|
93
|
+
└── <task_name>.py ← put your solution here
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Write your solution in `rendu/<task_name>/<task_name>.py`, then run `grademe`. The shell imports your file, executes each example against it, and prints a pass/fail table.
|
|
97
|
+
|
|
98
|
+
## Tasks
|
|
99
|
+
|
|
100
|
+
| Level | Difficulty | Task |
|
|
101
|
+
|-------|------------|------|
|
|
102
|
+
| 1 | Easy | `py_bracket_validator` — validate bracket pairs `()[]{}` |
|
|
103
|
+
| 1 | Easy | `py_cryptic_sorter` — custom sort logic |
|
|
104
|
+
| 2 | Easy | `py_echo_validator` — string validation |
|
|
105
|
+
| 2 | Easy | `py_mirror_matrix` — matrix mirroring |
|
|
106
|
+
| 3 | Medium | `py_hidenp` — hidden number problem |
|
|
107
|
+
| 3 | Medium | `py_inter` — intersection of sequences |
|
|
108
|
+
| 3 | Medium | `py_number_base_converter` — base conversion |
|
|
109
|
+
| 3 | Medium | `py_pattern_tracker` — pattern detection |
|
|
110
|
+
| 4 | Medium | `py_anagram` — anagram check |
|
|
111
|
+
| 4 | Medium | `py_shadow_merge` — merge operations |
|
|
112
|
+
| 4 | Medium | `py_string_permutation_checker` — permutation check |
|
|
113
|
+
| 5 | Hard | `py_string_sculptor` — string transformation |
|
|
114
|
+
| 5 | Hard | `py_twist_sequence` — sequence manipulation |
|
|
115
|
+
| 6 | Hard | `py_whisper_cipher` — cipher encoding |
|
|
116
|
+
|
|
117
|
+
## Dependencies
|
|
118
|
+
|
|
119
|
+
- [`pydantic`](https://docs.pydantic.dev/) ≥ 2.0 — task data models
|
|
120
|
+
- [`rich`](https://github.com/Textualize/rich) ≥ 13.0 — terminal UI
|
|
121
|
+
|
|
122
|
+
## Project structure
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
src/examshell/
|
|
126
|
+
├── __init__.py
|
|
127
|
+
├── __main__.py
|
|
128
|
+
├── main.py # CLI entry point, mode logic, UI screens
|
|
129
|
+
├── models.py # Pydantic models (Task, Description, Example)
|
|
130
|
+
├── task_generator.py # TaskManager: file creation, grading, task selection
|
|
131
|
+
├── config.py
|
|
132
|
+
└── data/
|
|
133
|
+
└── data.json # All task definitions
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## License
|
|
137
|
+
|
|
138
|
+
MIT
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# examshell-python
|
|
2
|
+
|
|
3
|
+
Interactive terminal shell for practising 42-style Python exam tasks. Simulates the real exam environment — timed pressure, blind grading, sequential levels — or lets you work through exercises freely in practice mode.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Two modes** — Real (exam simulation) and Practice (free training)
|
|
8
|
+
- **Automatic grading** — `grademe` runs your solution against test cases and shows a results table
|
|
9
|
+
- **Multi-language task descriptions** — each task is described in EN, DE, FR, ES, IT
|
|
10
|
+
- **14 tasks across 6 levels** — from easy warm-ups to hard algorithmic challenges
|
|
11
|
+
- **Clean terminal UI** — built with [Rich](https://github.com/Textualize/rich)
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
Requires Python 3.10+.
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pip install examshell-python
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Or install from source:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
git clone <repo-url>
|
|
25
|
+
cd examshell-python
|
|
26
|
+
pip install .
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
examshell42
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
On launch you choose a mode:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
╭─ Choose your Exam mode ─╮
|
|
39
|
+
│ Real mode (1) │
|
|
40
|
+
│ Practice mode (2) │
|
|
41
|
+
╰─────────────────────────╯
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Real mode
|
|
45
|
+
|
|
46
|
+
Simulates the actual exam. Tasks are drawn randomly per level. Each correct solution earns **+16 points**; reach 100 to pass.
|
|
47
|
+
|
|
48
|
+
| Command | Description |
|
|
49
|
+
|------------|------------------------------|
|
|
50
|
+
| `grademe` | Check your solution |
|
|
51
|
+
| `status` | Show current task info again |
|
|
52
|
+
| `finish` | End the exam |
|
|
53
|
+
|
|
54
|
+
### Practice mode
|
|
55
|
+
|
|
56
|
+
Work through all tasks in any order, retry freely, no score pressure.
|
|
57
|
+
|
|
58
|
+
| Command | Description |
|
|
59
|
+
|------------|----------------------------------|
|
|
60
|
+
| `grademe` | Check your solution |
|
|
61
|
+
| `list` | Show all available tasks |
|
|
62
|
+
| `choose` | Pick a task by number |
|
|
63
|
+
| `skip` | Move to the next task |
|
|
64
|
+
| `status` | Show current task info again |
|
|
65
|
+
| `finish` | End the practice session |
|
|
66
|
+
|
|
67
|
+
## How it works
|
|
68
|
+
|
|
69
|
+
When a session starts, examshell creates a working directory (`exam42/`) with two sub-folders:
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
exam42/
|
|
73
|
+
├── subjects/
|
|
74
|
+
│ └── <task_name>/
|
|
75
|
+
│ ├── <task_name>.en.txt ← task description + signature + examples
|
|
76
|
+
│ ├── <task_name>.de.txt
|
|
77
|
+
│ └── ...
|
|
78
|
+
└── rendu/
|
|
79
|
+
└── <task_name>/
|
|
80
|
+
└── <task_name>.py ← put your solution here
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Write your solution in `rendu/<task_name>/<task_name>.py`, then run `grademe`. The shell imports your file, executes each example against it, and prints a pass/fail table.
|
|
84
|
+
|
|
85
|
+
## Tasks
|
|
86
|
+
|
|
87
|
+
| Level | Difficulty | Task |
|
|
88
|
+
|-------|------------|------|
|
|
89
|
+
| 1 | Easy | `py_bracket_validator` — validate bracket pairs `()[]{}` |
|
|
90
|
+
| 1 | Easy | `py_cryptic_sorter` — custom sort logic |
|
|
91
|
+
| 2 | Easy | `py_echo_validator` — string validation |
|
|
92
|
+
| 2 | Easy | `py_mirror_matrix` — matrix mirroring |
|
|
93
|
+
| 3 | Medium | `py_hidenp` — hidden number problem |
|
|
94
|
+
| 3 | Medium | `py_inter` — intersection of sequences |
|
|
95
|
+
| 3 | Medium | `py_number_base_converter` — base conversion |
|
|
96
|
+
| 3 | Medium | `py_pattern_tracker` — pattern detection |
|
|
97
|
+
| 4 | Medium | `py_anagram` — anagram check |
|
|
98
|
+
| 4 | Medium | `py_shadow_merge` — merge operations |
|
|
99
|
+
| 4 | Medium | `py_string_permutation_checker` — permutation check |
|
|
100
|
+
| 5 | Hard | `py_string_sculptor` — string transformation |
|
|
101
|
+
| 5 | Hard | `py_twist_sequence` — sequence manipulation |
|
|
102
|
+
| 6 | Hard | `py_whisper_cipher` — cipher encoding |
|
|
103
|
+
|
|
104
|
+
## Dependencies
|
|
105
|
+
|
|
106
|
+
- [`pydantic`](https://docs.pydantic.dev/) ≥ 2.0 — task data models
|
|
107
|
+
- [`rich`](https://github.com/Textualize/rich) ≥ 13.0 — terminal UI
|
|
108
|
+
|
|
109
|
+
## Project structure
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
src/examshell/
|
|
113
|
+
├── __init__.py
|
|
114
|
+
├── __main__.py
|
|
115
|
+
├── main.py # CLI entry point, mode logic, UI screens
|
|
116
|
+
├── models.py # Pydantic models (Task, Description, Example)
|
|
117
|
+
├── task_generator.py # TaskManager: file creation, grading, task selection
|
|
118
|
+
├── config.py
|
|
119
|
+
└── data/
|
|
120
|
+
└── data.json # All task definitions
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## License
|
|
124
|
+
|
|
125
|
+
MIT
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: examshell-python
|
|
3
|
+
Version: 0.1.5
|
|
4
|
+
Summary: Interactive 42-style exam practice shell for Python exercises
|
|
5
|
+
Author: Denis
|
|
6
|
+
License: MIT
|
|
7
|
+
Requires-Python: >=3.10
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: pydantic>=2.0
|
|
11
|
+
Requires-Dist: rich>=13.0
|
|
12
|
+
Dynamic: license-file
|
|
13
|
+
|
|
14
|
+
# examshell-python
|
|
15
|
+
|
|
16
|
+
Interactive terminal shell for practising 42-style Python exam tasks. Simulates the real exam environment — timed pressure, blind grading, sequential levels — or lets you work through exercises freely in practice mode.
|
|
17
|
+
|
|
18
|
+
## Features
|
|
19
|
+
|
|
20
|
+
- **Two modes** — Real (exam simulation) and Practice (free training)
|
|
21
|
+
- **Automatic grading** — `grademe` runs your solution against test cases and shows a results table
|
|
22
|
+
- **Multi-language task descriptions** — each task is described in EN, DE, FR, ES, IT
|
|
23
|
+
- **14 tasks across 6 levels** — from easy warm-ups to hard algorithmic challenges
|
|
24
|
+
- **Clean terminal UI** — built with [Rich](https://github.com/Textualize/rich)
|
|
25
|
+
|
|
26
|
+
## Installation
|
|
27
|
+
|
|
28
|
+
Requires Python 3.10+.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pip install examshell-python
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Or install from source:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
git clone <repo-url>
|
|
38
|
+
cd examshell-python
|
|
39
|
+
pip install .
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Usage
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
examshell42
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
On launch you choose a mode:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
╭─ Choose your Exam mode ─╮
|
|
52
|
+
│ Real mode (1) │
|
|
53
|
+
│ Practice mode (2) │
|
|
54
|
+
╰─────────────────────────╯
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Real mode
|
|
58
|
+
|
|
59
|
+
Simulates the actual exam. Tasks are drawn randomly per level. Each correct solution earns **+16 points**; reach 100 to pass.
|
|
60
|
+
|
|
61
|
+
| Command | Description |
|
|
62
|
+
|------------|------------------------------|
|
|
63
|
+
| `grademe` | Check your solution |
|
|
64
|
+
| `status` | Show current task info again |
|
|
65
|
+
| `finish` | End the exam |
|
|
66
|
+
|
|
67
|
+
### Practice mode
|
|
68
|
+
|
|
69
|
+
Work through all tasks in any order, retry freely, no score pressure.
|
|
70
|
+
|
|
71
|
+
| Command | Description |
|
|
72
|
+
|------------|----------------------------------|
|
|
73
|
+
| `grademe` | Check your solution |
|
|
74
|
+
| `list` | Show all available tasks |
|
|
75
|
+
| `choose` | Pick a task by number |
|
|
76
|
+
| `skip` | Move to the next task |
|
|
77
|
+
| `status` | Show current task info again |
|
|
78
|
+
| `finish` | End the practice session |
|
|
79
|
+
|
|
80
|
+
## How it works
|
|
81
|
+
|
|
82
|
+
When a session starts, examshell creates a working directory (`exam42/`) with two sub-folders:
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
exam42/
|
|
86
|
+
├── subjects/
|
|
87
|
+
│ └── <task_name>/
|
|
88
|
+
│ ├── <task_name>.en.txt ← task description + signature + examples
|
|
89
|
+
│ ├── <task_name>.de.txt
|
|
90
|
+
│ └── ...
|
|
91
|
+
└── rendu/
|
|
92
|
+
└── <task_name>/
|
|
93
|
+
└── <task_name>.py ← put your solution here
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Write your solution in `rendu/<task_name>/<task_name>.py`, then run `grademe`. The shell imports your file, executes each example against it, and prints a pass/fail table.
|
|
97
|
+
|
|
98
|
+
## Tasks
|
|
99
|
+
|
|
100
|
+
| Level | Difficulty | Task |
|
|
101
|
+
|-------|------------|------|
|
|
102
|
+
| 1 | Easy | `py_bracket_validator` — validate bracket pairs `()[]{}` |
|
|
103
|
+
| 1 | Easy | `py_cryptic_sorter` — custom sort logic |
|
|
104
|
+
| 2 | Easy | `py_echo_validator` — string validation |
|
|
105
|
+
| 2 | Easy | `py_mirror_matrix` — matrix mirroring |
|
|
106
|
+
| 3 | Medium | `py_hidenp` — hidden number problem |
|
|
107
|
+
| 3 | Medium | `py_inter` — intersection of sequences |
|
|
108
|
+
| 3 | Medium | `py_number_base_converter` — base conversion |
|
|
109
|
+
| 3 | Medium | `py_pattern_tracker` — pattern detection |
|
|
110
|
+
| 4 | Medium | `py_anagram` — anagram check |
|
|
111
|
+
| 4 | Medium | `py_shadow_merge` — merge operations |
|
|
112
|
+
| 4 | Medium | `py_string_permutation_checker` — permutation check |
|
|
113
|
+
| 5 | Hard | `py_string_sculptor` — string transformation |
|
|
114
|
+
| 5 | Hard | `py_twist_sequence` — sequence manipulation |
|
|
115
|
+
| 6 | Hard | `py_whisper_cipher` — cipher encoding |
|
|
116
|
+
|
|
117
|
+
## Dependencies
|
|
118
|
+
|
|
119
|
+
- [`pydantic`](https://docs.pydantic.dev/) ≥ 2.0 — task data models
|
|
120
|
+
- [`rich`](https://github.com/Textualize/rich) ≥ 13.0 — terminal UI
|
|
121
|
+
|
|
122
|
+
## Project structure
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
src/examshell/
|
|
126
|
+
├── __init__.py
|
|
127
|
+
├── __main__.py
|
|
128
|
+
├── main.py # CLI entry point, mode logic, UI screens
|
|
129
|
+
├── models.py # Pydantic models (Task, Description, Example)
|
|
130
|
+
├── task_generator.py # TaskManager: file creation, grading, task selection
|
|
131
|
+
├── config.py
|
|
132
|
+
└── data/
|
|
133
|
+
└── data.json # All task definitions
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## License
|
|
137
|
+
|
|
138
|
+
MIT
|
examshell_python-0.1.3/PKG-INFO
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: examshell-python
|
|
3
|
-
Version: 0.1.3
|
|
4
|
-
Summary: Interactive 42-style exam practice shell for Python exercises
|
|
5
|
-
Author: Denis
|
|
6
|
-
License: MIT
|
|
7
|
-
Requires-Python: >=3.10
|
|
8
|
-
Description-Content-Type: text/markdown
|
|
9
|
-
Requires-Dist: pydantic>=2.0
|
|
10
|
-
Requires-Dist: rich>=13.0
|
examshell_python-0.1.3/README.md
DELETED
|
File without changes
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: examshell-python
|
|
3
|
-
Version: 0.1.3
|
|
4
|
-
Summary: Interactive 42-style exam practice shell for Python exercises
|
|
5
|
-
Author: Denis
|
|
6
|
-
License: MIT
|
|
7
|
-
Requires-Python: >=3.10
|
|
8
|
-
Description-Content-Type: text/markdown
|
|
9
|
-
Requires-Dist: pydantic>=2.0
|
|
10
|
-
Requires-Dist: rich>=13.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/requires.txt
RENAMED
|
File without changes
|
{examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/top_level.txt
RENAMED
|
File without changes
|