[pkg-fso-commits] [SCM] FSO frameworkd Debian packaging branch, master, updated. milestone4-368-g700ab82

Michael 'Mickey' Lauer mickey at vanille-media.de
Mon Feb 2 18:51:29 UTC 2009


The following commit has been merged in the master branch:
commit 42696e4986a8e053a2276207c27d207ee091a523
Author: Michael 'Mickey' Lauer <mickey at vanille-media.de>
Date:   Tue Dec 2 22:14:56 2008 +0100

    ousaged: refactor resource classes into seperate module

diff --git a/framework/subsystems/ousaged/generic.py b/framework/subsystems/ousaged/generic.py
index 44290ce..b51943c 100644
--- a/framework/subsystems/ousaged/generic.py
+++ b/framework/subsystems/ousaged/generic.py
@@ -18,6 +18,8 @@ __version__ = "0.6.0"
 DBUS_INTERFACE_PREFIX = "org.freesmartphone.Usage"
 DBUS_PATH_PREFIX = "/org/freesmartphone/Usage"
 
+from .resources import ClientResource
+
 import framework.patterns.tasklet as tasklet
 
 import gobject
@@ -54,202 +56,6 @@ class UserUnknown( dbus.DBusException ):
     _dbus_error_name = "org.freesmartphone.Usage.UserUnknown"
 
 #----------------------------------------------------------------------------#
