Logic.py: Bridging the Gap between LLMs and Constraint Solvers