Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'sugar/setup.py')
-rwxr-xr-xsugar/setup.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/sugar/setup.py b/sugar/setup.py
new file mode 100755
index 0000000..b60112e
--- /dev/null
+++ b/sugar/setup.py
@@ -0,0 +1,67 @@
+#!/usr/bin/python
+
+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 _install_activity(activity_dir, filename, dest_path, bin):
+ source = os.path.join(activity_dir, filename)
+ 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', 'default_type'):
+ default_type = cp.get('Activity', 'default_type')
+ else:
+ default_type = None
+
+ 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)
+ if default_type:
+ activity_exec += ' ' + default_type
+ else:
+ logging.error('%s must specifiy exec or python_module' % (source))
+ return False
+
+ service_cp = ServiceParser()
+ section = 'D-BUS Service'
+ service_cp.add_section(section)
+ service_cp.set(section, 'Name', activity_id + '.Factory')
+ service_cp.set(section, 'Exec', activity_exec)
+
+ fileobject = open(os.path.join(dest_path, activity_id + '.service'), 'w')
+ service_cp.write(fileobject)
+ fileobject.close()
+
+def install_activities(source_path, dest_path, bin):
+ """Scan a directory for activities and install them."""
+ 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"):
+ _install_activity(activity_dir, filename, dest_path, bin)
+
+if __name__=='__main__':
+ install_activities(sys.argv[1], sys.argv[2], sys.argv[3])