@@ -44,7 +44,7 @@ def __init__(
44
44
"call autosave.configure() with device keyword argument" )
45
45
self ._last_saved_time = datetime .now ()
46
46
if not self .directory .is_dir ():
47
- raise RuntimeError (f"{ directory } is not a valid autosave directory" )
47
+ raise RuntimeError (f"{ self . directory } is not a valid autosave directory" )
48
48
if self .backup_on_restart :
49
49
self .backup_sav_file ()
50
50
self .get_autosave_pvs ()
@@ -77,10 +77,6 @@ def remove_pv(self, pv):
77
77
pv .autosave = False
78
78
self ._pvs .pop (pv .name , None )
79
79
80
- def _get_state_from_device (self ):
81
- for name , pv in self ._pvs .items ():
82
- self ._state [name ] = pv .get ()
83
-
84
80
def _get_timestamped_backup_sav_path (self ):
85
81
sav_path = self ._get_current_sav_path ()
86
82
return sav_path .parent / (
@@ -93,16 +89,13 @@ def _get_backup_save_path(self):
93
89
def _get_current_sav_path (self ):
94
90
return self .directory / f"{ self .device_name } .{ SAV_SUFFIX } "
95
91
96
- def _update_last_saved (self ):
97
- self ._last_saved_state = self ._state .copy ()
98
- self ._last_saved_time = datetime .now ()
99
-
100
- def _save (self ):
92
+ def _save (self , state ):
101
93
try :
102
94
for path in [self ._get_current_sav_path (), self ._get_backup_save_path ()]:
103
95
with open (path , "w" ) as f :
104
- json .dump (self ._state , f , indent = 4 )
105
- self ._update_last_saved ()
96
+ json .dump (state , f , indent = 4 )
97
+ self ._last_saved_state = state .copy () # do we need to copy?
98
+ self ._last_saved_time = datetime .now ()
106
99
except Exception as e :
107
100
print (f"Could not save state to file: { e } " )
108
101
@@ -111,12 +104,13 @@ def save(self):
111
104
print ("Not saving to file as autosave adapter disabled" )
112
105
return
113
106
timenow = datetime .now ()
114
- self ._get_state_from_device ()
107
+ state = {name : pv .get () for name , pv in self ._pvs .items ()}
108
+
115
109
if (
116
110
(timenow - self ._last_saved_time ).total_seconds () > self .save_period
117
- and self . _state != self ._last_saved_state # only save if changed
111
+ and state != self ._last_saved_state # only save if changed
118
112
):
119
- self ._save ()
113
+ self ._save (state )
120
114
121
115
def load (self , path = None ):
122
116
if not self .enabled :
@@ -134,7 +128,6 @@ def load(self, path = None):
134
128
print (f"{ name } is not a valid autosaved PV" )
135
129
continue
136
130
pv .set (value )
137
- self ._get_state_from_device ()
138
131
139
132
def loop (self ):
140
133
if not self ._pvs :
0 commit comments