Skip to content

Commit c808d0d

Browse files
committed
Pass the % format args to loggers instead of doing formatting ourselves.
We call Logger.debug (or any other logging level) with a message but we don't know if that message will be emitted. If it never gets emitted, it's a waste to format the message. So instead of doing the % formatting format ourselves with %, this commit passes the unformatted message and the % args to the Logger which delays the formatting until it knows the message will actually be emitted.
1 parent 25e16fd commit c808d0d

File tree

9 files changed

+54
-54
lines changed

9 files changed

+54
-54
lines changed

microscope/cameras/andorsdk3.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ def _create_buffers(self, num=None):
344344
if num is None:
345345
num = self.num_buffers
346346
self._purge_buffers()
347-
_logger.debug("Creating %d buffers." % num)
347+
_logger.debug("Creating %d buffers.", num)
348348
self._img_stride = self._aoi_stride.get_value()
349349
self._img_width = self._aoi_width.get_value()
350350
self._img_height = self._aoi_height.get_value()
@@ -497,7 +497,7 @@ def _on_enable(self):
497497
self._acquisition_start()
498498
except Exception as e:
499499
raise Exception(str(e))
500-
_logger.debug("Acquisition enabled: %s." % self._acquiring)
500+
_logger.debug("Acquisition enabled: %s.", self._acquiring)
501501
return True
502502

503503
@keep_acquiring
@@ -507,8 +507,8 @@ def set_exposure_time(self, value):
507507
value))[1]
508508
self._exposure_time.set_value(bounded_value)
509509
self._frame_rate.set_value(self._frame_rate.max())
510-
_logger.debug("Set exposure time to %f, resulting framerate %f."
511-
% (bounded_value, self._frame_rate.get_value()))
510+
_logger.debug("Set exposure time to %f, resulting framerate %f.",
511+
bounded_value, self._frame_rate.get_value())
512512

513513
def get_exposure_time(self):
514514
return self._exposure_time.get_value()

microscope/cameras/atmcd.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,7 +1248,7 @@ def initialize(self):
12481248
for s in range(GetNumberHSSpeeds(ch, amp.value)):
12491249
speed = GetHSSpeed(ch, amp.value, s)
12501250
self._readout_modes.append(ReadoutMode(ch, amp, s, speed))
1251-
_logger.info("... initilized %s s/n %s" % (model, serial))
1251+
_logger.info("... initilized %s s/n %s", model, serial)
12521252
## Add settings. Some are write-only, so we set defaults here.
12531253
# Mode
12541254
name = 'readout mode'
@@ -1399,12 +1399,12 @@ def _on_shutdown(self):
13991399
# Check temperature then release lock.
14001400
with self:
14011401
t = GetTemperature()[1]
1402-
_logger.info("... T = %dC" % t)
1402+
_logger.info("... T = %dC", t)
14031403
if t > -20:
14041404
break
14051405
time.sleep(10)
14061406

1407-
_logger.info("Temperature is %dC: shutting down camera." % t)
1407+
_logger.info("Temperature is %dC: shutting down camera.", t)
14081408

14091409
with self:
14101410
ShutDown()
@@ -1477,7 +1477,7 @@ def get_cycle_time(self):
14771477
def _set_readout_mode(self, mode_index):
14781478
"""Configure channel, amplifier and VS-speed."""
14791479
mode = self._readout_modes[mode_index]
1480-
_logger.info("Setting readout mode to %s" % mode)
1480+
_logger.info("Setting readout mode to %s", mode)
14811481
with self:
14821482
SetADChannel(mode.channel)
14831483
SetOutputAmplifier(mode.amp)

