1 # Thierry Parmentelat - INRIA
4 from PLC.Method import Method
8 components = name.split('.')
9 for comp in components[1:]:
10 mod = getattr(mod, comp)
15 "AddNodeNetworkSetting",
17 "DeleteNodeNetworkSetting",
18 "GetNodeNetworkSettings",
21 "UpdateNodeNetworkSetting",
24 # does any required renaming
26 if x=='nodenetwork_id':
28 if x=='nodenetwork_ids':
29 return 'interface_ids'
33 # apply rename on list (columns) or dict (filter) args
34 def patch_legacy_arg (arg):
35 if isinstance(arg,list):
36 return [rename(x) for x in arg]
37 if isinstance(arg,dict):
38 return dict ( [ (rename(k),v) for (k,v) in arg.iteritems() ] )
41 def legacy_method (legacyname):
43 newname=legacyname.replace("NodeNetwork","Interface")
45 newclass=getattr(import_deep("PLC.Methods."+newname),newname)
46 # create class for legacy name
47 legacyclass = type(legacyname,(newclass,),
48 {"__doc__":"Legacy method - please use %s instead"%newname})
49 # xxx should rewrite 'call' to handle any argument using nodenetwork_id(s)
50 for internal in ["roles","accepts","returns"]:
51 setattr(legacyclass,internal,getattr(newclass,internal))
52 # turn off type checking, as introspection code fails on wrapped_call
53 setattr(legacyclass,"skip_typecheck",True)
55 def wrapped_call (self,auth,*args, **kwds):
56 newargs=[patch_legacy_arg(x) for x in args]
57 newkwds=dict ( [ (k,patch_legacy_arg(v)) for (k,v) in kwds.iteritems() ] )
58 return getattr(newclass,"call")(self,auth,*newargs,**newkwds)
59 setattr(legacyclass,"call",wrapped_call)
64 current_module=sys.modules[__name__]
67 for legacyname in methods:
68 setattr(current_module,legacyname,legacy_method(legacyname))