Several cleanups

This commit is contained in:
Marco Pesenti Gritti 2006-12-01 23:23:58 +01:00
parent 7152755c5e
commit 165fe0b00e
5 changed files with 27 additions and 133 deletions

View File

@ -28,7 +28,7 @@ else:
sourcedir = None sourcedir = None
from sugar import env from sugar import env
from sugar import setup from sugar import util
if sourcedir: if sourcedir:
if os.environ.has_key('PYTHONPATH'): if os.environ.has_key('PYTHONPATH'):
@ -50,13 +50,13 @@ if sourcedir:
bin = os.path.join(sourcedir, bin = os.path.join(sourcedir,
'services/presence/sugar-presence-service') 'services/presence/sugar-presence-service')
setup.write_service('org.laptop.Presence', bin, util.write_service('org.laptop.Presence', bin,
env.get_user_service_dir()) env.get_user_service_dir())
bin = os.path.join(sourcedir, bin = os.path.join(sourcedir,
'services/clipboard/sugar-clipboard') 'services/clipboard/sugar-clipboard')
setup.write_service('org.laptop.Clipboard', bin, util.write_service('org.laptop.Clipboard', bin,
env.get_user_service_dir()) env.get_user_service_dir())
from sugar.emulator import Emulator from sugar.emulator import Emulator

View File

@ -30,10 +30,6 @@ def get_path(activity_name):
"""Returns the activity path""" """Returns the activity path"""
return '/' + activity_name.replace('.', '/') return '/' + activity_name.replace('.', '/')
def _get_factory(activity_name):
"""Returns the activity factory"""
return activity_name + '.Factory'
class ActivityFactory(dbus.service.Object): class ActivityFactory(dbus.service.Object):
"""Dbus service that takes care of creating new instances of an activity""" """Dbus service that takes care of creating new instances of an activity"""
@ -55,7 +51,7 @@ class ActivityFactory(dbus.service.Object):
self._constructor = getattr(module, class_name) self._constructor = getattr(module, class_name)
bus = dbus.SessionBus() bus = dbus.SessionBus()
factory = _get_factory(activity_type) factory = activity_type
bus_name = dbus.service.BusName(factory, bus = bus) bus_name = dbus.service.BusName(factory, bus = bus)
dbus.service.Object.__init__(self, bus_name, get_path(factory)) dbus.service.Object.__init__(self, bus_name, get_path(factory))
@ -82,7 +78,7 @@ def create(activity_name):
"""Create a new activity from his name.""" """Create a new activity from his name."""
bus = dbus.SessionBus() bus = dbus.SessionBus()
factory_name = _get_factory(activity_name) factory_name = activity_name
factory_path = get_path(factory_name) factory_path = get_path(factory_name)
proxy_obj = bus.get_object(factory_name, factory_path) proxy_obj = bus.get_object(factory_name, factory_path)

View File

@ -3,10 +3,7 @@ from ConfigParser import ConfigParser
from sugar.activity.bundle import Bundle from sugar.activity.bundle import Bundle
from sugar import env from sugar import env
from sugar import util
class _ServiceParser(ConfigParser):
def optionxform(self, option):
return option
class _ServiceManager(object): class _ServiceManager(object):
def __init__(self): def __init__(self):
@ -15,24 +12,10 @@ class _ServiceManager(object):
def add(self, bundle): def add(self, bundle):
name = bundle.get_service_name() name = bundle.get_service_name()
service_cp = _ServiceParser()
section = 'D-BUS Service'
service_cp.add_section(section)
# Compatibility with the old activity registry, remove after BTest-1
# service_cp.set(section, 'Name', name)
service_cp.set(section, 'Name', name + '.Factory')
# FIXME total hack
full_exec = env.get_shell_bin_dir() + '/' + bundle.get_exec() full_exec = env.get_shell_bin_dir() + '/' + bundle.get_exec()
full_exec += ' ' + bundle.get_path() full_exec += ' ' + bundle.get_path()
service_cp.set(section, 'Exec', full_exec)
dest = os.path.join(self._path, name + '.service') util.write_service(name, full_exec, self._path)
fileobject = open(dest, 'w')
service_cp.write(fileobject)
fileobject.close()
class BundleRegistry: class BundleRegistry:
"""Service that tracks the available activity bundles""" """Service that tracks the available activity bundles"""

