improve Py2/3 compat

Change-Id: I1dfdcb88a492401851d5157c734cd708496bf004
Reviewed-on: https://forge.frm2.tum.de/review/17734
Tested-by: JenkinsCodeReview <bjoern_pedersen@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
This commit is contained in:
Enrico Faulhaber
2018-04-16 14:08:12 +02:00
parent 0d25dc35e0
commit 3b802e67c8
39 changed files with 917 additions and 1618 deletions

View File

@ -30,6 +30,8 @@ import time
import types
import inspect
import six # for py2/3 compat
from secop.lib import formatExtendedStack, mkthread
from secop.lib.parsing import format_time
from secop.errors import ConfigError, ProgrammingError
@ -123,7 +125,7 @@ class Override(object):
def apply(self, paramobj):
if isinstance(paramobj, Param):
for k, v in self.kwds.iteritems():
for k, v in self.kwds.items():
if hasattr(paramobj, k):
setattr(paramobj, k, v)
return paramobj
@ -184,9 +186,9 @@ class ModuleMeta(type):
newparams = getattr(newtype, 'parameters')
for base in reversed(bases):
overrides = getattr(base, 'overrides', {})
for n, o in overrides.iteritems():
for n, o in overrides.items():
newparams[n] = o.apply(newparams[n].copy())
for n, o in attrs.get('overrides', {}).iteritems():
for n, o in attrs.get('overrides', {}).items():
newparams[n] = o.apply(newparams[n].copy())
# check validity of Param entries
@ -291,9 +293,9 @@ class ModuleMeta(type):
# if you want to 'update from the hardware', call self.read_<pname>
# the return value of this method will be used as the new cached value and
# be returned.
@six.add_metaclass(ModuleMeta)
class Module(object):
"""Basic Module, doesn't do much"""
__metaclass__ = ModuleMeta
# static properties, definitions in derived classes should overwrite earlier ones.
# how to configure some stuff which makes sense to take from configfile???
properties = {
@ -318,13 +320,13 @@ class Module(object):
self.name = devname
# make local copies of parameter
params = {}
for k, v in self.parameters.items()[:]:
for k, v in list(self.parameters.items()):
params[k] = v.copy()
self.parameters = params
# make local copies of properties
props = {}
for k, v in self.properties.items()[:]:
for k, v in list(self.properties.items()):
props[k] = v
self.properties = props
@ -332,7 +334,7 @@ class Module(object):
# check and apply properties specified in cfgdict
# moduleproperties are to be specified as
# '.<propertyname>=<propertyvalue>'
for k, v in cfgdict.items():
for k, v in list(cfgdict.items()): # keep list() as dict may change during iter
if k[0] == '.':
if k[1:] in self.properties:
self.properties[k[1:]] = v
@ -347,13 +349,13 @@ class Module(object):
#self.properties['interface'] = self.properties['interfaces'][0]
# remove unset (default) module properties
for k, v in self.properties.items():
for k, v in list(self.properties.items()): # keep list() as dict may change during iter
if v is None:
del self.properties[k]
# check and apply parameter_properties
# specified as '<paramname>.<propertyname> = <propertyvalue>'
for k, v in cfgdict.items()[:]:
for k, v in list(cfgdict.items()): # keep list() as dict may change during iter
if '.' in k[1:]:
paramname, propname = k.split('.', 1)
if paramname in self.parameters:
@ -370,8 +372,8 @@ class Module(object):
if k not in self.parameters:
raise ConfigError(
'Module %s:config Parameter %r '
'not unterstood! (use on of %r)' %
(self.name, k, self.parameters.keys()))
'not unterstood! (use one of %s)' %
(self.name, k, ', '.join(self.parameters)))
# complain if a Param entry has no default value and
# is not specified in cfgdict
@ -464,7 +466,7 @@ class Readable(Module):
fastpoll = stat[0] == status.BUSY
# if fastpoll:
# self.log.info('fastpoll!')
for pname, pobj in self.parameters.iteritems():
for pname, pobj in self.parameters.items():
if not pobj.poll:
continue
if pname == 'status':
@ -520,7 +522,7 @@ class Communicator(Module):
"""
commands = {
"communicate" : Command("provides the simplest mean to communication",
"communicate": Command("provides the simplest mean to communication",
arguments=[StringType()],
result=StringType()
),