From f0af49616ca0b51336407b3bfc9ceff677178b7b Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Thu, 15 Jun 2006 15:18:33 +0000 Subject: Fixed a bunch of issues reported by pylint --- (limited to 'sugar') 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('' + escaped_title + '') 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.""" -- cgit v0.9.1