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
25 v42_to_v43_renaming = {
26 "nodenetwork_id":"interface_id",
27 "nodenetwork_ids":"interface_ids",
28 "nodenetworksetting_ids":"interface_tag_ids",
31 v43_to_v42_renaming = dict([ (v,k) for k,v in v42_to_v43_renaming.iteritems()])
33 for k,v in v42_to_v43_renaming.iteritems():
34 v43_to_v42_renaming[v]=k
37 return v42_to_v43_renaming.get(x,x)
40 return v43_to_v42_renaming.get(x,x)
43 # apply rename on list (columns) or dict (filter) args
44 def patch_legacy_arg (arg,rename):
45 if isinstance(arg,list):
46 return [rename(x) for x in arg]
47 if isinstance(arg,dict):
48 return dict ( [ (rename(k),v) for (k,v) in arg.iteritems() ] )
51 def patch_legacy_return (retval,rename):
52 if isinstance(retval,list):
53 for i in range(0,len(retval)):
54 retval[i] = patch_legacy_return(retval[i],rename)
56 if isinstance(retval,dict):
57 return dict ( [ (rename(k),v) for (k,v) in retval.iteritems() ] )
60 def legacy_method (legacyname):
62 newname=legacyname.replace("NodeNetwork","Interface").replace("Setting","Tag")
64 newclass=getattr(import_deep("PLC.Methods."+newname),newname)
65 # create class for legacy name
66 legacyclass = type(legacyname,(newclass,),
67 {"__doc__":"Legacy method - please use %s instead"%newname})
68 # xxx should rewrite 'call' to handle any argument using nodenetwork_id(s)
69 for internal in ["roles","accepts","returns"]:
70 setattr(legacyclass,internal,getattr(newclass,internal))
71 # turn off type checking, as introspection code fails on wrapped_call
72 setattr(legacyclass,"skip_typecheck",True)
74 def wrapped_call (self,auth,*args, **kwds):
75 print "%s: self.caller = %s, self=%s" % (legacyname,self.caller,self)
76 newargs=[patch_legacy_arg(x,v42rename) for x in args]
77 newkwds=dict ( [ (k,patch_legacy_arg(v,v42rename)) for (k,v) in kwds.iteritems() ] )
78 results = getattr(newclass,"call")(self,auth,*newargs,**newkwds)
79 return patch_legacy_return(results,v43rename)
80 setattr(legacyclass,"call",wrapped_call)
85 current_module=sys.modules[__name__]
88 for legacyname in methods:
89 setattr(current_module,legacyname,legacy_method(legacyname))