From 70485218c07c56c8ce5c77ce435663b1c920b347 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Wed, 09 Aug 2006 00:02:34 +0000 Subject: Split the factory to his own module --- (limited to 'sugar') diff --git a/sugar/activity/Activity.py b/sugar/activity/Activity.py index c1e9297..e99da5a 100644 --- a/sugar/activity/Activity.py +++ b/sugar/activity/Activity.py @@ -1,6 +1,3 @@ -import sys -import logging - import dbus import dbus.service import dbus.glib @@ -13,78 +10,11 @@ from sugar.presence.PresenceService import PresenceService gtk.gdk.threads_init() dbus.glib.threads_init() -from sugar.LogWriter import LogWriter import sugar.util ACTIVITY_SERVICE_NAME = "com.redhat.Sugar.Activity" ACTIVITY_SERVICE_PATH = "/com/redhat/Sugar/Activity" -def get_path(activity_name): - """Returns the activity path""" - return '/' + activity_name.replace('.', '/') - -def get_factory(activity_name): - """Returns the activity factory""" - return activity_name + '.Factory' - -class ActivityFactory(dbus.service.Object): - """Dbus service that takes care of creating new instances of an activity""" - - def __init__(self, name, activity_class, default_type): - self._default_type = default_type - - splitted_module = activity_class.rsplit('.', 1) - module_name = splitted_module[0] - class_name = splitted_module[1] - - module = __import__(module_name) - for comp in module_name.split('.')[1:]: - module = getattr(module, comp) - - self._class = getattr(module, class_name) - - bus = dbus.SessionBus() - factory = get_factory(name) - bus_name = dbus.service.BusName(factory, bus = bus) - dbus.service.Object.__init__(self, bus_name, get_path(factory)) - - @dbus.service.method("com.redhat.Sugar.ActivityFactory", - in_signature="o", out_signature="") - def create_with_service(self, service_path): - pservice = PresenceService() - service = pservice.get(service_path) - - activity = self._class() - activity.set_default_type(self._default_type) - activity.join(service) - - @dbus.service.method("com.redhat.Sugar.ActivityFactory") - def create(self): - activity = self._class() - activity.set_default_type(self._default_type) - - -def create(activity_name, service = None): - """Create a new activity from his name.""" - bus = dbus.SessionBus() - - factory_name = get_factory(activity_name) - factory_path = get_path(factory_name) - - proxy_obj = bus.get_object(factory_name, factory_path) - factory = dbus.Interface(proxy_obj, "com.redhat.Sugar.ActivityFactory") - - if service: - print service.object_path() - factory.create_with_service(service.object_path()) - else: - factory.create() - -def register_factory(name, activity_class, default_type=None): - """Register the activity factory.""" - factory = ActivityFactory(name, activity_class, default_type) - gtk.main() - class ActivityDbusService(dbus.service.Object): """Base dbus service object that each Activity uses to export dbus methods. @@ -187,6 +117,5 @@ class Activity(gtk.Window): """Share the activity on the network.""" properties = { 'title' : self.get_title() } self._service = self._pservice.share_activity(self, - self._default_type, - properties) + self._default_type, properties) self._shared = True diff --git a/sugar/activity/ActivityFactory.py b/sugar/activity/ActivityFactory.py new file mode 100644 index 0000000..ca3dfb8 --- /dev/null +++ b/sugar/activity/ActivityFactory.py @@ -0,0 +1,76 @@ +import sys +import logging + +import dbus +import dbus.service +import gobject + +from sugar.presence.PresenceService import PresenceService + +ACTIVITY_SERVICE_NAME = "com.redhat.Sugar.Activity" +ACTIVITY_SERVICE_PATH = "/com/redhat/Sugar/Activity" + +def get_path(activity_name): + """Returns the activity path""" + return '/' + activity_name.replace('.', '/') + +def _get_factory(activity_name): + """Returns the activity factory""" + return activity_name + '.Factory' + +class ActivityFactory(dbus.service.Object): + """Dbus service that takes care of creating new instances of an activity""" + + def __init__(self, name, activity_class, default_type): + self._default_type = default_type + + splitted_module = activity_class.rsplit('.', 1) + module_name = splitted_module[0] + class_name = splitted_module[1] + + module = __import__(module_name) + for comp in module_name.split('.')[1:]: + module = getattr(module, comp) + + self._class = getattr(module, class_name) + + bus = dbus.SessionBus() + factory = _get_factory(name) + bus_name = dbus.service.BusName(factory, bus = bus) + dbus.service.Object.__init__(self, bus_name, get_path(factory)) + + @dbus.service.method("com.redhat.Sugar.ActivityFactory", + in_signature="o", out_signature="") + def create_with_service(self, service_path): + pservice = PresenceService() + service = pservice.get(service_path) + + activity = self._class() + activity.set_default_type(self._default_type) + activity.join(service) + + @dbus.service.method("com.redhat.Sugar.ActivityFactory") + def create(self): + activity = self._class() + activity.set_default_type(self._default_type) + + +def create(activity_name, service = None): + """Create a new activity from his name.""" + bus = dbus.SessionBus() + + factory_name = _get_factory(activity_name) + factory_path = get_path(factory_name) + + proxy_obj = bus.get_object(factory_name, factory_path) + factory = dbus.Interface(proxy_obj, "com.redhat.Sugar.ActivityFactory") + + if service: + print service.object_path() + factory.create_with_service(service.object_path()) + else: + factory.create() + +def register_factory(name, activity_class, default_type=None): + """Register the activity factory.""" + factory = ActivityFactory(name, activity_class, default_type) diff --git a/sugar/activity/Makefile.am b/sugar/activity/Makefile.am index dacd474..1e90df1 100644 --- a/sugar/activity/Makefile.am +++ b/sugar/activity/Makefile.am @@ -1,4 +1,5 @@ sugardir = $(pythondir)/sugar/activity sugar_PYTHON = \ __init__.py \ - Activity.py + Activity.py \ + ActivityFactory.py -- cgit v0.9.1