-class AbstractResource( object ):
-#----------------------------------------------------------------------------#
-    """
-    Abstract base class for a resource.
-
-    This is the internal class used by the resource manager to keep track of a resource.
-    Every resource has a name, a list of current users, and a policy.
-
-    Valid policies are:
-        * auto: Reference counted, this is the default,
-        * disabled: The resource is always off,
-        * enabled: The resource is always on.
-    """
-
-    VALID_POLICIES = "disabled auto enable".split()
-
-    def __init__( self, usageControl, name = "Abstract" ):
-        """
-        Create a new resource
-
-        `usageControl` : the resource controler object that will handle this resource
-        `name` : the name of the resource
-        """
-        self.usageControl = usageControl
-        self.name = str(name)
-        self.users = []
-        self.policy = 'auto'
-        self.isEnabled = False
-
-    @tasklet.tasklet
-    def _enable( self ):
-        """
-        Enable the resource.
-        """
-        yield None
-
-    @tasklet.tasklet
-    def _disable( self ):
-        """
-        Disable the resource.
-        """
-        yield None
-
-    @tasklet.tasklet
-    def _suspend( self ):
-        """
-        Called before the system is going to suspend.
-        """
-        yield None
-
-    @tasklet.tasklet
-    def _resume( self ):
-        """
-        Called after a system resume.
-        """
-        yield None
-
-    @tasklet.tasklet
-    def _update( self ):
-        if not self.isEnabled and ( self.users or self.policy == 'enabled' ):
-            logger.debug( "Enabling %s", self.name )
-            ts = time.time()
-            yield self._enable()
-            logger.info( "Enabled %s in %.1f seconds", self.name, time.time()-ts )
-            self.isEnabled = True
-        elif self.isEnabled and not ( self.users or self.policy == 'enabled' ):
-            logger.debug( "Disabling %s", self.name )
-            ts = time.time()
-            yield self._disable()
-            logger.info( "Disabled %s in %.1f seconds", self.name, time.time()-ts )
-            self.isEnabled = False
-
-    @tasklet.tasklet
-    def setPolicy( self, policy ):
-        if not policy in AbstractResource.VALID_POLICIES:
-            raise PolicyUnknown( "Unknown resource policy. Valid policies are %s" % AbstractResource.VALID_POLICIES )
-        if self.users:
-            if policy == "disabled":
-                raise ResourceInUse( "Can't disable %s. Current users are: %s" % ( self.name, self.users ) )
-        if self.policy != policy:
-            self.policy = policy
-            yield self._update()
-            self.usageControl.ResourceChanged(
-                self.name, self.isEnabled, { "policy": self.policy, "refcount": len( self.users ) }
-            )
-
-    @tasklet.tasklet
-    def request( self, user ):
-        if not self.policy in [ 'auto', 'enabled' ]:
-            raise PolicyDisabled( "Requesting %s not allowed by resource policy." % ( self.name ) )
-        if user in self.users:
-            raise UserExists( "User %s already requested %s" % ( user, self.name ) )
-        self.users.append( user )
-        yield self._update()
-        self.usageControl.ResourceChanged(
-            self.name, self.isEnabled, {"policy": self.policy, "refcount": len( self.users )}
-        )
-
-    @tasklet.tasklet
-    def release( self, user ):
-        if not user in self.users:
-            raise UserUnknown( "User %s did not request %s before releasing it" % ( user, self.name ) )
-        self.users.remove( user )
-        yield self._update()
-        self.usageControl.ResourceChanged(
-            self.name, self.isEnabled, {"policy": self.policy, "refcount": len( self.users )}
-        )
-
-    @tasklet.tasklet
-    def cleanup( self, user ):
-        if user in self.users:
-            yield self.release( user )
-            logger.info( "Releasing %s for vanished user %s", self.name, user )
-
-#----------------------------------------------------------------------------#
-class DummyResource( AbstractResource ):
-#----------------------------------------------------------------------------#
-    """
-    This is a dummy resource class that does nothing.
-    """
-    def __init__( self, usageControl, name ):
-        AbstractResource.__init__( self , usageControl, name )
-
-    @tasklet.tasklet
-    def _enable( self ):
-        yield None
-
-    @tasklet.tasklet
-    def _disable( self ):
-        yield None
-
-#----------------------------------------------------------------------------#
-class ODeviceDResource( AbstractResource ):
-#----------------------------------------------------------------------------#
-    """
-    This is a resource class for objects controlled by the odeviced subsystem.
-    """
-    DEPRECATED = True
-
-    def __init__( self, usageControl, name ):
-        AbstractResource.__init__( self , usageControl, name )
-        self.bus = dbus.SystemBus()
-
-    @tasklet.tasklet
-    def _enable( self ):
-        proxy = self.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/PowerControl/" + self.name )
-        iface = dbus.Interface( proxy, "org.freesmartphone.Device.PowerControl" )
-        yield tasklet.WaitDBus( iface.SetPower, True)
-
-    @tasklet.tasklet
-    def _disable( self ):
-        proxy = self.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/PowerControl/" + self.name )
-        iface = dbus.Interface( proxy, "org.freesmartphone.Device.PowerControl" )
-        yield tasklet.WaitDBus( iface.SetPower, False )
-
-#----------------------------------------------------------------------------#
-class ClientResource( AbstractResource ):
-#----------------------------------------------------------------------------#
-    """A resource that is controled by an external client.
-
-    The client needs to expose a dbus object implementing org.freesmartphone.Resource.
-    It can register using the RegisterResource of /org/freesmartphone/Usage.
-    If the client is written in python, it can use the framework.Resource class.
-    """
-    def __init__( self, usageControl, name, path, sender ):
-        """
-        Create a new ClientResource
-
-        Only the resource manager should call this method
-        """
-        super( ClientResource, self ).__init__( usageControl, name )
-        bus = dbus.SystemBus()
-        proxy = bus.get_object( sender, path )
-        self.iface = dbus.Interface( proxy, "org.freesmartphone.Resource" )
-
-    @tasklet.tasklet
-    def _enable( self ):
-        """Simply call the client Enable method"""
-        yield tasklet.WaitDBus( self.iface.Enable )
-
-    @tasklet.tasklet
-    def _disable( self ):
-        """Simply call the client Disable method"""
-        yield tasklet.WaitDBus( self.iface.Disable )
-
-    @tasklet.tasklet
-    def _suspend( self ):
-        """Simply call the client Suspend method"""
-        yield tasklet.WaitDBus( self.iface.Suspend )
-
-    @tasklet.tasklet
-    def _resume( self ):
-        """Simply call the client Resume method"""
-        yield tasklet.WaitDBus( self.iface.Resume )
-
-#----------------------------------------------------------------------------#
 class GenericUsageControl( dbus.service.Object ):
 #----------------------------------------------------------------------------#
     """
@@ -452,28 +258,4 @@ def factory( prefix, controller ):
 #----------------------------------------------------------------------------#
 if __name__ == "__main__":
 #----------------------------------------------------------------------------#
-    bus = dbus.SystemBus()
-
-    def requestInterfaceForObject( prefix, interface, object ):
-        proxy = bus.get_object( prefix, object )
-        #print( proxy.Introspect( dbus_interface = "org.freedesktop.DBus.Introspectable" ) )
-        iface = dbus.Interface( proxy, interface )
-        return iface
-
-    usage = requestInterfaceForObject( DBUS_INTERFACE_PREFIX, GenericUsageControl.DBUS_INTERFACE, DBUS_PATH_PREFIX )
-
-    print "Found resources:", usage.ListResources()
-    print "GSM users list:", usage.GetResourceUsers("GSM")
-    print "Requesting GSM..."
-    usage.RequestResource("GSM")
-    print "GSM users list:", usage.GetResourceUsers("GSM")
-    print "Releasing GSM..."
-    usage.ReleaseResource("GSM")
-    print "GSM users list:", usage.GetResourceUsers("GSM")
-    print "Disabling GSM..."
-    usage.SetResourcePolicy("GSM", "disabled")
-    print "Enabling GSM..."
-    usage.SetResourcePolicy("GSM", "enabled")
-    print "Setting GSM to auto..."
-    usage.SetResourcePolicy("GSM", "auto")
-
+    pass
\ No newline at end of file
diff --git a/framework/subsystems/ousaged/resources.py b/framework/subsystems/ousaged/resources.py
new file mode 100644
index 0000000..eccfc9c
--- /dev/null
+++ b/framework/subsystems/ousaged/resources.py
@@ -0,0 +1,228 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+"""
+Open Usage Daemon - Generic reference counted Resource Management
+
+(C) 2008 Michael 'Mickey' Lauer <mlauer at vanille-media.de>
+(C) 2008 Jan 'Shoragan' Lübbe <jluebbe at lasnet.de>
+(C) 2008 Openmoko, Inc.
+GPLv2 or later
+
+Package: ousaged
+Module: resources
+"""
+
+MODULE_NAME = "ousaged"
+__version__ = "0.6.0"
+
+import framework.patterns.tasklet as tasklet
+
+import gobject
+import dbus
+import dbus.service
+
+import time, os, subprocess
+
+import logging
+logger = logging.getLogger( MODULE_NAME )
+
+#----------------------------------------------------------------------------#
+class AbstractResource( object ):
+#----------------------------------------------------------------------------#
+    """
+    Abstract base class for a resource.
+
+    This is the internal class used by the resource manager to keep track of a resource.
+    Every resource has a name, a list of current users, and a policy.
+
+    Valid policies are:
+        * auto: Reference counted, this is the default,
+        * disabled: The resource is always off,
+        * enabled: The resource is always on.
+    """
+
+    VALID_POLICIES = "disabled auto enable".split()
+
+    def __init__( self, usageControl, name = "Abstract" ):
+        """
+        Create a new resource
+
+        `usageControl` : the resource controler object that will handle this resource
+        `name` : the name of the resource
+        """
+        self.usageControl = usageControl
+        self.name = str(name)
+        self.users = []
+        self.policy = 'auto'
+        self.isEnabled = False
+
+    @tasklet.tasklet
+    def _enable( self ):
+        """
+        Enable the resource.
+        """
+        yield None
+
+    @tasklet.tasklet
+    def _disable( self ):
+        """
+        Disable the resource.
+        """
+        yield None
+
+    @tasklet.tasklet
+    def _suspend( self ):
+        """
+        Called before the system is going to suspend.
+        """
+        yield None
+
+    @tasklet.tasklet
+    def _resume( self ):
+        """
+        Called after a system resume.
+        """
+        yield None
+
+    @tasklet.tasklet
+    def _update( self ):
+        if not self.isEnabled and ( self.users or self.policy == 'enabled' ):
+            logger.debug( "Enabling %s", self.name )
+            ts = time.time()
+            yield self._enable()
+            logger.info( "Enabled %s in %.1f seconds", self.name, time.time()-ts )
+            self.isEnabled = True
+        elif self.isEnabled and not ( self.users or self.policy == 'enabled' ):
+            logger.debug( "Disabling %s", self.name )
+            ts = time.time()
+            yield self._disable()
+            logger.info( "Disabled %s in %.1f seconds", self.name, time.time()-ts )
+            self.isEnabled = False
+
+    @tasklet.tasklet
+    def setPolicy( self, policy ):
+        if not policy in AbstractResource.VALID_POLICIES:
+            raise PolicyUnknown( "Unknown resource policy. Valid policies are %s" % AbstractResource.VALID_POLICIES )
+        if self.users:
+            if policy == "disabled":
+                raise ResourceInUse( "Can't disable %s. Current users are: %s" % ( self.name, self.users ) )
+        if self.policy != policy:
+            self.policy = policy
+            yield self._update()
+            self.usageControl.ResourceChanged(
+                self.name, self.isEnabled, { "policy": self.policy, "refcount": len( self.users ) }
+            )
+
+    @tasklet.tasklet
+    def request( self, user ):
+        if not self.policy in [ 'auto', 'enabled' ]:
+            raise PolicyDisabled( "Requesting %s not allowed by resource policy." % ( self.name ) )
+        if user in self.users:
+            raise UserExists( "User %s already requested %s" % ( user, self.name ) )
+        self.users.append( user )
+        yield self._update()
+        self.usageControl.ResourceChanged(
+            self.name, self.isEnabled, {"policy": self.policy, "refcount": len( self.users )}
+        )
+
+    @tasklet.tasklet
+    def release( self, user ):
+        if not user in self.users:
+            raise UserUnknown( "User %s did not request %s before releasing it" % ( user, self.name ) )
+        self.users.remove( user )
+        yield self._update()
+        self.usageControl.ResourceChanged(
+            self.name, self.isEnabled, {"policy": self.policy, "refcount": len( self.users )}
+        )
+
+    @tasklet.tasklet
+    def cleanup( self, user ):
+        if user in self.users:
+            yield self.release( user )
+            logger.info( "Releasing %s for vanished user %s", self.name, user )
+
+#----------------------------------------------------------------------------#
+class DummyResource( AbstractResource ):
+#----------------------------------------------------------------------------#
+    """
+    This is a dummy resource class that does nothing.
+    """
+    def __init__( self, usageControl, name ):
+        AbstractResource.__init__( self , usageControl, name )
+
+    @tasklet.tasklet
+    def _enable( self ):
+        yield None
+
+    @tasklet.tasklet
+    def _disable( self ):
+        yield None
+
+#----------------------------------------------------------------------------#
+class ODeviceDResource( AbstractResource ):
+#----------------------------------------------------------------------------#
+    """
+    This is a resource class for objects controlled by the odeviced subsystem.
+    """
+    DEPRECATED = True
+
+    def __init__( self, usageControl, name ):
+        AbstractResource.__init__( self , usageControl, name )
+        self.bus = dbus.SystemBus()
+
+    @tasklet.tasklet
+    def _enable( self ):
+        proxy = self.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/PowerControl/" + self.name )
+        iface = dbus.Interface( proxy, "org.freesmartphone.Device.PowerControl" )
+        yield tasklet.WaitDBus( iface.SetPower, True)
+
+    @tasklet.tasklet
+    def _disable( self ):
+        proxy = self.bus.get_object( "org.freesmartphone.odeviced", "/org/freesmartphone/Device/PowerControl/" + self.name )
+        iface = dbus.Interface( proxy, "org.freesmartphone.Device.PowerControl" )
+        yield tasklet.WaitDBus( iface.SetPower, False )
+
+#----------------------------------------------------------------------------#
+class ClientResource( AbstractResource ):
+#----------------------------------------------------------------------------#
+    """A resource that is controled by an external client.
+
+    The client needs to expose a dbus object implementing org.freesmartphone.Resource.
+    It can register using the RegisterResource of /org/freesmartphone/Usage.
+    If the client is written in python, it can use the framework.Resource class.
+    """
+    def __init__( self, usageControl, name, path, sender ):
+        """
+        Create a new ClientResource
+
+        Only the resource manager should call this method
+        """
+        super( ClientResource, self ).__init__( usageControl, name )
+        bus = dbus.SystemBus()
+        proxy = bus.get_object( sender, path )
+        self.iface = dbus.Interface( proxy, "org.freesmartphone.Resource" )
+
+    @tasklet.tasklet
+    def _enable( self ):
+        """Simply call the client Enable method"""
+        yield tasklet.WaitDBus( self.iface.Enable )
+
+    @tasklet.tasklet
+    def _disable( self ):
+        """Simply call the client Disable method"""
+        yield tasklet.WaitDBus( self.iface.Disable )
+
+    @tasklet.tasklet
+    def _suspend( self ):
+        """Simply call the client Suspend method"""
+        yield tasklet.WaitDBus( self.iface.Suspend )
+
+    @tasklet.tasklet
+    def _resume( self ):
+        """Simply call the client Resume method"""
+        yield tasklet.WaitDBus( self.iface.Resume )
+
+#----------------------------------------------------------------------------#
+if __name__ == "__main__":
+#----------------------------------------------------------------------------#
+    pass

-- 
FSO frameworkd Debian packaging



More information about the pkg-fso-commits mailing list