Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2006-06-15 15:18:33 (GMT)
committer Marco Pesenti Gritti <mpg@redhat.com>2006-06-15 15:18:33 (GMT)
commitf0af49616ca0b51336407b3bfc9ceff677178b7b (patch)
tree7f7124893f384de9b38a58365bc976f86a966191 /sugar
parentecf81ba35fbfa91c6b45cf0ef892c1c13d0e2eaf (diff)
Fixed a bunch of issues reported by pylint
Diffstat (limited to 'sugar')
-rw-r--r--sugar/browser/AddressItem.py2
-rw-r--r--sugar/browser/BrowserActivity.py19
-rw-r--r--sugar/browser/BrowserShell.py11
-rw-r--r--sugar/chat/Chat.py25
-rw-r--r--sugar/chat/GroupChat.py24
-rw-r--r--sugar/p2p/Notifier.py2
-rw-r--r--sugar/p2p/model/LocalModel.py2
-rw-r--r--sugar/presence/Buddy.py3
-rw-r--r--sugar/presence/PresenceService.py60
-rw-r--r--sugar/presence/Service.py15
-rw-r--r--sugar/session/LogWriter.py1
-rw-r--r--sugar/shell/PresenceWindow.py8
-rw-r--r--sugar/shell/activity.py2
-rwxr-xr-xsugar/shell/shell.py6
-rw-r--r--sugar/util.py1
15 files changed, 66 insertions, 115 deletions
diff --git a/sugar/browser/AddressItem.py b/sugar/browser/AddressItem.py
index eb6df4f..df5e71c 100644
--- a/sugar/browser/AddressItem.py
+++ b/sugar/browser/AddressItem.py
@@ -2,8 +2,6 @@ import pygtk
pygtk.require('2.0')
import gtk
-import sugar.env
-
class AddressEntry(gtk.HBox):
def __init__(self, callback):
gtk.HBox.__init__(self)
diff --git a/sugar/browser/BrowserActivity.py b/sugar/browser/BrowserActivity.py
index aa06dfb..b01a8a4 100644
--- a/sugar/browser/BrowserActivity.py
+++ b/sugar/browser/BrowserActivity.py
@@ -1,24 +1,25 @@
+from xml.sax import saxutils
+
import dbus
import pygtk
pygtk.require('2.0')
import gtk
import geckoembed
-import urllib
from sugar.shell import activity
from sugar.browser import NotificationBar
from sugar.browser import NavigationToolbar
-_BROWSER_ACTIVITY_TYPE = "_web_browser_olpc._udp"
-
class BrowserActivity(activity.Activity):
SOLO = 1
FOLLOWING = 2
LEADING = 3
- def __init__(self, uri):
+ def __init__(self, group, uri):
activity.Activity.__init__(self)
+
self.uri = uri
+ self._group = group
self._mode = BrowserActivity.SOLO
def _update_shared_location(self):
@@ -84,14 +85,14 @@ class BrowserActivity(activity.Activity):
self._setup_shared(self.uri)
def publish(self):
- print 'Publish %s' % self.get_id()
+ print 'Publish %s' % self.activity_get_id()
def get_embed(self):
return self.embed
def share(self):
- url = self.embed.get_address()
- self._model = self._group.get_store().create_model(url)
+ address = self.embed.get_address()
+ self._model = self._group.get_store().create_model(address)
self._model.set_value('owner', self._group.get_owner().get_nick_name())
self._update_shared_location()
self.set_mode(BrowserActivity.LEADING)
@@ -100,8 +101,8 @@ class BrowserActivity(activity.Activity):
proxy_obj = bus.get_object('com.redhat.Sugar.Chat', '/com/redhat/Sugar/Chat')
chat_shell = dbus.Interface(proxy_obj, 'com.redhat.Sugar.ChatShell')
- escaped_title = urllib.quote(self.embed.get_title())
- escaped_url = urllib.quote(url)
+ escaped_title = saxutils.escape(self.embed.get_title())
+ escaped_address = saxutils.escape(address)
chat_shell.send_text_message('<richtext><link href="' + escaped_address +
'">' + escaped_title + '</link></richtext>')
diff --git a/sugar/browser/BrowserShell.py b/sugar/browser/BrowserShell.py
index c086475..d9fda40 100644
--- a/sugar/browser/BrowserShell.py
+++ b/sugar/browser/BrowserShell.py
@@ -1,20 +1,21 @@
import dbus
import geckoembed
-import threading
-import gobject
+import pygtk
+pygtk.require('2.0')
+import gtk
import sugar.env
from sugar.browser.BrowserActivity import BrowserActivity
class BrowserShell(dbus.service.Object):
- def __init__(self, object_path = '/com/redhat/Sugar/Browser'):
+ def __init__(self, bus_name, object_path = '/com/redhat/Sugar/Browser'):
dbus.service.Object.__init__(self, bus_name, object_path)
geckoembed.set_profile_path(sugar.env.get_user_dir())
self.__browsers = []
- def start():
+ def start(self):
gtk.main()
@dbus.service.method('com.redhat.Sugar.BrowserShell')
@@ -30,6 +31,6 @@ class BrowserShell(dbus.service.Object):
@dbus.service.method('com.redhat.Sugar.BrowserShell')
def open_browser(self, uri):
- browser = BrowserActivity(uri)
+ browser = BrowserActivity(None, uri)
self.__browsers.append(browser)
browser.connect_to_shell()
diff --git a/sugar/chat/Chat.py b/sugar/chat/Chat.py
index 9b686ef..4d3eb9f 100644
--- a/sugar/chat/Chat.py
+++ b/sugar/chat/Chat.py
@@ -1,44 +1,31 @@
#!/usr/bin/env python
-import base64
import sha
import dbus
import dbus.service
import dbus.glib
-import threading
import pygtk
pygtk.require('2.0')
import gtk, gobject, pango
-from sugar.shell import activity
-from sugar.presence import Buddy
-from sugar.presence.Service import Service
-from sugar.p2p.Stream import Stream
-from sugar.p2p import network
-from sugar.session.LogWriter import LogWriter
from sugar.chat.sketchpad.Toolbox import Toolbox
from sugar.chat.sketchpad.SketchPad import SketchPad
from sugar.chat.Emoticons import Emoticons
-import sugar.env
import richtext
PANGO_SCALE = 1024 # Where is this defined?
-CHAT_SERVICE_TYPE = "_olpc_chat._tcp"
-CHAT_SERVICE_PORT = 6100
-
-GROUP_CHAT_SERVICE_TYPE = "_olpc_group_chat._udp"
-GROUP_CHAT_SERVICE_ADDRESS = "224.0.0.221"
-GROUP_CHAT_SERVICE_PORT = 6200
-
class Chat(gtk.Window):
+ SERVICE_TYPE = "_olpc_chat._tcp"
+ SERVICE_PORT = 6100
+
def __init__(self, controller):
gtk.Window.__init__(self)
- #Buddy.recognize_buddy_service_type(CHAT_SERVICE_TYPE)
+ #Buddy.recognize_buddy_service_type(Chat.SERVICE_TYPE)
self._controller = controller
self._stream_writer = None
self._emt_popup = None
@@ -144,7 +131,7 @@ class Chat(gtk.Window):
return chat_vbox, self._editor.get_buffer()
- def __get_browser_shell():
+ def __get_browser_shell(self):
bus = dbus.SessionBus()
proxy_obj = bus.get_object('com.redhat.Sugar.Browser', '/com/redhat/Sugar/Browser')
self._browser_shell = dbus.Interface(proxy_obj, 'com.redhat.Sugar.BrowserShell')
@@ -287,7 +274,7 @@ class Chat(gtk.Window):
if icon:
rise = int(icon.get_height() / 4) * -1
- chat_service = buddy.get_service(CHAT_SERVICE_TYPE)
+ chat_service = buddy.get_service(Chat.SERVICE_TYPE)
hash_string = "%s-%s" % (nick, chat_service.get_address())
sha_hash = sha.new()
sha_hash.update(hash_string)
diff --git a/sugar/chat/GroupChat.py b/sugar/chat/GroupChat.py
index e5d3a00..3eb03d4 100644
--- a/sugar/chat/GroupChat.py
+++ b/sugar/chat/GroupChat.py
@@ -1,4 +1,10 @@
from sugar.chat.Chat import Chat
+from sugar.presence.Service import Service
+from sugar.p2p.Stream import Stream
+
+GROUP_CHAT_SERVICE_TYPE = "_olpc_group_chat._udp"
+GROUP_CHAT_SERVICE_ADDRESS = "224.0.0.221"
+GROUP_CHAT_SERVICE_PORT = 6200
class GroupChat(Chat):
def __init__(self):
@@ -9,7 +15,7 @@ class GroupChat(Chat):
return self._group
def new_buddy_writer(self, buddy):
- service = buddy.get_service(CHAT_SERVICE_TYPE)
+ service = buddy.get_service(Chat.SERVICE_TYPE)
return self._buddy_stream.new_writer(service)
def _start(self):
@@ -17,15 +23,16 @@ class GroupChat(Chat):
# Group controls the Stream for incoming messages for
# specific buddy chats
- buddy_service = Service(name, CHAT_SERVICE_TYPE, CHAT_SERVICE_PORT)
+ buddy_service = Service(name, Chat.SERVICE_TYPE, Chat.SERVICE_PORT)
self._buddy_stream = Stream.new_from_service(buddy_service, self._group)
self._buddy_stream.set_data_listener(getattr(self, "_buddy_recv_message"))
buddy_service.register(self._group)
# Group chat Stream
- group_service = Service(name, GROUP_CHAT_SERVICE_TYPE,
- GROUP_CHAT_SERVICE_PORT,
- GROUP_CHAT_SERVICE_ADDRESS)
+ group_service = Service(name,
+ GROUP_CHAT_SERVICE_TYPE,
+ GROUP_CHAT_SERVICE_PORT,
+ GROUP_CHAT_SERVICE_ADDRESS)
self._group.add_service(group_service)
self._group_stream = Stream.new_from_service(group_service, self._group)
@@ -37,9 +44,10 @@ class GroupChat(Chat):
def _buddy_recv_message(self, buddy, msg):
if not self._chats.has_key(buddy):
- chat = BuddyChat(self, buddy)
- self._chats[buddy] = chat
- chat.connect_to_shell()
+# chat = BuddyChat(self, buddy)
+# self._chats[buddy] = chat
+# chat.connect_to_shell()
+ pass
else:
chat = self._chats[buddy]
chat.recv_message(buddy, msg)
diff --git a/sugar/p2p/Notifier.py b/sugar/p2p/Notifier.py
index 33222f1..54ce735 100644
--- a/sugar/p2p/Notifier.py
+++ b/sugar/p2p/Notifier.py
@@ -1,5 +1,5 @@
from sugar.p2p import network
-from sugar.p2p.Service import Service
+from sugar.presence.Service import Service
class Notifier:
TYPE = "_olpc_model_notification._udp"
diff --git a/sugar/p2p/model/LocalModel.py b/sugar/p2p/model/LocalModel.py
index 59ed870..d1489ec 100644
--- a/sugar/p2p/model/LocalModel.py
+++ b/sugar/p2p/model/LocalModel.py
@@ -1,6 +1,6 @@
import socket
-from sugar.p2p.Service import Service
+from sugar.presence.Service import Service
from sugar.p2p.Notifier import Notifier
from sugar.p2p.model.AbstractModel import AbstractModel
from sugar.p2p import network
diff --git a/sugar/presence/Buddy.py b/sugar/presence/Buddy.py
index cc6be57..9b5e358 100644
--- a/sugar/presence/Buddy.py
+++ b/sugar/presence/Buddy.py
@@ -1,5 +1,3 @@
-import pwd
-import os
import base64
import pygtk
@@ -9,7 +7,6 @@ import gtk, gobject
from sugar.p2p import Stream
from sugar.p2p import network
-
PRESENCE_SERVICE_TYPE = "_presence_olpc._tcp"
diff --git a/sugar/presence/PresenceService.py b/sugar/presence/PresenceService.py
index 8a9d0d0..fd71de8 100644
--- a/sugar/presence/PresenceService.py
+++ b/sugar/presence/PresenceService.py
@@ -111,13 +111,13 @@ class PresenceService(gobject.GObject):
self._service_advs = []
# Main activity UID to filter services on
- self._activity_uids = []
+ self._activity_uid = None
self._bus = dbus.SystemBus()
self._server = dbus.Interface(self._bus.get_object(avahi.DBUS_NAME,
avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)
- def start(self):
+ def start(self, activity_uid=None):
"""Start the presence service by kicking off service discovery."""
self._lock.acquire()
if self._started:
@@ -126,6 +126,10 @@ class PresenceService(gobject.GObject):
self._started = True
self._lock.release()
+ if activity_uid and not util.validate_activity_uid(activity_uid):
+ raise ValueError("activity uid must be a valid UID string.")
+ self._activity_uid = activity_uid
+
# Always browse .local
self._new_domain_cb(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, "local")
@@ -280,9 +284,11 @@ class PresenceService(gobject.GObject):
# If we care about the service right now, resolve it
resolve = False
- if uid in self._activity_uids:
+ if self._activity_uid and self._activity_uid == uid:
if stype in self._allowed_service_types:
resolve = True
+ elif not self._activity_uid:
+ resolve = True
if self._is_special_service_type(stype):
resolve = True
if resolve:
@@ -383,11 +389,6 @@ class PresenceService(gobject.GObject):
if stype in self._allowed_service_types:
return
- # Decompose service type if we can
- (uid, stype) = Service._decompose_service_type(stype)
- if uid and util.validate_activity_uid(uid):
- if uid not in self._activity_uids:
- self._activity_uids.append(uid)
self._allowed_service_types.append(stype)
# Find unresolved services that match the service type
@@ -403,45 +404,16 @@ class PresenceService(gobject.GObject):
raise RuntimeError("presence service must be started first.")
if not type(stype) == type(""):
raise ValueError("service type must be a string.")
-
- # Decompose service type if we can
- (uid, stype) = Service._decompose_service_type(stype)
- if uid and util.validate_activity_uid(uid):
- if uid in self._activity_uids:
- self._activity_uids.remove(uid)
- if stype in self._allowed_service_types:
+ if name in self._allowed_service_types:
self._allowed_service_types.remove(stype)
- def join_shared_activity(self, service):
+ def join_group(self, group):
"""Convenience function to join a group and notify other buddies
that you are a member of it."""
- if not isinstance(service, Service.Service):
- raise ValueError("service was not a valid service object.")
- self.register_service(service)
-
- def share_activity(self, activity, stype, properties={}, address=None, port=None):
- """Convenience function to share an activity with other buddies."""
- uid = activity.get_id()
- owner_nick = self._owner.get_nick_name()
- real_stype = "_%s_%s" % (uid, stype)
- if address and type(address) != type(""):
- raise ValueError("address must be a valid string.")
- if not address:
- # Use random currently unassigned multicast address
- address = "232.%d.%d.%d" % (random.randint(0, 254), random.randint(1, 254),
- random.randint(1, 254))
-
- if port and (type(port) != type(1) or port <= 1024 or port >= 65535):
- raise ValueError("port must be a number between 1024 and 65535")
- if not port:
- # random port #
- port = random.randint(5000, 65535)
-
- service = Service.Service(name=owner_nick, stype=real_stype, domain="local",
- address=address, port=port, properties=properties)
- # Publish it to the world
+ if not isinstance(group, Group.Group):
+ raise ValueError("group was not a valid group.")
+ gservice = group.get_service()
self.register_service(service)
- return service
def register_service(self, service):
"""Register a new service, advertising it to other Buddies on the network."""
@@ -449,7 +421,7 @@ class PresenceService(gobject.GObject):
raise RuntimeError("presence service must be started first.")
rs_name = service.get_name()
- rs_stype = service.get_network_type()
+ rs_stype = service.get_type()
rs_port = service.get_port()
if type(rs_port) != type(1) and (rs_port <= 1024 or rs_port > 65536):
raise ValueError("invalid service port.")
@@ -472,7 +444,7 @@ class PresenceService(gobject.GObject):
# should un-register it an re-register with the correct info
if str(exc) == "Local name collision":
pass
- self.track_service_type(service.get_network_type())
+ self.track_service_type(rs_stype)
return group
def get_buddy_by_nick_name(self, nick_name):
diff --git a/sugar/presence/Service.py b/sugar/presence/Service.py
index 4ad23aa..f79f17a 100644
--- a/sugar/presence/Service.py
+++ b/sugar/presence/Service.py
@@ -69,8 +69,6 @@ def is_multicast_address(address):
return False
-_ACTIVITY_UID_TAG = "ActivityUID"
-
class Service(object):
"""Encapsulates information about a specific ZeroConf/mDNS
service as advertised on the network."""
@@ -103,16 +101,7 @@ class Service(object):
self.set_port(port)
self._properties = {}
self.set_properties(properties)
-
- # Ensure that an ActivityUID tag, if given, matches
- # what we expect from the service type
- if self._properties.has_key(_ACTIVITY_UID_TAG):
- prop_uid = self._properties[_ACTIVITY_UID_TAG]
- if (prop_uid and not uid) or (prop_uid != uid):
- raise ValueError("ActivityUID property specified, but the service type's activity UID didn't match it.")
self._activity_uid = uid
- if uid and not self._properties.has_key(_ACTIVITY_UID_TAG):
- self._properties[_ACTIVITY_UID_TAG] = uid
def get_name(self):
"""Return the service's name, usually that of the
@@ -152,10 +141,6 @@ class Service(object):
"""Return the service's service type."""
return self._stype
- def get_network_type(self):
- """Return the full service type, including activity UID."""
- return self._real_stype
-
def get_port(self):
return self._port
diff --git a/sugar/session/LogWriter.py b/sugar/session/LogWriter.py
index 2571827..3db45ab 100644
--- a/sugar/session/LogWriter.py
+++ b/sugar/session/LogWriter.py
@@ -1,7 +1,6 @@
import os
import sys
import dbus
-import gobject
class LogWriter:
def __init__(self, application):
diff --git a/sugar/shell/PresenceWindow.py b/sugar/shell/PresenceWindow.py
index 0a18fcd..7523665 100644
--- a/sugar/shell/PresenceWindow.py
+++ b/sugar/shell/PresenceWindow.py
@@ -3,7 +3,6 @@ pygtk.require('2.0')
import gtk
import gobject
-from sugar.p2p.Stream import Stream
from sugar.presence.PresenceService import PresenceService
class PresenceWindow(gtk.Window):
@@ -94,9 +93,10 @@ class PresenceWindow(gtk.Window):
chat = None
buddy = self._buddy_list_model.get_value(aniter, self._MODEL_COL_BUDDY)
if buddy and not self._chats.has_key(buddy):
- chat = BuddyChat(self, buddy)
- self._chats[buddy] = chat
- chat.connect_to_shell()
+ #chat = BuddyChat(self, buddy)
+ #self._chats[buddy] = chat
+ #chat.connect_to_shell()
+ pass
def __buddy_icon_changed_cb(self, buddy):
it = self._get_iter_for_buddy(buddy)
diff --git a/sugar/shell/activity.py b/sugar/shell/activity.py
index ce0d537..0e724be 100644
--- a/sugar/shell/activity.py
+++ b/sugar/shell/activity.py
@@ -268,7 +268,7 @@ class Activity(object):
else:
self._activity_object.set_has_changes(False)
- def get_id(self):
+ def activity_get_id(self):
return self._activity_id
def shutdown(self):
diff --git a/sugar/shell/shell.py b/sugar/shell/shell.py
index 893e291..9d8d3dc 100755
--- a/sugar/shell/shell.py
+++ b/sugar/shell/shell.py
@@ -156,8 +156,9 @@ class ActivityHost(dbus.service.Object):
for c in data:
# Work around for a bug in dbus < 0.61 where integers
# are not correctly marshalled
- if c < 0: c += 256
- pixstr += chr(c)
+ if c < 0:
+ c += 256
+ pixstr += chr(c)
pixbuf = gtk.gdk.pixbuf_new_from_data(pixstr, colorspace, has_alpha, bits_per_sample, width, height, rowstride)
#print pixbuf
@@ -408,4 +409,5 @@ if __name__ == "__main__":
try:
gtk.main()
except KeyboardInterrupt:
+ print 'Ctrl+c pressed, exiting...'
pass
diff --git a/sugar/util.py b/sugar/util.py
index 6f70495..63be2ac 100644
--- a/sugar/util.py
+++ b/sugar/util.py
@@ -2,6 +2,7 @@ import time
import sha
import random
import binascii
+import string
def _stringify_sha(sha_hash):
"""Convert binary sha1 hash data into printable characters."""