Interrupting Macros by Ctrl-C

Macros may wait for a specific condition, e.g. beam-is-back. The typical pattern of such a Macro is a loop that executes a test and, if the test fails, sleeps for some time before the test is re-executed. Sometimes the user has to interrupt the procedure by Ctrl-C. In order not to screw-up the MacroServer the function checkPoint() has to be invoked:

#!/bin/env python

from sardana.macroserver.macro import *
import time
import PyTango

def check_for_photons():
    ”'
    Checks if Photons are Still at the Experiment.
    Returns 0 == Failed to Check.
    Returns 1 == photons.
    ”'
    #
    # here would be some code that determines whether beam is there
    #
    return [0, "Failed to check"]

class check_photons(Macro):
    param_def = []

    def run(self):
        _photons = [0, "n.n."] 
        while _photons[0] != 1:  
            _photons = check_for_photons()
            self.checkPoint()
            #
            # self.output() implicitly calls checkPoint()
            #
            # self.output( "Received %s" % str( _photons))
            time.sleep(1)