microscope/cameras/pvcam.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,8 +1086,8 @@ def _query(self, what=ATTR_CURRENT, force_query=False):
10861086
result = ctypes.POINTER(self._ctype)(result).contents.value
10871087
# Test on err.args prevents indexing into empty tuple.
10881088
if err and err.args and err.args[0].startswith('pvcam error 49'):
1089-
_logger.warn("Parameter %s not available due to camera state."
1090-
% self.name)
1089+
_logger.warn("Parameter %s not available due to camera state.",
1090+
self.name)
10911091
result = None
10921092
elif err:
10931093
raise e
@@ -1406,16 +1406,16 @@ def initialize(self):
14061406
_pvcam_uninit()
14071407
raise Exception ('No cameras detected.')
14081408
# Connect to the camera.
1409-
_logger.info("DLL version: %s" % _pvcam_get_ver().value)
1409+
_logger.info("DLL version: %s", _pvcam_get_ver().value)
14101410
self._pv_name = _cam_get_name(self._index).value
1411-
_logger.info('Initializing %s' % self._pv_name)
1411+
_logger.info('Initializing %s', self._pv_name)
14121412
self.handle = _cam_open(self._pv_name, OPEN_EXCLUSIVE)
14131413
PVCamera.open_cameras.append(self.handle)
14141414
# Set up event callbacks. Tried to use the resume callback to reinit camera
14151415
# after power loss, but any attempt to close/reopen the camera or deinit the
14161416
# DLL throws a Windows Error 0xE06D7363.
14171417
def _cb(event):
1418-
_logger.info("Received %s event." % event)
1418+
_logger.info("Received %s event.", event)
14191419
if event == 'removed':
14201420
_logger.critical("Can not re-init hardware. Exiting.")
14211421
exit(-1)
@@ -1432,7 +1432,7 @@ def _cb(event):
14321432
try:
14331433
p = PVParam.factory(self, param_id)
14341434
except:
1435-
_logger.warn("Skipping unsupported parameter %s." % name)
1435+
_logger.warn("Skipping unsupported parameter %s.", name)
14361436
continue
14371437
if not p.dtype or not p.available:
14381438
continue
@@ -1448,7 +1448,7 @@ def _cb(event):
14481448
# Test on err.args prevents indexing into empty tuple.
14491449
if err.args and not err.args[0].startswith('pvcam error 49'):
14501450
_logger.warn('Skipping parameter %s: not supported'
1451-
' in python.' % (p.name))
1451+
' in python.', p.name)
14521452
continue
14531453
self.add_setting(p.name,
14541454
p.dtype,
@@ -1569,8 +1569,8 @@ def soft_trigger(self):
15691569

15701570
_logger.debug('Status checks\n'
15711571
'check_cont: %s \t bytes: %d\tframes: %d\n'
1572-
'check_status: %s \t bytes: %d\t'
1573-
% (STATUS_STRINGS[cstatus.value], cbytes.value,
1574-
cframes.value, STATUS_STRINGS[status.value],
1575-
bytes.value))
1572+
'check_status: %s \t bytes: %d\t',
1573+
STATUS_STRINGS[cstatus.value], cbytes.value,
1574+
cframes.value, STATUS_STRINGS[status.value],
1575+
bytes.value)
15761576
return

microscope/devices.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ def get_setting(self, name):
299299
try:
300300
return self._settings[name].get()
301301
except Exception as err:
302-
_logger.error("in get_setting(%s):" % (name), exc_info=err)
302+
_logger.error("in get_setting(%s):", name, exc_info=err)
303303
raise
304304

305305
def get_all_settings(self):
@@ -315,7 +315,7 @@ def set_setting(self, name, value):
315315
try:
316316
self._settings[name].set(value)
317317
except Exception as err:
318-
_logger.error("in set_setting(%s):" % (name), exc_info=err)
318+
_logger.error("in set_setting(%s):", name, exc_info=err)
319319
raise
320320

321321
def describe_setting(self, name):
@@ -495,8 +495,8 @@ def _send_data(self, client, data, timestamp):
495495
client.receiveData(data, timestamp)
496496
except (Pyro4.errors.ConnectionClosedError, Pyro4.errors.CommunicationError):
497497
# Client not listening
498-
_logger.info("Removing %s from client stack: disconnected."
499-
% client._pyroUri)
498+
_logger.info("Removing %s from client stack: disconnected.",
499+
client._pyroUri)
500500
self._clientStack = list(filter(client.__ne__, self._clientStack))
501501
self._liveClients = self._liveClients.difference([client])
502502
except:
@@ -592,7 +592,7 @@ def set_client(self, new_client):
592592
if self._client is None:
593593
_logger.info("Current client is None.")
594594
else:
595-
_logger.info("Current client is %s." % str(self._client))
595+
_logger.info("Current client is %s.", str(self._client))
596596

597597

598598
@keep_acquiring

