Skip to content

Commit

Permalink
Port from Python 2 to six
Browse files Browse the repository at this point in the history
Signed-off-by: James Cameron <quozl@laptop.org>
  • Loading branch information
rhl-bthr authored and quozl committed Mar 13, 2019
1 parent 6345da8 commit aa8a5e7
Show file tree
Hide file tree
Showing 74 changed files with 623 additions and 700 deletions.
2 changes: 1 addition & 1 deletion Makefile.am
Expand Up @@ -26,4 +26,4 @@ check-po:
test: check-po
pyflakes $(top_srcdir)
pep8 $(top_srcdir)
python -m sugar3.test.discover $(top_srcdir)/tests
python3 -m sugar3.test.discover $(top_srcdir)/tests
2 changes: 1 addition & 1 deletion bin/Makefile.am
@@ -1 +1 @@
dist_bin_SCRIPTS = sugar-activity sugar-activity-web
dist_bin_SCRIPTS = sugar-activity sugar-activity-web sugar-activity3
218 changes: 2 additions & 216 deletions bin/sugar-activity
@@ -1,219 +1,5 @@
#!/usr/bin/env python2

# Copyright (C) 2006-2008, Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
from sugar3.activity import activityinstance

import os
import sys

# Change the default encoding to avoid UnicodeDecodeError
# http://lists.sugarlabs.org/archive/sugar-devel/2012-August/038928.html
reload(sys)
sys.setdefaultencoding('utf-8')

import gettext
from optparse import OptionParser

import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)

from sugar3.activity import activityhandle
from sugar3 import config
from sugar3.bundle.activitybundle import ActivityBundle
from sugar3 import logger

from sugar3.bundle.bundle import MalformedBundleException

from distutils.dir_util import mkpath
import time
import hashlib
import random

def create_activity_instance(constructor, handle):
activity = constructor(handle)
activity.show()
return activity


def get_single_process_name(bundle_id):
return bundle_id


def get_single_process_path(bundle_id):
return '/' + bundle_id.replace('.', '/')


class SingleProcess(dbus.service.Object):

def __init__(self, name_service, constructor):
self.constructor = constructor

bus = dbus.SessionBus()
bus_name = dbus.service.BusName(name_service, bus=bus)
object_path = get_single_process_path(name_service)
dbus.service.Object.__init__(self, bus_name, object_path)

@dbus.service.method('org.laptop.SingleProcess', in_signature='a{sv}')
def create(self, handle_dict):
handle = activityhandle.create_from_dict(handle_dict)
create_activity_instance(self.constructor, handle)


def main():
usage = 'usage: %prog [options] [activity dir] [python class]'
epilog = 'If you are running from a directory containing an Activity, ' \
'the argument may be omitted. Otherwise please provide either '\
'a directory containing a Sugar Activity [activity dir], a '\
'[python_class], or both.'

parser = OptionParser(usage=usage, epilog=epilog)
parser.add_option('-b', '--bundle-id', dest='bundle_id',
help='identifier of the activity bundle')
parser.add_option('-a', '--activity-id', dest='activity_id',
help='identifier of the activity instance')
parser.add_option('-o', '--object-id', dest='object_id',
help='identifier of the associated datastore object')
parser.add_option('-u', '--uri', dest='uri',
help='URI to load')
parser.add_option('-s', '--single-process', dest='single_process',
action='store_true',
help='start all the instances in the same process')
parser.add_option('-i', '--invited', dest='invited',
action='store_true', default=False,
help='the activity is being launched for handling an '
'invite from the network')
(options, args) = parser.parse_args()

logger.start()

activity_class = None
if len(args) == 2:
activity_class = args[1]
os.chdir(args[0])
elif len(args) == 1:
if os.path.isdir(args[0]):
os.chdir(args[0])
else:
activity_class = args[0]

os.environ['SUGAR_BUNDLE_PATH'] = os.path.abspath(os.curdir)

bundle_path = os.environ['SUGAR_BUNDLE_PATH']
sys.path.insert(0, bundle_path)

try:
bundle = ActivityBundle(bundle_path)
except MalformedBundleException:
parser.print_help()
exit(0)

