Also check out CADQuery and or build123d (python equivalents)

+1 for CADQuery - it lets you easily specify surfaces as the basis for manipulation, and results in much less fragile designs than OpenSCAD.