microscope/deviceserver.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,10 @@ def run(self):
225225
pyro_thread = Thread(target = pyro_daemon.requestLoop)
226226
pyro_thread.daemon = True
227227
pyro_thread.start()
228-
_logger.info('Serving %s' % pyro_daemon.uriFor(self._device))
228+
_logger.info('Serving %s', pyro_daemon.uriFor(self._device))
229229
if isinstance(self._device, microscope.devices.FloatingDeviceMixin):
230-
_logger.info('Device UID on port %s is %s'
231-
% (port, self._device.get_id()))
230+
_logger.info('Device UID on port %s is %s',
231+
port, self._device.get_id())
232232

233233
# Wait for termination event. We should just be able to call
234234
# wait() on the exit_event, but this causes issues with locks
@@ -327,21 +327,21 @@ def keep_alive():
327327
continue
328328
else:
329329
_logger.info("DeviceServer Failure. Process %s is dead with"
330-
" exitcode %s. Restarting..."
331-
% (s.pid, s.exitcode))
330+
" exitcode %s. Restarting...",
331+
s.pid, s.exitcode)
332332
servers.remove(s)
333333
servers.append(s.clone())
334334

335335
try:
336336
s.join(30)
337337
except:
338-
_logger.error("... could not join PID %s." % (s.pid))
338+
_logger.error("... could not join PID %s.", s.pid)
339339
else:
340340
old_pid = s.pid
341341
del (s)
342342
servers[-1].start()
343343
_logger.info("... DeviceServer with PID %s restarted"
344-
" as PID %s." % (old_pid, servers[-1].pid))
344+
" as PID %s.", old_pid, servers[-1].pid)
345345
if len(servers) == 0:
346346
# Log and exit if no servers running. May want to change this
347347
# if we add some interface to interactively restart servers.

microscope/lasers/cobolt.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def get_max_power_mw(self):
134134
try:
135135
return float(response)
136136
except:
137-
_logger.info("Bad response to gmlp?\n %s" % response.decode())
137+
_logger.info("Bad response to gmlp?\n %s", response.decode())
138138

139139

140140
@devices.SerialDeviceMixIn.lock_comms

microscope/lasers/obis.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,25 +39,25 @@ def __init__(self, com, baud=115200, timeout=0.5, **kwargs) -> None:
3939
# Start a logger.
4040
self._write(b'SYSTem:INFormation:MODel?')
4141
response = self._readline()
42-
_logger.info('OBIS laser model: [%s]' % response.decode())
42+
_logger.info('OBIS laser model: [%s]', response.decode())
4343
self._write(b'SYSTem:INFormation:SNUMber?')
4444
response = self._readline()
45-
_logger.info('OBIS laser serial number: [%s]' % response.decode())
45+
_logger.info('OBIS laser serial number: [%s]', response.decode())
4646
self._write(b'SYSTem:CDRH?')
4747
response = self._readline()
48-
_logger.info('CDRH safety: [%s]' % response.decode())
48+
_logger.info('CDRH safety: [%s]', response.decode())
4949
self._write(b'SOURce:TEMPerature:APRobe?')
5050
response = self._readline()
51-
_logger.info('TEC temperature control: [%s]' % response.decode())
51+
_logger.info('TEC temperature control: [%s]', response.decode())
5252
self._write(b'*TST?')
5353
response = self._readline()
54-
_logger.info('Self test procedure: [%s]' % response.decode())
54+
_logger.info('Self test procedure: [%s]', response.decode())
5555

5656
# We need to ensure that autostart is disabled so that we can
5757
# switch emission on/off remotely.
5858
self._write(b'SYSTem:AUTostart?')
5959
response = self._readline()
60-
_logger.info('Response to Autostart: [%s]' % response.decode())
60+
_logger.info('Response to Autostart: [%s]', response.decode())
6161

6262
def _write(self, command):
6363
"""Send a command."""
@@ -101,7 +101,7 @@ def enable(self):
101101
self._flush_handshake()
102102
self._write(b'SOURce:AM:STATe?')
103103
response = self._readline()
104-
_logger.info("SOURce:AM:STATe? [%s]" % response.decode())
104+
_logger.info("SOURce:AM:STATe? [%s]", response.decode())
105105

106106
if not self.get_is_on():
107107
# Something went wrong.

microscope/lasers/sapphire.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def __init__(self, com=None, baud=19200, timeout=0.5, **kwargs):
5858
# Head ID value is a float point value,
5959
# but only the integer part is significant
6060
headID = int(float(self.send(b'?hid')))
61-
_logger.info("Sapphire laser serial number: [%s]" % headID)
61+
_logger.info("Sapphire laser serial number: [%s]", headID)
6262

