this should probably be in `mixins.py`