Package for converting thermo homework assignments
Project description
thermohw
Homework assignment converter from Jupyter Notebooks to PDF
This package installs a CLI script to convert Jupyter Notebook homework assignments to PDF (with and without solutions) and a set of Notebooks (with and without solutions).
Given a directory structure such as
.
├── homework
| ├── homework-1
│ │ ├── homework-1-1.ipynb
│ │ ├── homework-1-2.ipynb
│ │ ├── homework-1-3.ipynb
│ │ ├── homework-1-4.ipynb
│ │ ├── homework-1-5.ipynb
│ │ ├── homework-1-6.ipynb
| ├── homework-2
│ │ ├── homework-2-1.ipynb
│ │ ├── homework-2-2.ipynb
│ │ ├── homework-2-3.ipynb
│ │ ├── homework-2-4.ipynb
...
running
convert_thermo_hw --hw 1
will convert all of the .ipynb
files in the homework-1
directory. You can also specify which
problems should be converted by the problems
argument, which takes a list of integers
convert_thermo_hw --hw 2 --problems 1 3 4
would convert problems 1, 3, and 4 in homework-2
.
The option --by-hand
allows certain problems to be marked as the solution should be done out by
hand
convert_thermo_hw --hw 3 --by-hand 1 2
would mark problems 1 and 2 in homework-3
as to be done by hand instead of with the code.
The output files are placed in a directory called output
in the homework-N
directory.
Change Log
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
0.7.1 - 2021-JAN-12
Fixed
- IPython package is a dependency for its code lexer
0.7.0 - 2021-JAN-12
Added
- The
SolutionRemover
preprocessor now uses cell tags to find the solution and its parts - A
legacy
command line argument switches back to the old method of finding the solution based on parsing the source of the cell - A test of the new tag-based
SolutionRemover
Changed
- Highlighted answer cells cannot be deleted in the assignment notebook
- Support for Python 3.6 is dropped
- Moved to
src
directory layout and don't include tests with the package
Fixed
- Type hinting for
resources
dictionaries in some preprocessors
Removed
- Remove exam processing, which didn't work well and wasn't really used
0.6.0 - 2020-SEP-11
Added
- Option to clean the output folder can be specified.
- Test with the latest Python 3.9
Changed
- Change base template for our template to
style_jupyter
instead ofstyle_ipython
. Has a number of benefits, most notably, line breaking in code cells.
Fixed
- Fix uploading the Anaconda package
0.5.2 - 2020-SEP-03
Changed
- Switch to GitHub Actions
0.5.1 - 2020-SEP-03
Fixed
- The version number was incorrect for v0.5.0
- Tests!
0.5.0 - 2020-SEP-03
Added
- Add ability to process exam files into assignments and solutions
- Cells that contain the word "Sketch" indicate that they require an image submission
Changed
- Run Black on all the code files
- Delete Pymarkdown variables from the cell metadata to avoid revealing the solutions
- Move
combine_pdf_as_bytes()
toutils.py
- Only run
xelatex
on the converted files once
Fixed
- Files without
### part name
now correctly excludes the solution
Removed
- The
HomeworkPreprocessor
class was no longer useful, because it was removing things it shouldn't have been
0.4.2 - 2018-SEP-03
Added
- Test suite started, with a test of the
ExtractOutputsPreprocessor
that checks pathological filenames - Run test suite on TravisCI
Changed
- Distribute the LICENSE file with built artifacts
Fixed
- Fix pathological image filenames that caused URL escaping errors
0.4.1 - 2018-AUG-30
Fixed
- Fix spaces in attached image names cause LaTeX to fail
0.4.0 - 2018-AUG-26
Added
raw_html_filter
to process raw inline HTML to equivalent LaTeX forms- Option to show the solution should be done by hand,
--by-hand
command line option
Changed
- Reset all cell executions to be None when a Notebook is processed
0.3.1 - 2018-AUG-14
Added
- Expose filter functions from
div_filter.py
in__init__.py
0.3.0 - 2018-AUG-14
Added
- Add filter to convert Bootstrap
alert-*
classes to LaTeXtcolorbox
es
0.2.5 - 2018-AUG-03
Added
setup.cfg
file added to configure some metadata- Add
flake8
configuration tosetup.cfg
- More keywords to
setup
function insetup.py
- Module docstring for the new
preprocessors
module - Export more classes and functions from
__init__.py
Changed
- The
HomeworkPreprocessor
andSolnRemoverPreprocessor
are moved fromconvert_thermo_hw
module topreprocessors
module
Fixed
- Fix some typing errors
Removed
- Remove the
ExtractOutputsPreprocessor
which is not needed anymore
0.2.4 - 2018-AUG-03
Fixed
- PyPI deploy password for Travis CI must be encrypted with
--pro
flag
0.2.3 - 2018-AUG-03
Fixed
- Fix anaconda.org upload token decryption
0.2.2 - 2018-AUG-03
Fixed
- Typo in README.md
- Conda recipe description was not valid YAML
0.2.1 - 2018-AUG-03
Added
- Install
conda-verify
on Travis CI
Changed
- Change Python version dependency in
conda.recipe/meta.yaml
to be less the 4.0
Fixed
- Fix accessing Jinja variables in
conda.recipe/meta.yaml
Removed
0.2.0 - 2018-AUG-03
Added
- Add Travis CI configuration
- Include the
homework.tpl
template file with the distribution - Appropriate classes are now exported in
__init__.py
Changed
- Use
PyMarkdownPreprocessor
from our own module to avoid havingjupyter_contrib_nbextensions
as a dependency - Set the
build_directory
of thePDFExporter
FileWriter
instance to prevent writing intermediate files in the local directory - Sort the list of problems to be processed by problem number
- Automatically write the Notebook outputs to a zip file
- Automatically combine the PDF outputs to a single PDF file
- Refactor the processing loop to avoid creating the
FilesWriter
on every iteration
Fixed
- Fix warnings about docstrings
- Fix that paths must be resolved to be processed
- Fix typos in docstrings
- Specify that the
long_description
content for PyPI is Markdown formatted
0.1.0 - 2018-JUL-29
Added
- Convert Jupyter Notebook to PDF with and without solutions
- Convert Jupyter Notebook to a set of Notebooks, with and without solutions
- README with instructions for use
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.