"""
sequencers
===========
Provide a generic sequencer class, as an interface for dedicated sequencer
sub-classes. This allows imsi to interface with multiple underlying sequencers.
"""
from abc import ABC, abstractmethod
from imsi.config_manager.config_manager import Configuration
[docs]def create_sequencer(seq_name):
"""
Create and return a sequencer object
"""
if seq_name == 'iss':
from imsi.sequencer_interface.iss_cap import IMSISimpleSequencerInterface
return IMSISimpleSequencerInterface()
elif seq_name == 'maestro':
from imsi.sequencer_interface.maestro_cap import MaestroSequencerInterface
return MaestroSequencerInterface()
else:
raise ValueError(f"Specified sequencer {seq_name} not supported in imsi.")
[docs]class Sequencer(ABC):
"""
A class that absracts the definition of a sequencer cap for imsi.
Sub-classes for specific sequencers will provide the concerete
implementations of the methods below, using the imsi Configuration
information, and using their own specifically required methods.
The sequencer specific implementation must expose back, through this
interface, all the methods below.
"""
[docs] @abstractmethod
def setup(self, configuration: Configuration):
"""
Any steps needed to setup the sequencer, including
cloning source and creating any directories
"""
raise NotImplementedError("sequencer config method must be defined")
[docs] @abstractmethod
def config(self, configuration: Configuration):
"""
Steps needed to configure sequencer files based on updated imsi
input. Examples might include editing resource files.
"""
raise NotImplementedError("sequencer config method must be defined")
[docs] @abstractmethod
def submit(self, configuration: Configuration):
"""
Steps needed to configure sequencer files based on updated imsi
input. Examples might include editing resource files.
"""
raise NotImplementedError("sequencer submit method must be defined")
[docs] @abstractmethod
def status(self, configuration: Configuration):
"""
Steps needed to configure sequencer files based on updated imsi
input. Examples might include editing resource files.
"""
raise NotImplementedError("sequencer status method must be defined")