if not activity_class:
if bundle.get_command().startswith('sugar-activity'):
activity_class = bundle.get_command().split(" ")[1]

if 'SUGAR_VERSION' not in os.environ:
profile_id = os.environ.get('SUGAR_PROFILE', 'default')
home_dir = os.environ.get('SUGAR_HOME', os.path.expanduser('~/.sugar'))
base = os.path.join(home_dir, profile_id)
activity_root = os.path.join(base, bundle.get_bundle_id())

instance_dir = os.path.join(activity_root, 'instance')
mkpath(instance_dir)

data_dir = os.path.join(activity_root, 'data')
mkpath(data_dir)

tmp_dir = os.path.join(activity_root, 'tmp')
mkpath(tmp_dir)

os.environ['SUGAR_ACTIVITY_ROOT'] = activity_root
os.environ['SUGAR_BUNDLE_PATH'] = bundle.get_path()

os.environ['SUGAR_BUNDLE_ID'] = bundle.get_bundle_id()
os.environ['SUGAR_BUNDLE_NAME'] = bundle.get_name()
os.environ['SUGAR_BUNDLE_VERSION'] = str(bundle.get_activity_version())

# must be done early, some activities set translations globally, SL #3654
activity_locale_path = os.environ.get("SUGAR_LOCALEDIR",
config.locale_path)

gettext.bindtextdomain(bundle.get_bundle_id(), activity_locale_path)
gettext.bindtextdomain('sugar-toolkit-gtk3', config.locale_path)
gettext.textdomain(bundle.get_bundle_id())

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)

activity_constructor = getattr(module, class_name)

if not options.activity_id:
# Generate random hash
data = '%s%s' % (time.time(), random.randint(10000, 100000))
random_hash = hashlib.sha1(data).hexdigest()
options.activity_id = random_hash
options.bundle_id = bundle.get_bundle_id()

activity_handle = activityhandle.ActivityHandle(
activity_id=options.activity_id,
object_id=options.object_id, uri=options.uri,
invited=options.invited)

if options.single_process is True:
sessionbus = dbus.SessionBus()

service_name = get_single_process_name(options.bundle_id)
service_path = get_single_process_path(options.bundle_id)

bus_object = sessionbus.get_object(
'org.freedesktop.DBus', '/org/freedesktop/DBus')
try:
name = bus_object.GetNameOwner(
service_name, dbus_interface='org.freedesktop.DBus')
except dbus.DBusException:
name = None

if not name:
SingleProcess(service_name, activity_constructor)
else:
try:
single_process = sessionbus.get_object(service_name,
service_path)
single_process.create(
activity_handle.get_dict(),
dbus_interface='org.laptop.SingleProcess')

print 'Created %s in a single process.' % service_name
sys.exit(0)
except (TypeError, dbus.DBusException):
print 'Could not communicate with the instance process,' \
'launching a new process'

if hasattr(module, 'start'):
module.start()

instance = create_activity_instance(activity_constructor, activity_handle)

if hasattr(instance, 'run_main_loop'):
instance.run_main_loop()

main()
activityinstance.main()
4 changes: 2 additions & 2 deletions bin/sugar-activity-web
Expand Up @@ -18,7 +18,7 @@
# Boston, MA 02111-1307, USA.

if [ "$SUGAR_USE_WEBKIT1" = "yes" ]; then
exec sugar-activity sugar3.activity.webkit1.WebActivity $@
exec sugar-activity3 sugar3.activity.webkit1.WebActivity $@
else
exec sugar-activity sugar3.activity.webactivity.WebActivity $@
exec sugar-activity3 sugar3.activity.webactivity.WebActivity $@
fi
5 changes: 5 additions & 0 deletions bin/sugar-activity3
@@ -0,0 +1,5 @@
#!/usr/bin/env python3

from sugar3.activity import activityinstance

activityinstance.main()
2 changes: 1 addition & 1 deletion configure.ac
Expand Up @@ -15,7 +15,7 @@ GNOME_COMPILE_WARNINGS(maximum)

AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal])

PYTHON=python2
PYTHON=python3
AM_PATH_PYTHON

