@@ -1954,27 +1954,32 @@ def dump(self):
19541954return "" .join (texts )
19551955
19561956
1957+ @dc .dataclass (slots = True ,repr = False )
19571958class Destination :
1958- def __init__ ( self , name , type , clinic , * args ):
1959- self . name = name
1960- self . type = type
1961- self . clinic = clinic
1962- self . buffers = BufferSeries ()
1959+ name : str
1960+ type : str
1961+ clinic : Clinic
1962+ buffers : BufferSeries = dc . field ( init = False , default_factory = BufferSeries )
1963+ filename : str = dc . field ( init = False ) # set in __post_init__
19631964
1965+ args :dc .InitVar [tuple [str , ...]]= ()
1966+
1967+ def __post_init__ (self ,args :tuple [str , ...])-> None :
19641968valid_types = ('buffer' ,'file' ,'suppress' )
1965- if type not in valid_types :
1969+ if self . type not in valid_types :
19661970fail (
1967- f"Invalid destination type{ type !r} for{ name } , "
1971+ f"Invalid destination type{ self . type !r} for{ self . name } , "
19681972f"must be{ ', ' .join (valid_types )} "
19691973 )
1970- extra_arguments = 1 if type == "file" else 0
1974+ extra_arguments = 1 if self . type == "file" else 0
19711975if len (args )< extra_arguments :
1972- fail (f"Not enough arguments for destination{ name } new{ type } " )
1976+ fail (f"Not enough arguments for destination{ self . name } new{ self . type } " )
19731977if len (args )> extra_arguments :
1974- fail (f"Too many arguments for destination{ name } new{ type } " )
1975- if type == 'file' :
1978+ fail (f"Too many arguments for destination{ self . name } new{ self . type } " )
1979+ if self . type == 'file' :
19761980d = {}
1977- filename = clinic .filename
1981+ filename = self .clinic .filename
1982+ assert filename is not None
19781983d ['path' ]= filename
19791984dirname ,basename = os .path .split (filename )
19801985if not dirname :
@@ -1984,19 +1989,19 @@ def __init__(self, name, type, clinic, *args):
19841989d ['basename_root' ],d ['basename_extension' ]= os .path .splitext (filename )
19851990self .filename = args [0 ].format_map (d )
19861991
1987- def __repr__ (self ):
1992+ def __repr__ (self )-> str :
19881993if self .type == 'file' :
19891994file_repr = " " + repr (self .filename )
19901995else :
19911996file_repr = ''
19921997return "" .join (("<Destination " ,self .name ," " ,self .type ,file_repr ,">" ))
19931998
1994- def clear (self ):
1999+ def clear (self )-> None :
19952000if self .type != 'buffer' :
19962001fail ("Can't clear destination" + self .name + " , it's not of type buffer" )
19972002self .buffers .clear ()
19982003
1999- def dump (self ):
2004+ def dump (self )-> str :
20002005return self .buffers .dump ()
20012006
20022007
@@ -2164,11 +2169,11 @@ def add_destination(
21642169self ,
21652170name :str ,
21662171type :str ,
2167- * args
2172+ * args : str
21682173 )-> None :
21692174if name in self .destinations :
21702175fail ("Destination already exists: " + repr (name ))
2171- self .destinations [name ]= Destination (name ,type ,self ,* args )
2176+ self .destinations [name ]= Destination (name ,type ,self ,args )
21722177
21732178def get_destination (self ,name :str )-> Destination :
21742179d = self .destinations .get (name )