Files

170 lines
5.6 KiB
Markdown
Raw Permalink Normal View History

# Code_projects module
## Introduction
The [code_projects module](frontend/py_modules/code_projects) contains scripts
to extract, build and run the code blocks from the ReST files. These are the
main scripts:
- `extract_projects.py` extracts all code blocks and stores into the specified
build directory;
- `check_projects.py` checks each code blocks from the specified build
directory;
- `check_code_block.py` checks a single (previously extracted) code block.
## Simple usage
To build and run the source-code examples from a course, just run the
`extract_projects.py` script followed by `check_projects.py` script. For
example, to test the source-code examples from the
[Introduction to Ada course](content/courses/intro-to-ada), run:
```sh
python3 py_modules/code_projects/extract_projects.py \
--build-dir test_output \
$(find ../content/courses/intro-to-ada/ -name '*.rst')
python3 py_modules/code_projects/check_projects.py \
--build-dir test_output
```
When the `extract_projects.py` runs, it creates a JSON file called
`block_info.json` for each code block (source-code example) that is extracted
from the ReST files. The `check_projects.py` looks for all `block_info.json`
files in the build directory and checks the source code example described in
each of those JSON files.
## Verbose mode
All the test script have a `--verbose` switch. For example:
```sh
python3 py_modules/code_projects/extract_projects.py \
--verbose \
--build-dir test_output \
$(find ../content/courses/intro-to-ada/ -name '*.rst')
python3 py_modules/code_projects/check_projects.py \
--verbose \
--build-dir test_output
```
## JSON file: list of extracted projects
It's possible to store the list of extracted projects into a JSON file and
use that file for checking the projects. For example, to build the source-code
examples from the
[Introduction to Ada course](content/courses/intro-to-ada), run:
```sh
python3 py_modules/code_projects/extract_projects.py \
--extracted_projects test_output/extracted_projects.json \
$(find ../content/courses/intro-to-ada/ -name '*.rst')
python3 py_modules/code_projects/check_projects.py \
--extracted_projects test_output/extracted_projects.json
```
To build the source-code examples extracted from a single ReST file:
```sh
python3 py_modules/code_projects/extract_projects.py \
--extracted_projects test_output/extracted_projects.json \
../content/courses/intro-to-ada/chapters/imperative_language.rst
python3 py_modules/code_projects/check_projects.py \
--extracted_projects test_output/extracted_projects.json
```
### JSON file and build directory
If only `--extracted_projects` is specified without `--build-dir`, then the
build directory corresponds to the path to the JSON file. For example, if
`--extracted_projects test_output/extracted_projects.json` is specified, then
the build directory is `test_output`.
To store the JSON file completely separate from the build directory, use
both `--extracted_projects` and `--build-dir` switches and specify different
paths. For example:
```sh
python3 py_modules/code_projects/extract_projects.py \
--build-dir test_output \
--extracted_projects extracted_projects.json \
$(find ../content/courses/intro-to-ada/ -name '*.rst')
python3 py_modules/code_projects/check_projects.py \
--build-dir test_output \
--extracted_projects extracted_projects.json
```
## Checking single code blocks
When extracting the source-code examples from the ReST files, a JSON file
called `block_info.json` is created for each code block. It's possible to check a
single code block by using the `check_code_block.py` and indicating this
JSON file. For example:
```sh
python3 py_modules/code_projects/check_code_block.py \
test_output/projects/Courses/Intro_To_Ada/Imperative_Language/Greet/cba89a34b87c9dfa71533d982d05e6ab/block_info.json
```
### Forced check
To force checking of a specific code block, use the `--force` switch:
```sh
python3 py_modules/code_projects/check_code_block.py \
--force \
test_output/projects/Courses/Intro_To_Ada/Imperative_Language/Greet/cba89a34b87c9dfa71533d982d05e6ab/block_info.json
```
## Testing single code block
To test just a single code block from an ReST file, use the `--code-block-at`
switch:
```sh
python3 py_modules/code_projects/extract_projects.py \
--code-block-at=28 \
--extracted_projects test_output/extracted_projects.json \
../content/courses/intro-to-ada/chapters/imperative_language.rst
python3 py_modules/code_projects/check_projects.py \
--extracted_projects test_output/extracted_projects.json
```
## Style check: maximum number of columns
To ensure that a maximum limit of 80 columns per line is respected in the code
examples, use the `--max_columns` switch.
For example, using the `check_projects.py` script:
```sh
python3 py_modules/code_projects/check_projects.py \
--max-columns 80 \
--extracted_projects test_output/extracted_projects.json
```
For example, using the `check_code_block.py` script:
```sh
python3 py_modules/code_projects/check_code_block.py \
--max-columns 80 \
test_output/projects/Courses/Intro_To_Ada/Imperative_Language/Greet/cba89a34b87c9dfa71533d982d05e6ab/block_info.json
```