diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-correction-helper.spec | 415 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 417 insertions, 0 deletions
@@ -0,0 +1 @@ +/correction-helper-2022.9.16.tar.gz diff --git a/python-correction-helper.spec b/python-correction-helper.spec new file mode 100644 index 0000000..75b8980 --- /dev/null +++ b/python-correction-helper.spec @@ -0,0 +1,415 @@ +%global _empty_manifest_terminate_build 0 +Name: python-correction-helper +Version: 2022.9.16 +Release: 1 +Summary: Some helpers to help writing correction bots, use by hackinscience.org. +License: MIT License +URL: https://github.com/JulienPalard/correction-helper +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/50/82/57fcde9d96fdffd8c41a616e5e407184f0d17639f32cc59c684a55c93644/correction-helper-2022.9.16.tar.gz +BuildArch: noarch + +Requires: python3-friendly-traceback + +%description +# Correction Helper + +## Project + +This is just a set of tools to help writing correction bots in Python for Python. + +It is used for [hackinscience](https://hackinscience.org), but could +be used elsewhere. + + +## Security considerations + +Running student code is probably really unsafe, unless you trust your +students not to drop you a backdoor. + +This projet does *not* help with security in any ways, maybe take a +look at [firejail](https://github.com/netblue30/firejail) if you have +trust issues (Yes you can use `correction-helper` inside `firejail`). + + +## Usage + +To install it, run: `pip install correction-helper`. + + +In your checking code, you can use it like this: + + +### The `student_code` decorator + +This decorator is aimed to catch most problems that could happen in +student code, use it simply as: + +```python +with student_code(): + their_function() +``` + +Find a more complete example in the `examples/` directory. + + +## Allowed parameters for `student_code`, and their default values + +### `exception_prefix="I got an exception:"` + +Printed right before the exception, if any. + +It's allowed to give a list of strings, in which case they'll be +separated by `"\n\n"`, useful to render markdown paragraphs. + + +### `print_prefix="Your code printed:"` + +Message to display before the student prints (in case `print_allowed` +is `False` or `None`). + +It's allowed to give a list of strings, in which case they'll be +separated by `"\n\n"`, useful to render markdown paragraphs. + + +### `too_slow_message="Your program looks too slow, looks like an infinite loop."` + +Message to display in case the code runs slower than the given `timeout` (defaults to 1s). + +It's allowed to give a list of strings, in which case they'll be +separated by `"\n\n"`, useful to render markdown paragraphs. + + +### `prefix=()` + +A prefix for `print_prefix`, `exception_prefix`, and +`too_slow_message=`, usefull to deduplicate strings, like: + +```python +with student_code( + prefix="While calling blahblah('bar')", + print_prefix="it printed:", + exception_prefix="it raised:", + too_slow_message="it took more than 1s, had to kill it.", +): + blahblah('bar') +``` + + +### `friendly=False` + +To use, or not +[friendly-traceback](https://github.com/aroberge/friendly-traceback/) +instead of bare Python exceptions. + + +### `print_allowed=True` + +To allow or deny the student to print to stdout and stderr. + +- `True`: Prints are allowed (and displayed). +- `None`: Prints are allowed (but not displayed). +- `False`: Prints are disallowed (and displayed). + +In all cases you can read what they printed using the value of the +context manager: + +```python +with student_code(print_allowed=None) as run: + their_function() +assert run.err == "" +assert run.out == "42" +``` + + +## Good practices + +Write the student checking code a you would write unit test for your +own code. + + +%package -n python3-correction-helper +Summary: Some helpers to help writing correction bots, use by hackinscience.org. +Provides: python-correction-helper +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-correction-helper +# Correction Helper + +## Project + +This is just a set of tools to help writing correction bots in Python for Python. + +It is used for [hackinscience](https://hackinscience.org), but could +be used elsewhere. + + +## Security considerations + +Running student code is probably really unsafe, unless you trust your +students not to drop you a backdoor. + +This projet does *not* help with security in any ways, maybe take a +look at [firejail](https://github.com/netblue30/firejail) if you have +trust issues (Yes you can use `correction-helper` inside `firejail`). + + +## Usage + +To install it, run: `pip install correction-helper`. + + +In your checking code, you can use it like this: + + +### The `student_code` decorator + +This decorator is aimed to catch most problems that could happen in +student code, use it simply as: + +```python +with student_code(): + their_function() +``` + +Find a more complete example in the `examples/` directory. + + +## Allowed parameters for `student_code`, and their default values + +### `exception_prefix="I got an exception:"` + +Printed right before the exception, if any. + +It's allowed to give a list of strings, in which case they'll be +separated by `"\n\n"`, useful to render markdown paragraphs. + + +### `print_prefix="Your code printed:"` + +Message to display before the student prints (in case `print_allowed` +is `False` or `None`). + +It's allowed to give a list of strings, in which case they'll be +separated by `"\n\n"`, useful to render markdown paragraphs. + + +### `too_slow_message="Your program looks too slow, looks like an infinite loop."` + +Message to display in case the code runs slower than the given `timeout` (defaults to 1s). + +It's allowed to give a list of strings, in which case they'll be +separated by `"\n\n"`, useful to render markdown paragraphs. + + +### `prefix=()` + +A prefix for `print_prefix`, `exception_prefix`, and +`too_slow_message=`, usefull to deduplicate strings, like: + +```python +with student_code( + prefix="While calling blahblah('bar')", + print_prefix="it printed:", + exception_prefix="it raised:", + too_slow_message="it took more than 1s, had to kill it.", +): + blahblah('bar') +``` + + +### `friendly=False` + +To use, or not +[friendly-traceback](https://github.com/aroberge/friendly-traceback/) +instead of bare Python exceptions. + + +### `print_allowed=True` + +To allow or deny the student to print to stdout and stderr. + +- `True`: Prints are allowed (and displayed). +- `None`: Prints are allowed (but not displayed). +- `False`: Prints are disallowed (and displayed). + +In all cases you can read what they printed using the value of the +context manager: + +```python +with student_code(print_allowed=None) as run: + their_function() +assert run.err == "" +assert run.out == "42" +``` + + +## Good practices + +Write the student checking code a you would write unit test for your +own code. + + +%package help +Summary: Development documents and examples for correction-helper +Provides: python3-correction-helper-doc +%description help +# Correction Helper + +## Project + +This is just a set of tools to help writing correction bots in Python for Python. + +It is used for [hackinscience](https://hackinscience.org), but could +be used elsewhere. + + +## Security considerations + +Running student code is probably really unsafe, unless you trust your +students not to drop you a backdoor. + +This projet does *not* help with security in any ways, maybe take a +look at [firejail](https://github.com/netblue30/firejail) if you have +trust issues (Yes you can use `correction-helper` inside `firejail`). + + +## Usage + +To install it, run: `pip install correction-helper`. + + +In your checking code, you can use it like this: + + +### The `student_code` decorator + +This decorator is aimed to catch most problems that could happen in +student code, use it simply as: + +```python +with student_code(): + their_function() +``` + +Find a more complete example in the `examples/` directory. + + +## Allowed parameters for `student_code`, and their default values + +### `exception_prefix="I got an exception:"` + +Printed right before the exception, if any. + +It's allowed to give a list of strings, in which case they'll be +separated by `"\n\n"`, useful to render markdown paragraphs. + + +### `print_prefix="Your code printed:"` + +Message to display before the student prints (in case `print_allowed` +is `False` or `None`). + +It's allowed to give a list of strings, in which case they'll be +separated by `"\n\n"`, useful to render markdown paragraphs. + + +### `too_slow_message="Your program looks too slow, looks like an infinite loop."` + +Message to display in case the code runs slower than the given `timeout` (defaults to 1s). + +It's allowed to give a list of strings, in which case they'll be +separated by `"\n\n"`, useful to render markdown paragraphs. + + +### `prefix=()` + +A prefix for `print_prefix`, `exception_prefix`, and +`too_slow_message=`, usefull to deduplicate strings, like: + +```python +with student_code( + prefix="While calling blahblah('bar')", + print_prefix="it printed:", + exception_prefix="it raised:", + too_slow_message="it took more than 1s, had to kill it.", +): + blahblah('bar') +``` + + +### `friendly=False` + +To use, or not +[friendly-traceback](https://github.com/aroberge/friendly-traceback/) +instead of bare Python exceptions. + + +### `print_allowed=True` + +To allow or deny the student to print to stdout and stderr. + +- `True`: Prints are allowed (and displayed). +- `None`: Prints are allowed (but not displayed). +- `False`: Prints are disallowed (and displayed). + +In all cases you can read what they printed using the value of the +context manager: + +```python +with student_code(print_allowed=None) as run: + their_function() +assert run.err == "" +assert run.out == "42" +``` + + +## Good practices + +Write the student checking code a you would write unit test for your +own code. + + +%prep +%autosetup -n correction-helper-2022.9.16 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-correction-helper -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed May 10 2023 Python_Bot <Python_Bot@openeuler.org> - 2022.9.16-1 +- Package Spec generated @@ -0,0 +1 @@ +56462b711ad7d47c404e37ccadcd6367 correction-helper-2022.9.16.tar.gz |