If you are looking for a customisable chess interface, or just want to try and see how it works under the hood, then the latest release of Python Chess might be useful. It is a fully configured chess interface, written entirely in python, and even includes support for interfacing with uci chess engines. (NB It is not an engine itself).
The author of the program, Niklas Fiekas, indicates in his documentation it is not intended to be a fast running interface system, but clearly he has put in a significant amount of work in getting the features right. It is even up to date with the latest changes to the Laws of Chess, automatically finding draws by the 75 move rule, and 5 fold repetitions.
You can download the code from the pypi page or skip across to his github page to browse the code online.