PKG_CHECK_MODULES(EXT, gtk+-3.0 gdk-3.0 gdk-pixbuf-2.0 sm ice alsa
Expand Down
26 changes: 13 additions & 13 deletions doc/conf.py
Expand Up @@ -226,25 +226,25 @@
# -- Options for LaTeX output ---------------------------------------------

latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',

# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',

# Additional stuff for the LaTeX preamble.
#'preamble': '',
# Additional stuff for the LaTeX preamble.
#'preamble': '',

# Latex figure (float) alignment
#'figure_align': 'htbp',
# Latex figure (float) alignment
#'figure_align': 'htbp',
}

# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'SugarToolkitGTK3.tex', u'Sugar Toolkit GTK3 Documentation',
u'Sugar Labs', 'manual'),
(master_doc, 'SugarToolkitGTK3.tex', u'Sugar Toolkit GTK3 Documentation',
u'Sugar Labs', 'manual'),
]

# The name of an image file (relative to this directory) to place at the top of
Expand Down Expand Up @@ -287,9 +287,9 @@
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'SugarToolkitGTK3', u'Sugar Toolkit GTK3 Documentation',
author, 'SugarToolkitGTK3', 'One line description of project.',
'Miscellaneous'),
(master_doc, 'SugarToolkitGTK3', u'Sugar Toolkit GTK3 Documentation',
author, 'SugarToolkitGTK3', 'One line description of project.',
'Miscellaneous'),
]

# Documents to append as an appendix to all manuals.
Expand Down
6 changes: 3 additions & 3 deletions examples/alert.py
Expand Up @@ -21,11 +21,11 @@
# Called when an alert object throws a response event.
def __alert_response_cb(alert, response_id):
if response_id is Gtk.ResponseType.OK:
print 'Continue Button was clicked.'
print('Continue Button was clicked.')
elif response_id is Gtk.ResponseType.CANCEL:
print 'Cancel Button was clicked.'
print('Cancel Button was clicked.')
elif response_id == -1:
print 'Timeout occurred'
print('Timeout occurred')


alert.connect('response', __alert_response_cb)
Expand Down
2 changes: 1 addition & 1 deletion examples/animator.py
Expand Up @@ -23,7 +23,7 @@ def next_frame(self, current):


def __animation_completed_cb(anim):
print 'Animation completed'
print('Animation completed')


w = Gtk.Window()
Expand Down
2 changes: 1 addition & 1 deletion examples/colorbutton.py
Expand Up @@ -24,7 +24,7 @@


def color_changed_cb(button, pspec):
print button.get_color()
print(button.get_color())


color_button = ColorToolButton()
Expand Down
2 changes: 1 addition & 1 deletion examples/combobox.py
Expand Up @@ -6,7 +6,7 @@


def __combo_changed_cb(combo):
print 'Combo changed to %r' % combo.get_value()
print('Combo changed to %r' % combo.get_value())


w = Gtk.Window()
Expand Down
6 changes: 3 additions & 3 deletions examples/customdestroy.py
Expand Up @@ -13,14 +13,14 @@ def __init__(self):
Gtk.CellRenderer.__init__(self)

def __del__(self):
print "cellrenderer destroy"
print("cellrenderer destroy")

def do_render(self, cairo_t, widget, background_area, cell_area, flags):
pass


def window_destroy_cb(*kwargs):
print "window destroy"
print("window destroy")
Gtk.main_quit()


Expand All @@ -30,7 +30,7 @@ def window_destroy_cb(*kwargs):


def treeview_destroy_cb(*kwargs):
print "treeview destroy"
print("treeview destroy")


treeview = Gtk.TreeView()
Expand Down
2 changes: 1 addition & 1 deletion examples/gtktreesensitive.py
@@ -1,4 +1,4 @@
#!/usr/bin/python
#!/usr/bin/python3
from gi.repository import Gtk

import common
Expand Down
4 changes: 2 additions & 2 deletions examples/iconentry.py
Expand Up @@ -6,11 +6,11 @@


def __go_next_cb(entry, icon_pos, data=None):
print 'Go next'
print('Go next')


def __entry_activate_cb(widget, data=None):
print 'Entry activate'
print('Entry activate')


w = Gtk.Window()
Expand Down

0 comments on commit aa8a5e7

Please sign in to comment.