Discrete implementation of the PI controller
Define &quot;appropriate&quot;.
Yes, the output of the controller will be limited to between your action_max and action_min -- this is good.  Since your output is also your integrator state, you'll be effecting anti-windup.  If I'm not horribly mistaken, if your output is saturated, as soon as the error term starts pointing in the opposite direction of the limit it's at, then it'll back away from that limit.
So you have an anti-windup method that is a good candidate.
However, anti-windup is a nonlinear control law, which is appropriate to use when you're dealing with some plant nonlinearity or some optimality criterion that is not least-square-error.  Usually you're dealing with actuator saturation, and usually you just want a stable system and you're willing to let it take a bit extra-long to settle when it has to move a long way.  In that case then, yes, this control law may be &quot;appropriate&quot;.
But ultimately, the &quot;appropriateness&quot; of a controller depends on your plant, how it's being used, and if you're working in a team, whether your colleagues agree that it's appropriate*.  It's an opinion call.  So you need to determine if it's appropriate by your lights, and if you're in a team, you need to convince the team that you're right.
* Because the best control rule ever isn't any good at all if your boss won't let you implement it.