Add OMF Classes using XMPP and Protocol 5.4
[nepi.git] / src / neco / execution / resource.py
index aba9d08..d3a1dc4 100644 (file)
@@ -2,12 +2,16 @@ import copy
 import logging
 import weakref
 
+def clsinit(cls):
+    cls._clsinit()
+    return cls
+
+# Decorator to invoke class initialization method
+@clsinit
 class Resource(object):
-    # static template for resource filters
-    _filters = dict()
-    
-    # static template for resource attributes
-    _attributes = dict()
+    _rtype = "Resource"
+    _filters = None
+    _attributes = None
 
     @classmethod
     def _register_filter(cls, attr):
@@ -16,11 +20,37 @@ class Resource(object):
         cls._filters[attr.name] = attr
 
     @classmethod
-    def _register_attributes(cls, attr):
+    def _register_attribute(cls, attr):
         """ Resource subclasses will invoke this method to add a 
         resource attribute"""
         cls._attributes[attr.name] = attr
 
+    @classmethod
+    def _register_filters(cls):
+        """ Resource subclasses will invoke this method to add a 
+        filter attribute"""
+        pass
+
+    @classmethod
+    def _register_attributes(cls):
+        """ Resource subclasses will invoke this method to add a 
+        resource attribute"""
+        pass
+
+    @classmethod
+    def _clsinit(cls):
+        # static template for resource filters
+        cls._filters = dict()
+        cls._register_filters()
+
+        # static template for resource attributes
+        cls._attributes = dict()
+        cls._register_attributes()
+
+    @classmethod
+    def rtype(cls):
+        return cls._rtype
+
     @classmethod
     def get_filters(cls):
         return copy.deepcopy(cls._filters.values())
@@ -38,10 +68,8 @@ class Resource(object):
         self._attrs = copy.deepcopy(self._attributes)
 
         # Logging
-        loglevel = "debug"
         self._logger = logging.getLogger("neco.execution.resource.Resource.%s" % 
             self.guid)
-        self._logger.setLevel(getattr(logging, loglevel.upper()))
 
     @property
     def guid(self):
@@ -55,6 +83,10 @@ class Resource(object):
         if (self._validate_connection(guid)):
             self._connections.add(guid)
 
+    @property
+    def connections(self):
+        return self._connections
+
     def discover(self, filters):
         pass
 
@@ -78,6 +110,9 @@ class Resource(object):
     def set_after(self, name, value, time, after_status, guid):
         pass
 
+    def next_step(self):
+        pass
+
     def stop(self):
         pass
 
@@ -89,10 +124,15 @@ class ResourceFactory(object):
     _resource_types = dict()
 
     @classmethod
-    def register_type(cls, rtype, rclass):
-        cls._resource_types[rtype] = rclass
+    def resource_types(cls):
+        return cls._resource_types
 
     @classmethod
-    def create(cls, rtype, ec, guid):
-        rclass = cls._resource[rtype]
-        return rclass(ec, guid)
+    def register_type(cls, rclass):
+        cls._resource_types[rclass.rtype()] = rclass
+
+    @classmethod
+    def create(cls, rtype, ec, guid, creds):
+        rclass = cls._resource_types[rtype]
+        return rclass(ec, guid, creds)
+