Spock is basically an IPython extension.

It implements the load_ipython_extension() hook function where it exposes some variables and magic commands to the IPython namespace on startup.

There are two different groups of variables and magics: the built-in ones and the custom ones.

The built-in ones are exposed directly by the load_ipython_extension() function and are common to all Sardana systems and Spock sessions e.g. www and edmac magics or MACRO_SERVER and DOOR variables.

The custom ones are exposed by the MacroServer’s elements attribute listener as explained in the next paragraph.

Spock implements its own Taurus extensions for MacroServer and Door devices in SpockMacroServer and SpockDoor classes. This extenstion enhances the standard Taurus extensions for Sardana devices in the following way. In case of the MacroServer, when the SpockMacroServer receives the elements attribute event it exposes the current Device Pool elements as variables e.g. mot01, mntgrp01, and macros as magics e.g. sar_demo, mv, ct. On Spock startup, when the SpockMacroServer object is created, it will expose at once all variables corresponding to all elements proceding from all Device Pools the MacroServer is connected to and magics corresponding to all macros present in the MacroServer. In case of the Door, when the macro magics are executed the SpockDoor extensions executes them in synchronous way i.e. holds the Spock prompt until the macro has finished, and handles KeyboardInterrupt exceptions (Ctrl+C) to interrupt the macro execution.