Several cleanups
This commit is contained in:
parent
7152755c5e
commit
165fe0b00e
@ -28,7 +28,7 @@ else:
|
||||
sourcedir = None
|
||||
|
||||
from sugar import env
|
||||
from sugar import setup
|
||||
from sugar import util
|
||||
|
||||
if sourcedir:
|
||||
if os.environ.has_key('PYTHONPATH'):
|
||||
@ -50,12 +50,12 @@ if sourcedir:
|
||||
|
||||
bin = os.path.join(sourcedir,
|
||||
'services/presence/sugar-presence-service')
|
||||
setup.write_service('org.laptop.Presence', bin,
|
||||
util.write_service('org.laptop.Presence', bin,
|
||||
env.get_user_service_dir())
|
||||
|
||||
bin = os.path.join(sourcedir,
|
||||
'services/clipboard/sugar-clipboard')
|
||||
setup.write_service('org.laptop.Clipboard', bin,
|
||||
util.write_service('org.laptop.Clipboard', bin,
|
||||
env.get_user_service_dir())
|
||||
|
||||
from sugar.emulator import Emulator
|
||||
|
@ -30,10 +30,6 @@ 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"""
|
||||
|
||||
@ -55,7 +51,7 @@ class ActivityFactory(dbus.service.Object):
|
||||
self._constructor = getattr(module, class_name)
|
||||
|
||||
bus = dbus.SessionBus()
|
||||
factory = _get_factory(activity_type)
|
||||
factory = activity_type
|
||||
bus_name = dbus.service.BusName(factory, bus = bus)
|
||||
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."""
|
||||
bus = dbus.SessionBus()
|
||||
|
||||
factory_name = _get_factory(activity_name)
|
||||
factory_name = activity_name
|
||||
factory_path = get_path(factory_name)
|
||||
|
||||
proxy_obj = bus.get_object(factory_name, factory_path)
|
||||
|
@ -3,10 +3,7 @@ from ConfigParser import ConfigParser
|
||||
|
||||
from sugar.activity.bundle import Bundle
|
||||
from sugar import env
|
||||
|
||||
class _ServiceParser(ConfigParser):
|
||||
def optionxform(self, option):
|
||||
return option
|
||||
from sugar import util
|
||||
|
||||
class _ServiceManager(object):
|
||||
def __init__(self):
|
||||
@ -15,24 +12,10 @@ class _ServiceManager(object):
|
||||
def add(self, bundle):
|
||||
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 += ' ' + bundle.get_path()
|
||||
service_cp.set(section, 'Exec', full_exec)
|
||||
|
||||
dest = os.path.join(self._path, name + '.service')
|
||||
fileobject = open(dest, 'w')
|
||||
service_cp.write(fileobject)
|
||||
fileobject.close()
|
||||
util.write_service(name, full_exec, self._path)
|
||||
|
||||
class BundleRegistry:
|
||||
"""Service that tracks the available activity bundles"""
|
||||
|
@ -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])
|
@ -20,20 +20,9 @@ import sha
|
||||
import random
|
||||
import binascii
|
||||
import string
|
||||
|
||||
import gobject
|
||||
|
||||
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
|
||||
import os
|
||||
from ConfigParser import ConfigParser
|
||||
from ConfigParser import NoOptionError
|
||||
|
||||
def printable_hash(in_hash):
|
||||
"""Convert binary hash data into printable characters."""
|
||||
@ -68,3 +57,18 @@ def validate_activity_id(actid):
|
||||
return False
|
||||
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()
|
||||
|
Loading…
Reference in New Issue
Block a user