6363
def _write(self, command):
6464
count = super()._write(command)
@@ -132,7 +132,7 @@ def _on_enable(self):
132132
_logger.info("Turning laser ON.")
133133
# Turn on emission.
134134
response = self.send(b'l=1')
135-
_logger.info("l=1: [%s]" % response.decode())
135+
_logger.info("l=1: [%s]", response.decode())
136136

137137
# Enabling laser might take more than 500ms (default timeout)
138138
prevTimeout = self.connection.timeout
@@ -177,7 +177,7 @@ def get_power_mw(self):
177177
@devices.SerialDeviceMixIn.lock_comms
178178
def _set_power_mw(self, mW):
179179
mW_str = '%.3f' % mW
180-
_logger.info("Setting laser power to %s mW." % mW_str)
180+
_logger.info("Setting laser power to %s mW.", mW_str)
181181
# using send instead of _write, because
182182
# if laser is not on, warning is returned
183183
return self.send(b'p=%s' % mW_str.encode())

microscope/testsuite/devices.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ def _fetch_data(self):
238238
return image
239239

240240
def abort(self):
241-
_logger.info("Disabling acquisition; %d images sent." % self._sent)
241+
_logger.info("Disabling acquisition; %d images sent.", self._sent)
242242
if self._acquiring:
243243
self._acquiring = False
244244

@@ -283,8 +283,8 @@ def get_trigger_type(self):
283283
return devices.TRIGGER_SOFT
284284

285285
def soft_trigger(self):
286-
_logger.info('Trigger received; self._acquiring is %s.'
287-
% self._acquiring)
286+
_logger.info('Trigger received; self._acquiring is %s.',
287+
self._acquiring)
288288
if self._acquiring:
289289
self._triggered += 1
290290

@@ -316,7 +316,7 @@ def get_position(self):
316316

317317
def set_position(self, position):
318318
time.sleep(1)
319-
_logger.info("Setting position to %s" % position)
319+
_logger.info("Setting position to %s", position)
320320
self._position = position
321321

322322
def initialize(self):
@@ -354,7 +354,7 @@ def get_is_on(self):
354354
return self._emission
355355

356356
def _set_power_mw(self, level):
357-
_logger.info("Power set to %s." % level)
357+
_logger.info("Power set to %s.", level)
358358
self._power = level
359359

360360
def get_max_power_mw(self):
@@ -401,7 +401,7 @@ def _on_shutdown(self):
401401
pass
402402

403403
def set_sim_diffraction_angle(self, theta):
404-
_logger.info('set_sim_diffraction_angle %f' % theta)
404+
_logger.info('set_sim_diffraction_angle %f', theta)
405405
self.sim_diffraction_angle = theta
406406

407407
def get_sim_diffraction_angle(self):
@@ -447,15 +447,15 @@ def Abort(self):
447447
_logger.info('Abort')
448448

449449
def WriteDigital(self, value):
450-
_logger.info('WriteDigital: %s' % "{0:b}".format(value))
450+
_logger.info('WriteDigital: %s', bin(value))
451451
self._digi = value
452452

453453
def MoveAbsolute(self, aline, pos):
454-
_logger.info('MoveAbsoluteADU: line %d, value %d' % (aline, pos))
454+
_logger.info('MoveAbsoluteADU: line %d, value %d', aline, pos)
455455
self._ana[aline] = pos
456456

457457
def arcl(self, mask, pairs):
458-
_logger.info('arcl: %s, %s' % (mask, pairs))
458+
_logger.info('arcl: %s, %s', mask, pairs)
459459

460460
def profileSet(self, pstr, digitals, *analogs):
461461
_logger.info('profileSet ...')
@@ -475,12 +475,12 @@ def trigCollect(self, *args, **kwargs):
475475
_logger.info(kwargs)
476476

477477
def ReadPosition(self, aline):
478-
_logger.info('ReadPosition : line %d, value %d'
479-
% (aline, self._ana[aline]))
478+
_logger.info('ReadPosition : line %d, value %d',
479+
aline, self._ana[aline])
480480
return self._ana[aline]
481481

482482
def ReadDigital(self):
483-
_logger.info('ReadDigital: %s' % "{0:b}".format(self._digi))
483+
_logger.info('ReadDigital: %s', bin(self._digi))
484484
return self._digi
485485

486486
def PrepareActions(self, actions, numReps=1):

0 commit comments

Comments
 (0)