Several cleanups
This commit is contained in:
parent
7152755c5e
commit
165fe0b00e
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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"""
|
||||||
|
@ -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 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()
|
||||||
|
Loading…
Reference in New Issue
Block a user