added doc on migration
[plcapi.git] / PLC / Accessors / Factory.py
index 546e3d9..ebe6720 100644 (file)
@@ -1,7 +1,6 @@
+#
 # Thierry Parmentelat - INRIA
-# $Id$
-# $URL$
-
+#
 from types import NoneType
 
 from PLC.Faults import *
@@ -25,9 +24,7 @@ from PLC.PersonTags import PersonTags, PersonTag
 # this is another story..
 #from PLC.Ilinks import Ilink
 
-from PLC.TagTypes import TagTypes, TagType
-
-# known classes : { class -> secondary_key }
+# known classes : { class -> details }
 taggable_classes = { Node : {'table_class' : Nodes,
                              'joins_class' : NodeTags, 'join_class' : NodeTag,
                              'secondary_key': 'hostname'},
@@ -54,23 +51,28 @@ tech_roles = [ 'admin', 'pi', 'tech' ]
 #
 # generates 2 method classes:
 # Get<classname><methodsuffix> (auth, id_or_name) -> value or None
-# Set<classname><methodsuffix> (auth, id_or_name, value) -> None
+# Set<classname><methodsuffix> (auth, id_or_name, value) -> value
 # value is always a string, no cast nor typecheck for now
 #
 # The expose_in_api flag tells whether this tag may be handled
 #   through the Add/Get/Update methods as a native field
 #
-# note: tag_min_role_id gets attached to the tagtype instance,
+# note: roles get attached to the tagtype instance,
 # while get_roles and set_roles get attached to the created methods
 # this might need a cleanup
 #
 # in addition a convenience method like e.g. LocateNodeArch is defined
 # in the Accessor class; its purpose is to retrieve the tag, or to create it if needed
+# 
+# Legacy NOTE:
+# prior to plcapi-5.0-19, this used to accept an additional argument
+# named min_role_id; this was redundant and confusing, it has been
+# removed, we now use set_roles to restrict access on the corresponding tag
 
 def define_accessors (module, objclass, methodsuffix, tagname,
                       category, description,
-                      get_roles=['admin'], set_roles=['admin'],
-                      tag_min_role_id=10, expose_in_api = False):
+                      get_roles=all_roles, admin_roles, 
+                      expose_in_api = False):
 
     if objclass not in taggable_classes:
         try:
@@ -128,7 +130,7 @@ def define_accessors (module, objclass, methodsuffix, tagname,
         return self.locate_or_create_tag (tagname=tagname,
                                           category=category,
                                           description=description,
-                                          min_role_id=tag_min_role_id)
+                                          roles=set_roles)
 
     # attach it to the Accessor class
     setattr(Accessor,locator_name,locate_or_create_tag)
@@ -201,6 +203,7 @@ def define_accessors (module, objclass, methodsuffix, tagname,
         else:
             self.message += " %d "%objs[0][primary_key]
         self.message += "updated"
+        return value
 
     # attach it
     setattr (set_class,"call",set_call)