Is there a reason that the Crucible class uses staticmethod everywhere? If you change to a normal method, then a subclass can override these methods. Because they are called like Crucible.get_create_review_payload, instead of self.get_create_review_payload, subclassing to modify won't work.