def present_rename_node_packs_form(self):
        """Allow user to rename node packs on any file."""
        ### draw semi-transparent object so screen behind
        ### form appears as if unhighlighted

        blit_on_screen(UNHIGHLIGHT_SURF_MAP[SCREEN_RECT.size], (0, 0))

        ### loop until running attribute is set to False

        self.running = True
        self.loop_holder = self

        while True:

            try:

                while self.running:

                    ### perform various checkups for this frame;
                    ###
                    ### stuff like maintaing a constant framerate and more
                    SERVICES_NS.frame_checkups()

                    ### execute the handle_input/update/draw methods
                    ###
                    ### the SwitchLoopException thrown when focusing in and
                    ### out of some widgets is caught in the try clause;

                    self.loop_holder.handle_input()
                    self.loop_holder.update()
                    self.loop_holder.draw()

                ## if we leave the inner loop, also exit the outer one
                break

            except SwitchLoopException as err:

                ## use the loop holder in the err
                ## attribute of same name
                self.loop_holder = err.loop_holder

            ### we don't need to caught the QuitAppException,
            ### since it is caught in the main loop


        ### draw a semitransparent object over the
        ### form, so it appears as if unhighlighted
        self.rect_size_semitransp_obj.draw()
Allow user to rename node packs on any file.
nodezator/editing/nodepacksforms/renaming.py