View File

@ -1,89 +0,0 @@
#!/usr/bin/python
# Copyright (C) 2006, Red Hat, Inc.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
import os
import sys
import shutil
import logging
from ConfigParser import ConfigParser
from ConfigParser import NoOptionError
class ServiceParser(ConfigParser):
def optionxform(self, option):
return option
def write_service(name, bin, path):
service_cp = ServiceParser()
section = 'D-BUS Service'
service_cp.add_section(section)
service_cp.set(section, 'Name', name)
service_cp.set(section, 'Exec', bin)
dest_filename = os.path.join(path, name + '.service')
fileobject = open(dest_filename, 'w')
service_cp.write(fileobject)
fileobject.close()
def setup_activity(source, dest_path, bin):
"""Copy an activity to the destination path and setup it"""
filename = os.path.basename(source)
dest = os.path.join(dest_path, filename)
print 'Install ' + filename + ' ...'
shutil.copyfile(source, dest)
cp = ConfigParser()
cp.read([source])
try:
activity_id = cp.get('Activity', 'id')
except NoOptionError:
logging.error('%s miss the required id option' % (path))
return False
if cp.has_option('Activity', 'exec'):
activity_exec = cp.get('Activity', 'exec')
elif cp.has_option('Activity', 'python_module'):
python_module = cp.get('Activity', 'python_module')
python_module = cp.get('Activity', 'python_module')
activity_exec = '%s %s %s' % (bin, activity_id, python_module)
else:
logging.error('%s must specifiy exec or python_module' % (source))
return False
write_service(activity_id + '.Factory', activity_exec, dest_path)
def setup_activities(source_path, dest_path, bin):
"""Scan a directory for activities and install them."""
if not os.path.isdir(dest_path):
os.mkdir(dest_path)
else:
# FIXME delete the whole directory
pass
if os.path.isdir(source_path):
for filename in os.listdir(source_path):
activity_dir = os.path.join(source_path, filename)
if os.path.isdir(activity_dir):
for filename in os.listdir(activity_dir):
if filename.endswith(".activity"):
source = os.path.join(activity_dir, filename)
setup_activity(source, dest_path, bin)
if __name__=='__main__':
setup_activities(sys.argv[1], sys.argv[2], sys.argv[3])

View File

@ -20,20 +20,9 @@ import sha
import random import random
import binascii import binascii
import string import string
import os
import gobject from ConfigParser import ConfigParser
from ConfigParser import NoOptionError
class GObjectSingletonMeta(gobject.GObjectMeta):
"""GObject Singleton Metaclass"""
def __init__(klass, name, bases, dict):
gobject.GObjectMeta.__init__(klass, name, bases, dict)
klass.__instance = None
def __call__(klass, *args, **kwargs):
if klass.__instance is None:
klass.__instance = gobject.GObjectMeta.__call__(klass, *args, **kwargs)
return klass.__instance
def printable_hash(in_hash): def printable_hash(in_hash):
"""Convert binary hash data into printable characters.""" """Convert binary hash data into printable characters."""
@ -68,3 +57,18 @@ def validate_activity_id(actid):
return False return False
return True return True
class _ServiceParser(ConfigParser):
def optionxform(self, option):
return option
def write_service(name, bin, path):
service_cp = _ServiceParser()
section = 'D-BUS Service'
service_cp.add_section(section)
service_cp.set(section, 'Name', name)
service_cp.set(section, 'Exec', bin)
dest_filename = os.path.join(path, name + '.service')
fileobject = open(dest_filename, 'w')
service_cp.write(fileobject)
fileobject.close()