Hmm, interesting. Putting the BP.set_motor_dps... in front of the position command makes it very weird, running very slowly when not called and when called it doesn’t do what you said above. But thanks anyway for the help.
# turn degrees
TargetDegrees = 180
# seconds to reach target
TimeToTarget = 6
# degrees per second
DegreesPerSecond = TargetDegrees / TimeToTarget
# read the starting position
StartingPosition = BP.get_motor_encoder(BP.PORT_A)
# add target rotation to starting position to get absolute target
FinalPosition = StartingPosition + TargetDegrees
# set the DPS limit
BP.set_motor_limits(BP.PORT_A, dps = DegreesPerSecond)
# set the absolute target
BP.set_motor_position(BP.PORT_A, FinalPosition)