Tools for generating code from custom ShowCode Forge questions
Project description
Showcode Forge
Tools for generating code for ShowCode Forge. ShowCode Forge is a community dedicated to creating challenges on ShowCode.
Install
This tool requires Python 3.7+. You can download Python from here
Install the latest release of the package from PyPi.
pip install showcode_forge
Validate
Validating is ensuring that your challenge .json file is correct according to the "Tome of Crafting" (aka the how to guide). It verifies that you have all fields correctly filled out, that your unit tests match your parameters and return types and that your points add up.
How to run:
showcode_forge validate [--verbose] file
fileis a path ot the.jsonfile--verboseenables additional logging. Without this, if there are no errors, the tool will not output anything
Example usage:
showcode_forge validate --verbose challenge.json
Extract
Extracting is turning a challenge .json (provided by the community) into a set of files, including question.html and generated source and test files for your selected language.
How to run:
showcode_forge extract [--language LANGUAGE] [--framework FRAMEWORK] file
fileis a path to the.jsonfileLANGUAGEis the selected programming language. Currently supported:pyFRAMEWORKis the selected unit testing framework. Currently supported:unittest,pytest,pytest_scforge(see bellow), default:unittest
Example usage:
showcode_forge extract --language py --framework unittest challenge.json
Compile
Compiling is turning a source, test and question files into a .json file.
How to run:
showcode_forge compile [--output OUTPUT] [--language LANGUAGE] [--framework FRAMEWORK] source_file test_file question_file
source_fileis a path to the solution file where the correct answer is definedtest_fileis a path to the file that defines unit testsquestion_fileis a path to the file that defines the question rubric text (usually.html)OUTPUTis a path to where the output will be generated (default:challenge.json)LANGUAGEis the programming languagesource_fileandtest_fileare written in. Currently supported:pyFRAMEWORKis the unit testing framework used to define the test cases. Currently supported:pytest_scforge(see bellow)
Example usage:
showcode_forge compile --language py --framework pytest_scforge --output my_awesome_challenge.json solution.py tests.py question.html
Using Pytest with ShowCode Forge
The current only supported compiler is a modified version of pytest. Here is how you would normally write a challenge using pytest:
import pytest
from solution import Solution
@pytest.mark.parametrize(
"count,expected_result",
[
(3, "1, 2, Fizz"),
(7, "1, 2, Fizz, 4, Buzz, Fizz, 7"),
(0, "")
]
)
def test_fizzbuzz(count, expected_result):
s = Solution()
assert s.fizzbuzz(count) == expected_result
You would run this, by running pytest in the command line.
With ShowCode Forge here is what the same test looks like:
from showcode_forge import challenge, TestCase
from solution import Solution
@challenge(
"count,expected_result",
[
TestCase([3], "1, 2, Fizz", "Simple public case", is_public=True),
TestCase([7], "1, 2, Fizz, 4, Buzz, Fizz, 7", "More complex private case", points=2),
TestCase([0], "", "Empty case", points=3)
]
)
def test_fizzbuzz(count, expected_result):
s = Solution()
assert s.fizzbuzz(count) == expected_result
This runs exactly the same if you run pytest in the command line. @challenge generates pytest test cases behind the scenes.
It uses the parameter declaration and the various test cases to infer parameter names and types. It automatically calculates the point total as well. If points is not specified, it defaults to 1. If is_public is not specified it defaults to False.
It does not support every field currently. You will have to manually edit the .json to set the title, className and methodName. difficulty is infered from total points, but can be updated.
Scaffold
Scaffolding sets up the files needed to develop a challenge with the some starting boilerplate code in place.
How to run:
showcode_forge scaffold [-h] [--argument ARGUMENT [ARGUMENT ...]] [--result RESULT] [--output_dir OUTPUT_DIR] [--language LANGUAGE] [--framework FRAMEWORK] [--question_file_type {html,md}] class_name method_name
class_nameis the name of the tested classmethod_nameis the name of the tested method in the tested classARGUMENTis a list of argument names that the tested method takesRESULTis the name of the result produced by the tested methodOUTPUT_DIRis the directory where the output is generated. If not specified, it will be generated in the current directoryLANGUAGEis the programming language the files will be generated in. Currently supported:pyFRAMEWORKis the unit testing framework used to define the test cases. Currently supported:pytest_scforge(see above)QUESTION_FILE_TYPEis the type of markup used for the question file. Currently supported:html,md(Markdown)
Example usage:
python -m showcode_forge scaffold "ClassName" "solve_challenge" --argument "arg_1" "arg_2" "arg_3" --language py --framework pytest_scforge
Contribute
Contributions, bug fixes and support for more languages are welcome!
Running locally
Run this package locally to test it, in the root of the project:
python -m showcode_forge [arguments]
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file showcode_forge-0.11.tar.gz.
File metadata
- Download URL: showcode_forge-0.11.tar.gz
- Upload date:
- Size: 13.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1ba36743a69a71db0152e6ec253093221002e165140e9b43442398dd4b0ff75
|
|
| MD5 |
983b798e81eda0c2ce9700ffa5ed023e
|
|
| BLAKE2b-256 |
b4ae9957170627f07639c1c7249b3f3fd631b083a389138e15bab685fa63d1ba
|
File details
Details for the file showcode_forge-0.11-py3-none-any.whl.
File metadata
- Download URL: showcode_forge-0.11-py3-none-any.whl
- Upload date:
- Size: 17.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
deab6f8902c7517f0ac96cb7059a3802c79de5b0aeb623ba61e731c51b44c5aa
|
|
| MD5 |
24ecaadc2cbecdf95de0491215114a52
|
|
| BLAKE2b-256 |
4b5b467d337e67b38fc299ed994b5de6db7778854178161fbdee9f12f7fc62e2
|