Prepare for py3 port.

This commit is contained in:
Bill Dengler 2017-06-16 21:06:26 +00:00
parent 6d33f310ab
commit 4bdc2b2a6a
75 changed files with 7017 additions and 6922 deletions

View File

@ -1,14 +1,15 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import time import time
import platform import platform
if platform.system() == "Windows": if platform.system() == "Windows":
import wx import wx
from wxUI import buffers, dialogs, commonMessageDialogs, menus from wxUI import buffers, dialogs, commonMessageDialogs, menus
import user from . import user
elif platform.system() == "Linux": elif platform.system() == "Linux":
from gi.repository import Gtk from gi.repository import Gtk
from gtkUI import buffers, dialogs, commonMessageDialogs from gtkUI import buffers, dialogs, commonMessageDialogs
import messages from . import messages
import widgetUtils import widgetUtils
import arrow import arrow
import webbrowser import webbrowser
@ -269,7 +270,7 @@ class baseBufferController(bufferController):
tweetsList = [] tweetsList = []
tweet_id = tweet["id"] tweet_id = tweet["id"]
message = None message = None
if tweet.has_key("message"): if "message" in tweet:
message = tweet["message"] message = tweet["message"]
try: try:
tweet = self.session.twitter.twitter.show_status(id=tweet_id, include_ext_alt_text=True, tweet_mode="extended") tweet = self.session.twitter.twitter.show_status(id=tweet_id, include_ext_alt_text=True, tweet_mode="extended")
@ -363,7 +364,7 @@ class baseBufferController(bufferController):
if self.name[:-9] in self.session.settings["other_buffers"]["timelines"]: if self.name[:-9] in self.session.settings["other_buffers"]["timelines"]:
self.session.settings["other_buffers"]["timelines"].remove(self.name[:-9]) self.session.settings["other_buffers"]["timelines"].remove(self.name[:-9])
self.session.settings.write() self.session.settings.write()
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
return True return True
elif dlg == widgetUtils.NO: elif dlg == widgetUtils.NO:
@ -376,7 +377,7 @@ class baseBufferController(bufferController):
if dlg == widgetUtils.YES: if dlg == widgetUtils.YES:
if self.name[:-9] in self.session.settings["other_buffers"]["favourites_timelines"]: if self.name[:-9] in self.session.settings["other_buffers"]["favourites_timelines"]:
self.session.settings["other_buffers"]["favourites_timelines"].remove(self.name[:-9]) self.session.settings["other_buffers"]["favourites_timelines"].remove(self.name[:-9])
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
self.session.settings.write() self.session.settings.write()
return True return True
@ -494,7 +495,7 @@ class baseBufferController(bufferController):
self.show_menu(widgetUtils.MENU, pos=self.buffer.list.list.GetPosition()) self.show_menu(widgetUtils.MENU, pos=self.buffer.list.list.GetPosition())
def get_tweet(self): def get_tweet(self):
if self.session.db[self.name][self.buffer.list.get_selected()].has_key("retweeted_status"): if "retweeted_status" in self.session.db[self.name][self.buffer.list.get_selected()]:
tweet = self.session.db[self.name][self.buffer.list.get_selected()]["retweeted_status"] tweet = self.session.db[self.name][self.buffer.list.get_selected()]["retweeted_status"]
else: else:
tweet = self.session.db[self.name][self.buffer.list.get_selected()] tweet = self.session.db[self.name][self.buffer.list.get_selected()]
@ -509,7 +510,7 @@ class baseBufferController(bufferController):
tweet = self.get_right_tweet() tweet = self.get_right_tweet()
screen_name = tweet["user"]["screen_name"] screen_name = tweet["user"]["screen_name"]
id = tweet["id"] id = tweet["id"]
twishort_enabled = tweet.has_key("twishort") twishort_enabled = "twishort" in tweet
users = utils.get_all_mentioned(tweet, self.session.db, field="screen_name") users = utils.get_all_mentioned(tweet, self.session.db, field="screen_name")
ids = utils.get_all_mentioned(tweet, self.session.db, field="id_str") ids = utils.get_all_mentioned(tweet, self.session.db, field="id_str")
message = messages.reply(self.session, _(u"Reply"), _(u"Reply to %s") % (screen_name,), "", twishort_enabled=self.session.settings["mysc"]["twishort_enabled"], users=users, ids=ids) message = messages.reply(self.session, _(u"Reply"), _(u"Reply to %s") % (screen_name,), "", twishort_enabled=self.session.settings["mysc"]["twishort_enabled"], users=users, ids=ids)
@ -580,7 +581,7 @@ class baseBufferController(bufferController):
self._retweet_with_comment(tweet, id) self._retweet_with_comment(tweet, id)
def _retweet_with_comment(self, tweet, id, comment=''): def _retweet_with_comment(self, tweet, id, comment=''):
if tweet.has_key("full_text"): if "full_text" in tweet:
comments = tweet["full_text"] comments = tweet["full_text"]
else: else:
comments = tweet["text"] comments = tweet["text"]
@ -737,7 +738,7 @@ class listBufferController(baseBufferController):
if dlg == widgetUtils.YES: if dlg == widgetUtils.YES:
if self.name[:-5] in self.session.settings["other_buffers"]["lists"]: if self.name[:-5] in self.session.settings["other_buffers"]["lists"]:
self.session.settings["other_buffers"]["lists"].remove(self.name[:-5]) self.session.settings["other_buffers"]["lists"].remove(self.name[:-5])
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
self.session.settings.write() self.session.settings.write()
return True return True
@ -824,7 +825,7 @@ class peopleBufferController(baseBufferController):
if dlg == widgetUtils.YES: if dlg == widgetUtils.YES:
if self.name[:-10] in self.session.settings["other_buffers"]["followers_timelines"]: if self.name[:-10] in self.session.settings["other_buffers"]["followers_timelines"]:
self.session.settings["other_buffers"]["followers_timelines"].remove(self.name[:-10]) self.session.settings["other_buffers"]["followers_timelines"].remove(self.name[:-10])
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
self.session.settings.write() self.session.settings.write()
return True return True
@ -838,7 +839,7 @@ class peopleBufferController(baseBufferController):
if dlg == widgetUtils.YES: if dlg == widgetUtils.YES:
if self.name[:-8] in self.session.settings["other_buffers"]["friends_timelines"]: if self.name[:-8] in self.session.settings["other_buffers"]["friends_timelines"]:
self.session.settings["other_buffers"]["friends_timelines"].remove(self.name[:-8]) self.session.settings["other_buffers"]["friends_timelines"].remove(self.name[:-8])
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
self.session.settings.write() self.session.settings.write()
return True return True
@ -996,7 +997,7 @@ class searchBufferController(baseBufferController):
if self.name[:-11] in self.session.settings["other_buffers"]["tweet_searches"]: if self.name[:-11] in self.session.settings["other_buffers"]["tweet_searches"]:
self.session.settings["other_buffers"]["tweet_searches"].remove(self.name[:-11]) self.session.settings["other_buffers"]["tweet_searches"].remove(self.name[:-11])
self.session.settings.write() self.session.settings.write()
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
return True return True
elif dlg == widgetUtils.NO: elif dlg == widgetUtils.NO:
@ -1045,7 +1046,7 @@ class searchPeopleBufferController(peopleBufferController):
self.args = args self.args = args
self.kwargs = kwargs self.kwargs = kwargs
self.function = function self.function = function
if self.kwargs.has_key("page") == False: if ("page" in self.kwargs) == False:
self.kwargs["page"] = 1 self.kwargs["page"] = 1
def start_stream(self, mandatory=False): def start_stream(self, mandatory=False):
@ -1105,7 +1106,7 @@ class searchPeopleBufferController(peopleBufferController):
if self.name[:-11] in self.session.settings["other_buffers"]["tweet_searches"]: if self.name[:-11] in self.session.settings["other_buffers"]["tweet_searches"]:
self.session.settings["other_buffers"]["tweet_searches"].remove(self.name[:-11]) self.session.settings["other_buffers"]["tweet_searches"].remove(self.name[:-11])
self.session.settings.write() self.session.settings.write()
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
return True return True
elif dlg == widgetUtils.NO: elif dlg == widgetUtils.NO:
@ -1177,7 +1178,7 @@ class trendsBufferController(bufferController):
if self.name[:-3] in self.session.settings["other_buffers"]["trending_topic_buffers"]: if self.name[:-3] in self.session.settings["other_buffers"]["trending_topic_buffers"]:
self.session.settings["other_buffers"]["trending_topic_buffers"].remove(self.name[:-3]) self.session.settings["other_buffers"]["trending_topic_buffers"].remove(self.name[:-3])
self.session.settings.write() self.session.settings.write()
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
return True return True
elif dlg == widgetUtils.NO: elif dlg == widgetUtils.NO:
@ -1275,7 +1276,7 @@ class conversationBufferController(searchBufferController):
else: else:
dlg = widgetUtils.YES dlg = widgetUtils.YES
if dlg == widgetUtils.YES: if dlg == widgetUtils.YES:
if self.session.db.has_key(self.name): if self.name in self.session.db:
self.session.db.pop(self.name) self.session.db.pop(self.name)
return True return True
elif dlg == widgetUtils.NO: elif dlg == widgetUtils.NO:

View File

@ -1,26 +1,27 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import platform import platform
system = platform.system() system = platform.system()
import application import application
if system == "Windows": if system == "Windows":
from update import updater from update import updater
from wxUI import (view, dialogs, commonMessageDialogs, sysTrayIcon) from wxUI import (view, dialogs, commonMessageDialogs, sysTrayIcon)
import settings from . import settings
from extra import SoundsTutorial, ocr from extra import SoundsTutorial, ocr
import keystrokeEditor import keystrokeEditor
from keyboard_handler.wx_handler import WXKeyboardHandler from keyboard_handler.wx_handler import WXKeyboardHandler
import userActionsController from . import userActionsController
import trendingTopics from . import trendingTopics
import user from . import user
import listsController from . import listsController
# from issueReporter import issueReporter # from issueReporter import issueReporter
elif system == "Linux": elif system == "Linux":
from gtkUI import (view, commonMessageDialogs) from gtkUI import (view, commonMessageDialogs)
from twitter import utils, compose from twitter import utils, compose
from sessionmanager import manager, sessionManager from sessionmanager import manager, sessionManager
import buffersController from . import buffersController
import messages from . import messages
from sessionmanager import session as session_ from sessionmanager import session as session_
from pubsub import pub from pubsub import pub
import sound import sound
@ -403,7 +404,7 @@ class Controller(object):
def set_buffer_positions(self, session): def set_buffer_positions(self, session):
"Sets positions for buffers if values exist in the database." "Sets positions for buffers if values exist in the database."
for i in self.buffers: for i in self.buffers:
if i.account == session.db["user_name"] and session.db.has_key(i.name+"_pos") and hasattr(i.buffer,'list'): if i.account == session.db["user_name"] and i.name+"_pos" in session.db and hasattr(i.buffer,'list'):
i.buffer.list.select_item(session.db[str(i.name+"_pos")]) i.buffer.list.select_item(session.db[str(i.name+"_pos")])
def logout_account(self, session_id): def logout_account(self, session_id):
@ -1590,7 +1591,7 @@ class Controller(object):
output.speak(_(u"Invalid buffer")) output.speak(_(u"Invalid buffer"))
return return
tweet = buffer.get_tweet() tweet = buffer.get_tweet()
if tweet.has_key("entities") == False or tweet["entities"].has_key("media") == False: if ("entities" in tweet) == False or ("media" in tweet["entities"]) == False:
output.speak(_(u"This tweet doesn't contain images")) output.speak(_(u"This tweet doesn't contain images"))
return return
if len(tweet["entities"]["media"]) > 1: if len(tweet["entities"]["media"]) > 1:

View File

@ -1,7 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import re import re
import platform import platform
import attach from . import attach
system = platform.system() system = platform.system()
import widgetUtils import widgetUtils
import output import output
@ -204,25 +205,25 @@ class viewTweet(basicTweet):
text = "" text = ""
for i in xrange(0, len(tweetList)): for i in xrange(0, len(tweetList)):
# tweets with message keys are longer tweets, the message value is the full messaje taken from twishort. # tweets with message keys are longer tweets, the message value is the full messaje taken from twishort.
if tweetList[i].has_key("message") and tweetList[i]["is_quote_status"] == False: if "message" in tweetList[i] and tweetList[i]["is_quote_status"] == False:
value = "message" value = "message"
else: else:
value = "full_text" value = "full_text"
if tweetList[i].has_key("retweeted_status") and tweetList[i]["is_quote_status"] == False: if "retweeted_status" in tweetList[i] and tweetList[i]["is_quote_status"] == False:
if tweetList[i].has_key("message") == False: if ("message" in tweetList[i]) == False:
text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i]["retweeted_status"]["full_text"]) text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i]["retweeted_status"]["full_text"])
else: else:
text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i][value]) text = text + "rt @%s: %s\n" % (tweetList[i]["retweeted_status"]["user"]["screen_name"], tweetList[i][value])
else: else:
text = text + " @%s: %s\n" % (tweetList[i]["user"]["screen_name"], tweetList[i][value]) text = text + " @%s: %s\n" % (tweetList[i]["user"]["screen_name"], tweetList[i][value])
# tweets with extended_entities could include image descriptions. # tweets with extended_entities could include image descriptions.
if tweetList[i].has_key("extended_entities") and tweetList[i]["extended_entities"].has_key("media"): if "extended_entities" in tweetList[i] and "media" in tweetList[i]["extended_entities"]:
for z in tweetList[i]["extended_entities"]["media"]: for z in tweetList[i]["extended_entities"]["media"]:
if z.has_key("ext_alt_text") and z["ext_alt_text"] != None: if "ext_alt_text" in z and z["ext_alt_text"] != None:
image_description.append(z["ext_alt_text"]) image_description.append(z["ext_alt_text"])
if tweetList[i].has_key("retweeted_status") and tweetList[i]["retweeted_status"].has_key("extended_entities") and tweetList[i]["retweeted_status"]["extended_entities"].has_key("media"): if "retweeted_status" in tweetList[i] and "extended_entities" in tweetList[i]["retweeted_status"] and "media" in tweetList[i]["retweeted_status"]["extended_entities"]:
for z in tweetList[i]["retweeted_status"]["extended_entities"]["media"]: for z in tweetList[i]["retweeted_status"]["extended_entities"]["media"]:
if z.has_key("ext_alt_text") and z["ext_alt_text"] != None: if "ext_alt_text" in z and z["ext_alt_text"] != None:
image_description.append(z["ext_alt_text"]) image_description.append(z["ext_alt_text"])
# set rt and likes counters. # set rt and likes counters.
rt_count = str(tweet["retweet_count"]) rt_count = str(tweet["retweet_count"])
@ -230,25 +231,25 @@ class viewTweet(basicTweet):
# Gets the client from where this tweet was made. # Gets the client from where this tweet was made.
source = str(re.sub(r"(?s)<.*?>", "", tweet["source"].encode("utf-8"))) source = str(re.sub(r"(?s)<.*?>", "", tweet["source"].encode("utf-8")))
if text == "": if text == "":
if tweet.has_key("message"): if "message" in tweet:
value = "message" value = "message"
else: else:
value = "full_text" value = "full_text"
if tweet.has_key("retweeted_status"): if "retweeted_status" in tweet:
if tweet.has_key("message") == False: if ("message" in tweet) == False:
text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet["retweeted_status"]["full_text"]) text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet["retweeted_status"]["full_text"])
else: else:
text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet[value]) text = "rt @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], tweet[value])
else: else:
text = tweet[value] text = tweet[value]
text = self.clear_text(text) text = self.clear_text(text)
if tweet.has_key("extended_entities") and tweet["extended_entities"].has_key("media"): if "extended_entities" in tweet and "media" in tweet["extended_entities"]:
for z in tweet["extended_entities"]["media"]: for z in tweet["extended_entities"]["media"]:
if z.has_key("ext_alt_text") and z["ext_alt_text"] != None: if "ext_alt_text" in z and z["ext_alt_text"] != None:
image_description.append(z["ext_alt_text"]) image_description.append(z["ext_alt_text"])
if tweet.has_key("retweeted_status") and tweet["retweeted_status"].has_key("extended_entities") and tweet["retweeted_status"]["extended_entities"].has_key("media"): if "retweeted_status" in tweet and "extended_entities" in tweet["retweeted_status"] and "media" in tweet["retweeted_status"]["extended_entities"]:
for z in tweet["retweeted_status"]["extended_entities"]["media"]: for z in tweet["retweeted_status"]["extended_entities"]["media"]:
if z.has_key("ext_alt_text") and z["ext_alt_text"] != None: if "ext_alt_text" in z and z["ext_alt_text"] != None:
image_description.append(z["ext_alt_text"]) image_description.append(z["ext_alt_text"])
self.message = message.viewTweet(text, rt_count, favs_count, source.decode("utf-8")) self.message = message.viewTweet(text, rt_count, favs_count, source.decode("utf-8"))
self.message.set_title(len(text)) self.message.set_title(len(text))

View File

@ -71,7 +71,7 @@ class userActionsController(object):
def ignore_client(self, user): def ignore_client(self, user):
tweet = self.buffer.get_right_tweet() tweet = self.buffer.get_right_tweet()
if tweet.has_key("sender"): if "sender" in tweet:
output.speak(_(u"You can't ignore direct messages")) output.speak(_(u"You can't ignore direct messages"))
return return
client = re.sub(r"(?s)<.*?>", "", tweet["source"]) client = re.sub(r"(?s)<.*?>", "", tweet["source"])

View File

@ -16,10 +16,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################ ############################################################
from __future__ import absolute_import
import widgetUtils import widgetUtils
import wx_ui from . import wx_ui
import wx_transfer_dialogs from . import wx_transfer_dialogs
import transfer from . import transfer
import output import output
import tempfile import tempfile
import sound import sound

View File

@ -1,9 +1,10 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import sys import sys
import threading import threading
import time import time
import logging import logging
from utils import convert_bytes from .utils import convert_bytes
from pubsub import pub from pubsub import pub
log = logging.getLogger("extra.AudioUploader.transfer") log = logging.getLogger("extra.AudioUploader.transfer")
from requests_toolbelt.multipart.encoder import MultipartEncoder, MultipartEncoderMonitor from requests_toolbelt.multipart.encoder import MultipartEncoder, MultipartEncoderMonitor

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from utils import * from .utils import *
import widgetUtils import widgetUtils
class UploadDialog(widgetUtils.BaseDialog): class UploadDialog(widgetUtils.BaseDialog):

View File

@ -1 +1,2 @@
from soundsTutorial import soundsTutorial from __future__ import absolute_import
from .soundsTutorial import soundsTutorial

View File

@ -1,15 +1,16 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import platform import platform
import widgetUtils import widgetUtils
import os import os
import paths import paths
import logging import logging
log = logging.getLogger("extra.SoundsTutorial.soundsTutorial") log = logging.getLogger("extra.SoundsTutorial.soundsTutorial")
import soundsTutorial_constants from . import soundsTutorial_constants
if platform.system() == "Windows": if platform.system() == "Windows":
import wx_ui as UI from . import wx_ui as UI
elif platform.system() == "Linux": elif platform.system() == "Linux":
import gtk_ui as UI from . import gtk_ui as UI
class soundsTutorial(object): class soundsTutorial(object):
def __init__(self, sessionObject): def __init__(self, sessionObject):

View File

@ -1,5 +1,7 @@
#-*- coding: utf-8 -*- #-*- coding: utf-8 -*-
import reverse_sort from __future__ import absolute_import
#-*- coding: utf-8 -*-
from . import reverse_sort
import application import application
actions = reverse_sort.reverse_sort([ ("audio", _(u"Audio tweet.")), actions = reverse_sort.reverse_sort([ ("audio", _(u"Audio tweet.")),
("create_timeline", _(u"User timeline buffer created.")), ("create_timeline", _(u"User timeline buffer created.")),

View File

@ -1,4 +1,5 @@
import spellchecker from __future__ import absolute_import
from . import spellchecker
import platform import platform
if platform.system() == "Windows": if platform.system() == "Windows":
from wx_ui import * from .wx_ui import *

View File

@ -1,7 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import logging import logging
log = logging.getLogger("extra.SpellChecker.spellChecker") log = logging.getLogger("extra.SpellChecker.spellChecker")
import wx_ui from . import wx_ui
import widgetUtils import widgetUtils
import output import output
import config import config
@ -9,7 +10,7 @@ import languageHandler
from enchant.checker import SpellChecker from enchant.checker import SpellChecker
from enchant.errors import DictNotFoundError from enchant.errors import DictNotFoundError
from enchant import tokenize from enchant import tokenize
import twitterFilter from . import twitterFilter
class spellChecker(object): class spellChecker(object):
def __init__(self, text, dictionary): def __init__(self, text, dictionary):
@ -41,7 +42,7 @@ class spellChecker(object):
def check(self): def check(self):
try: try:
self.checker.next() next(self.checker)
textToSay = _(u"Misspelled word: %s") % (self.checker.word,) textToSay = _(u"Misspelled word: %s") % (self.checker.word,)
context = u"... %s %s %s" % (self.checker.leading_context(10), self.checker.word, self.checker.trailing_context(10)) context = u"... %s %s %s" % (self.checker.leading_context(10), self.checker.word, self.checker.trailing_context(10))
self.dialog.set_title(textToSay) self.dialog.set_title(textToSay)

View File

@ -1,2 +1,4 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import completion, settings from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import completion, settings

View File

@ -1,7 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import output import output
import storage from . import storage
import wx_menu from . import wx_menu
class autocompletionUsers(object): class autocompletionUsers(object):
def __init__(self, window, session_id): def __init__(self, window, session_id):

View File

@ -1,7 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import storage from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import storage
import widgetUtils import widgetUtils
import wx_manage from . import wx_manage
from wxUI import commonMessageDialogs from wxUI import commonMessageDialogs
class autocompletionManage(object): class autocompletionManage(object):

View File

@ -1,8 +1,10 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import storage from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import storage
import widgetUtils import widgetUtils
import wx_settings from . import wx_settings
import manage from . import manage
import output import output
from mysc.thread_utils import call_threaded from mysc.thread_utils import call_threaded

View File

@ -1,2 +1,4 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import OCRSpace from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import OCRSpace

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import translator from __future__ import absolute_import
from . import translator
import platform import platform
if platform.system() == "Windows": if platform.system() == "Windows":
import wx_ui as gui from . import wx_ui as gui

View File

@ -16,7 +16,26 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################ ############################################################
import translator from __future__ import absolute_import
# -*- coding: utf-8 -*-
############################################################
# Copyright (c) 2013, 2014 Manuel Eduardo Cortéz Vallejo <manuel@manuelcortez.net>
#
# 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, see <http://www.gnu.org/licenses/>.
#
############################################################
from . import translator
import wx import wx
from wxUI.dialogs import baseDialog from wxUI.dialogs import baseDialog

View File

@ -1,10 +1,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" This module contains some bugfixes for packages used in TWBlue.""" """ This module contains some bugfixes for packages used in TWBlue."""
from __future__ import absolute_import
import sys import sys
import fix_arrow # A few new locales for Three languages in arrow. from . import fix_arrow # A few new locales for Three languages in arrow.
import fix_urllib3_warnings # Avoiding some SSL warnings related to Twython. from . import fix_urllib3_warnings # Avoiding some SSL warnings related to Twython.
import fix_win32com from . import fix_win32com
import fix_requests #fix cacert.pem location for TWBlue binary copies from . import fix_requests #fix cacert.pem location for TWBlue binary copies
def setup(): def setup():
fix_arrow.fix() fix_arrow.fix()
if hasattr(sys, "frozen"): if hasattr(sys, "frozen"):

View File

@ -16,13 +16,14 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################ ############################################################
from __future__ import absolute_import
import keys import keys
import wx import wx
import wx_ui from . import wx_ui
import widgetUtils import widgetUtils
import application import application
from suds.client import Client from suds.client import Client
import constants from . import constants
class reportBug(object): class reportBug(object):
def __init__(self, user_name): def __init__(self, user_name):

View File

@ -1,3 +1,4 @@
from main import KeyboardHandler, KeyboardHandlerError from __future__ import absolute_import
from .main import KeyboardHandler, KeyboardHandlerError
#from wx_handler import WXKeyboardHandler #from wx_handler import WXKeyboardHandler
__all__ = ["KeyboardHandler", "KeyboardHandlerError", "WXKeyboardHandler", "WXPanelKeyboardHandler"] __all__ = ["KeyboardHandler", "KeyboardHandlerError", "WXKeyboardHandler", "WXPanelKeyboardHandler"]

View File

@ -1,7 +1,8 @@
from __future__ import absolute_import
import platform import platform
if platform.system() == 'Linux': if platform.system() == 'Linux':
from linux import LinuxKeyboardHandler as GlobalKeyboardHandler from .linux import LinuxKeyboardHandler as GlobalKeyboardHandler
elif platform.system() == 'Windows': elif platform.system() == 'Windows':
from wx_handler import WXKeyboardHandler as GlobalKeyboardHandler from .wx_handler import WXKeyboardHandler as GlobalKeyboardHandler
elif platform.system() == 'Darwin': elif platform.system() == 'Darwin':
from osx import OSXKeyboardHandler as GlobalKeyboardHandler from .osx import OSXKeyboardHandler as GlobalKeyboardHandler

View File

@ -1,4 +1,5 @@
from main import KeyboardHandler from __future__ import absolute_import
from .main import KeyboardHandler
import threading import threading
import thread import thread
import pyatspi import pyatspi
@ -21,7 +22,7 @@ Unknown modifiers will return ValueError."""
lst.remove(item) lst.remove(item)
#end if #end if
if len(lst) > 1: #more than one key, parse error if len(lst) > 1: #more than one key, parse error
raise ValueError, 'unknown modifier %s' % lst[0] raise ValueError('unknown modifier %s' % lst[0])
return (m, lst[0].lower()) return (m, lst[0].lower())
class AtspiThread(threading.Thread): class AtspiThread(threading.Thread):
def run(self): def run(self):

View File

@ -18,17 +18,17 @@ class KeyboardHandler(object):
def register_key (self, key, function): def register_key (self, key, function):
if key in self.active_keys: if key in self.active_keys:
raise KeyboardHandlerError, "Key %s is already registered to a function" % key raise KeyboardHandlerError("Key %s is already registered to a function" % key)
if not callable(function): if not callable(function):
raise TypeError, "Must provide a callable to be invoked upon keypress" raise TypeError("Must provide a callable to be invoked upon keypress")
self.active_keys[key] = function self.active_keys[key] = function
def unregister_key (self, key, function): def unregister_key (self, key, function):
try: try:
if self.active_keys[key] != function: if self.active_keys[key] != function:
raise KeyboardHandlerError, "key %s is not registered to that function" % key raise KeyboardHandlerError("key %s is not registered to that function" % key)
except KeyError: except KeyError:
raise KeyboardHandlerError, "Key %s not currently registered" raise KeyboardHandlerError("Key %s not currently registered")
del(self.active_keys[key]) del(self.active_keys[key])
def unregister_all_keys(self): def unregister_all_keys(self):

View File

@ -1,3 +1,4 @@
from __future__ import absolute_import
from AppKit import * from AppKit import *
from PyObjCTools import AppHelper from PyObjCTools import AppHelper
from Carbon.CarbonEvt import RegisterEventHotKey, GetApplicationEventTarget from Carbon.CarbonEvt import RegisterEventHotKey, GetApplicationEventTarget
@ -5,7 +6,7 @@ from Carbon.Events import cmdKey, controlKey
import struct import struct
from threading import Thread from threading import Thread
from main import KeyboardHandler from .main import KeyboardHandler
kEventHotKeyPressedSubtype = 6 kEventHotKeyPressedSubtype = 6
kEventHotKeyReleasedSubtype = 9 kEventHotKeyReleasedSubtype = 9
@ -35,9 +36,9 @@ class OSXKeyboardHandler(KeyboardHandler):
#replacements #replacements
#Modifier keys: #Modifier keys:
for index, item in enumerate(key[0:-1]): for index, item in enumerate(key[0:-1]):
if self.replacement_mods.has_key(item): if item in self.replacement_mods:
key[index] = self.replacement_mods[item] key[index] = self.replacement_mods[item]
if self.replacement_keys.has_key(key[-1]): if key[-1] in self.replacement_keys:
key[-1] = self.replacement_keys[key[-1]] key[-1] = self.replacement_keys[key[-1]]
elif len(key[-1])==1: elif len(key[-1])==1:
key[-1] = ord(str(key[-1]))-36 key[-1] = ord(str(key[-1]))-36

View File

@ -1,7 +1,8 @@
from __future__ import absolute_import
import win32api import win32api
import win32con import win32con
from main import KeyboardHandler from .main import KeyboardHandler
class WindowsKeyboardHandler(KeyboardHandler): class WindowsKeyboardHandler(KeyboardHandler):

View File

@ -1,7 +1,9 @@
from __future__ import print_function
from __future__ import absolute_import
import functools import functools
import wx import wx
import platform import platform
from main import KeyboardHandler from .main import KeyboardHandler
__all__ = ['WXKeyboardHandler', 'WXControlKeyboardHandler'] __all__ = ['WXKeyboardHandler', 'WXControlKeyboardHandler']
@ -42,18 +44,18 @@ class BaseWXKeyboardHandler(KeyboardHandler):
result -= 277 result -= 277
elif len(key) == 1: elif len(key) == 1:
result = ord(key.upper()) result = ord(key.upper())
print "result: ", result print("result: ", result)
return result return result
#try: #try:
if platform.system() == "Windows": if platform.system() == "Windows":
from windows import WindowsKeyboardHandler as keyboard_handler from .windows import WindowsKeyboardHandler as keyboard_handler
elif platform.system() == "Linux": elif platform.system() == "Linux":
from linux import LinuxKeyboardHandler as keyboard_handler from .linux import LinuxKeyboardHandler as keyboard_handler
elif platform.system() == "Darwin": elif platform.system() == "Darwin":
from osx import OSXKeyboardHandler as keyboard_handler from .osx import OSXKeyboardHandler as keyboard_handler
class WXKeyboardHandler(keyboard_handler): class WXKeyboardHandler(keyboard_handler):
def __init__ (self, parent, *args, **kwargs): def __init__ (self, parent, *args, **kwargs):

View File

@ -1 +1,2 @@
from keystrokeEditor import KeystrokeEditor from __future__ import absolute_import
from .keystrokeEditor import KeystrokeEditor

View File

@ -1,8 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import widgetUtils import widgetUtils
import config import config
import wx_ui from . import wx_ui
import constants from . import constants
from pubsub import pub from pubsub import pub
class KeystrokeEditor(object): class KeystrokeEditor(object):

View File

@ -32,7 +32,7 @@ class keystrokeEditorDialog(baseDialog.BaseWXDialog):
selection = self.keys.get_selected() selection = self.keys.get_selected()
self.keys.clear() self.keys.clear()
for i in keystrokes: for i in keystrokes:
if actions.has_key(i) == False: if (i in actions) == False:
continue continue
action = actions[i] action = actions[i]
self.actions.append(i) self.actions.append(i)

View File

@ -19,12 +19,12 @@
from twitter import utils from twitter import utils
def is_long(tweet): def is_long(tweet):
if tweet.has_key("is_quote_status") and tweet["is_quote_status"] == True and tweet.has_key("quoted_status"): if "is_quote_status" in tweet and tweet["is_quote_status"] == True and "quoted_status" in tweet:
return tweet["quoted_status_id"] return tweet["quoted_status_id"]
return False return False
def clear_url(tweet): def clear_url(tweet):
if tweet.has_key("full_text"): if "full_text" in tweet:
value = "full_text" value = "full_text"
else: else:
value = "text" value = "text"

View File

@ -16,6 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################ ############################################################
from __future__ import print_function
import requests import requests
import keys import keys
import logging import logging
@ -41,7 +42,7 @@ def is_long(tweet):
# see https://github.com/manuelcortez/TWBlue/issues/103 # see https://github.com/manuelcortez/TWBlue/issues/103
except TypeError: except TypeError:
pass pass
if long == False and tweet.has_key("retweeted_status"): if long == False and "retweeted_status" in tweet:
for url in range(0, len(tweet["retweeted_status"]["entities"]["urls"])): for url in range(0, len(tweet["retweeted_status"]["entities"]["urls"])):
try: try:
if tweet["retweeted_status"]["entities"]["urls"][url] != None and "twishort.com" in tweet["retweeted_status"]["entities"]["urls"][url]["expanded_url"]: if tweet["retweeted_status"]["entities"]["urls"][url] != None and "twishort.com" in tweet["retweeted_status"]["entities"]["urls"][url]["expanded_url"]:
@ -83,5 +84,5 @@ def create_tweet(user_token, user_secret, text, media=0):
try: try:
return response.json()["text_to_tweet"] return response.json()["text_to_tweet"]
except: except:
print "There was a problem creating a long tweet" print("There was a problem creating a long tweet")
return 0 return 0

View File

@ -1 +1,2 @@
import widgets from __future__ import absolute_import
from . import widgets

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" A cross platform notification system. """ A cross platform notification system.
Under Linux, the wx.NotificationMessage does not show a notification on the taskbar, so we decided to use dbus for showing notifications for linux and wx for Windows.""" Under Linux, the wx.NotificationMessage does not show a notification on the taskbar, so we decided to use dbus for showing notifications for linux and wx for Windows."""
from __future__ import absolute_import
import platform import platform
notify = None notify = None
@ -8,10 +9,10 @@ notify = None
def setup(): def setup():
global notify global notify
if platform.system() == "Windows": if platform.system() == "Windows":
import windows from . import windows
notify = windows.notification() notify = windows.notification()
elif platform.system() == "Linux": elif platform.system() == "Linux":
import linux from . import linux
notify = linux.notification() notify = linux.notification()
def send(title, text): def send(title, text):

View File

@ -1,3 +1,4 @@
from __future__ import print_function
import _winreg import _winreg
import os import os
import sys import sys
@ -31,7 +32,7 @@ def getAutoStart(app_name):
def setAutoStart(app_name, enable=True): def setAutoStart(app_name, enable=True):
"""Configures automatic startup for the application, if the enable argument is set to True. If set to False, deletes the application AutoStart value.""" """Configures automatic startup for the application, if the enable argument is set to True. If set to False, deletes the application AutoStart value."""
print paths.get_executable() print(paths.get_executable())
if getAutoStart(app_name) == enable: if getAutoStart(app_name) == enable:
return return
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, RUN_REGKEY, 0, _winreg.KEY_WRITE) key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, RUN_REGKEY, 0, _winreg.KEY_WRITE)

View File

@ -1,11 +1,12 @@
# -*- coding: cp1252 -*- # -*- coding: cp1252 -*-
#from config_utils import Configuration, ConfigurationResetException #from config_utils import Configuration, ConfigurationResetException
from __future__ import absolute_import
import config import config
import paths import paths
import os import os
import logging import logging
log = logging.getLogger("sessionmanager.manager") log = logging.getLogger("sessionmanager.manager")
import session_exceptions from . import session_exceptions
manager = None manager = None
def setup(): def setup():

View File

@ -1,10 +1,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" The main session object. Here are the twitter functions to interact with the "model" of TWBlue.""" """ The main session object. Here are the twitter functions to interact with the "model" of TWBlue."""
from __future__ import absolute_import
import urllib2 import urllib2
import config import config
import twitter import twitter
from keys import keyring from keys import keyring
import session_exceptions as Exceptions from . import session_exceptions as Exceptions
import paths import paths
import output import output
import time import time
@ -60,7 +61,7 @@ class Session(object):
num = 0 num = 0
last_id = None last_id = None
if self.db.has_key(name) == False: if (name in self.db) == False:
self.db[name] = [] self.db[name] = []
if ignore_older and len(self.db[name]) > 0: if ignore_older and len(self.db[name]) > 0:
if self.settings["general"]["reverse_timelines"] == False: if self.settings["general"]["reverse_timelines"] == False:
@ -90,7 +91,7 @@ class Session(object):
returns the number of items that have been added in this execution""" returns the number of items that have been added in this execution"""
num = 0 num = 0
if self.db.has_key(name) == False: if (name in self.db) == False:
self.db[name] = {} self.db[name] = {}
self.db[name]["items"] = [] self.db[name]["items"] = []
# if len(self.db[name]["items"]) > 0: # if len(self.db[name]["items"]) > 0:
@ -172,7 +173,7 @@ class Session(object):
results = [] results = []
data = getattr(self.twitter.twitter, update_function)(*args, **kwargs) data = getattr(self.twitter.twitter, update_function)(*args, **kwargs)
if users == True: if users == True:
if type(data) == dict and data.has_key("cursor"): if type(data) == dict and "cursor" in data:
self.db[name]["cursor"] = data["next_cursor"] self.db[name]["cursor"] = data["next_cursor"]
for i in data["users"]: results.append(i) for i in data["users"]: results.append(i)
elif type(data) == list: elif type(data) == list:
@ -288,7 +289,7 @@ class Session(object):
function str: A function to get the items.""" function str: A function to get the items."""
last_id = -1 last_id = -1
if self.db.has_key(name): if name in self.db:
try: try:
if self.db[name][0]["id"] > self.db[name][-1]["id"]: if self.db[name][0]["id"] > self.db[name][-1]["id"]:
last_id = self.db[name][0]["id"] last_id = self.db[name][0]["id"]
@ -309,7 +310,7 @@ class Session(object):
items_ = [] items_ = []
try: try:
if self.db[name].has_key("cursor") and get_previous: if "cursor" in self.db[name] and get_previous:
cursor = self.db[name]["cursor"] cursor = self.db[name]["cursor"]
else: else:
cursor = -1 cursor = -1
@ -450,7 +451,7 @@ class Session(object):
def get_quoted_tweet(self, tweet): def get_quoted_tweet(self, tweet):
quoted_tweet = tweet quoted_tweet = tweet
if tweet.has_key("full_text"): if "full_text" in tweet:
value = "full_text" value = "full_text"
else: else:
value = "text" value = "text"
@ -476,7 +477,7 @@ class Session(object):
tweet["twishort"] = True tweet["twishort"] = True
for i in tweet["entities"]["user_mentions"]: for i in tweet["entities"]["user_mentions"]:
if "@%s" % (i["screen_name"]) not in tweet["message"] and i["screen_name"] != tweet["user"]["screen_name"]: if "@%s" % (i["screen_name"]) not in tweet["message"] and i["screen_name"] != tweet["user"]["screen_name"]:
if tweet.has_key("retweeted_status") and tweet["retweeted_status"]["user"]["screen_name"] == i["screen_name"]: if "retweeted_status" in tweet and tweet["retweeted_status"]["user"]["screen_name"] == i["screen_name"]:
continue continue
tweet["message"] = u"@%s %s" % (i["screen_name"], tweet["message"]) tweet["message"] = u"@%s %s" % (i["screen_name"], tweet["message"])
return tweet return tweet

View File

@ -1,19 +1,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import shutil import shutil
import widgetUtils import widgetUtils
import platform import platform
import output import output
if platform.system() == "Windows": if platform.system() == "Windows":
import wxUI as view from . import wxUI as view
from controller import settings from controller import settings
elif platform.system() == "Linux": elif platform.system() == "Linux":
import gtkUI as view from . import gtkUI as view
import paths import paths
import time import time
import os import os
import logging import logging
import session from . import session
import manager from . import manager
import config_utils import config_utils
import config import config
@ -75,7 +76,7 @@ class sessionManagerController(object):
def do_ok(self): def do_ok(self):
log.debug("Starting sessions...") log.debug("Starting sessions...")
for i in self.sessions: for i in self.sessions:
if session.sessions.has_key(i) == True: continue if (i in session.sessions) == True: continue
s = session.Session(i) s = session.Session(i)
s.get_configuration() s.get_configuration()
if i not in config.app["sessions"]["ignored_sessions"]: if i not in config.app["sessions"]["ignored_sessions"]:

View File

@ -1 +1,2 @@
import buffers, utils, compose, twitter from __future__ import absolute_import
from . import buffers, utils, compose, twitter

View File

@ -1 +1,2 @@
import stream, indibidual from __future__ import absolute_import
from . import stream, indibidual

View File

@ -41,7 +41,7 @@ class timelinesStreamer(TwythonStreamer):
try: try:
i.users.index(data["user"]["id"]) i.users.index(data["user"]["id"])
usr = data["in_reply_to_user_id"] usr = data["in_reply_to_user_id"]
if (usr != None and usr in self.friends) or data.has_key("retweeted_status"): if (usr != None and usr in self.friends) or "retweeted_status" in data:
data = self.session.check_quoted_status(data) data = self.session.check_quoted_status(data)
data = self.session.check_long_tweet(data) data = self.session.check_long_tweet(data)
if self.session.settings["general"]["reverse_timelines"] == False: self.session.db["%s" % (i.name,)].append(data) if self.session.settings["general"]["reverse_timelines"] == False: self.session.db["%s" % (i.name,)].append(data)
@ -62,7 +62,7 @@ class timelinesStreamer(TwythonStreamer):
def on_success(self, data): def on_success(self, data):
# try: # try:
if "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True: if "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True:
if data.has_key("extended_tweet"): if "extended_tweet" in data:
data["full_text"] = data["extended_tweet"]["full_text"] data["full_text"] = data["extended_tweet"]["full_text"]
# data["entities"] = data["extended_tweet"]["entities"] # data["entities"] = data["extended_tweet"]["entities"]
# log.error(data["extended_entities"]) # log.error(data["extended_entities"])

View File

@ -26,7 +26,7 @@ class streamer(TwythonStreamer):
return self.session.db["user_name"] return self.session.db["user_name"]
def put_data(self, place, data): def put_data(self, place, data):
if self.session.db.has_key(place): if place in self.session.db:
if utils.find_item(data["id"], self.session.db[place]) != None: if utils.find_item(data["id"], self.session.db[place]) != None:
log.error("duplicated tweet. Ignoring it...") log.error("duplicated tweet. Ignoring it...")
return False return False
@ -129,7 +129,7 @@ class streamer(TwythonStreamer):
self.friends = data["friends"] self.friends = data["friends"]
pub.sendMessage("friends-receibed") pub.sendMessage("friends-receibed")
elif "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True: elif "text" in data and utils.is_allowed(data, self.session.settings["twitter"]["ignored_clients"]) == True:
if data.has_key("extended_tweet"): if "extended_tweet" in data:
data["full_text"] = data["extended_tweet"]["full_text"] data["full_text"] = data["extended_tweet"]["full_text"]
data["entities"] = data["extended_tweet"]["entities"] data["entities"] = data["extended_tweet"]["entities"]
# log.error(data["extended_tweet"]) # log.error(data["extended_tweet"])
@ -141,7 +141,7 @@ class streamer(TwythonStreamer):
d = self.put_data("home_timeline", data) d = self.put_data("home_timeline", data)
if d != False: if d != False:
pub.sendMessage("item-in-home", data=data, user=self.get_user()) pub.sendMessage("item-in-home", data=data, user=self.get_user())
elif data.has_key("event"): elif "event" in data:
if "favorite" == data["event"] and "favorites" in self.session.settings["general"]["buffer_order"]: if "favorite" == data["event"] and "favorites" in self.session.settings["general"]["buffer_order"]:
self.check_favs(data) self.check_favs(data)
elif "unfavorite" == data["event"] and "favorites" in self.session.settings["general"]["buffer_order"]: elif "unfavorite" == data["event"] and "favorites" in self.session.settings["general"]["buffer_order"]:

View File

@ -1,7 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import platform import platform
system = platform.system() system = platform.system()
import utils from . import utils
import re import re
import htmlentitydefs import htmlentitydefs
import time import time
@ -38,9 +39,9 @@ def compose_tweet(tweet, db, relative_times, show_screen_names=False):
ts = original_date.replace(seconds=db["utc_offset"]).format(_(u"dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage()) ts = original_date.replace(seconds=db["utc_offset"]).format(_(u"dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage())
else: else:
ts = tweet["created_at"] ts = tweet["created_at"]
if tweet.has_key("message"): if "message" in tweet:
value = "message" value = "message"
elif tweet.has_key("full_text"): elif "full_text" in tweet:
value = "full_text" value = "full_text"
else: else:
value = "text" value = "text"
@ -51,15 +52,15 @@ def compose_tweet(tweet, db, relative_times, show_screen_names=False):
else: else:
user = tweet["user"]["name"] user = tweet["user"]["name"]
source = re.sub(r"(?s)<.*?>", "", tweet["source"]) source = re.sub(r"(?s)<.*?>", "", tweet["source"])
if tweet.has_key("retweeted_status"): if "retweeted_status" in tweet:
if tweet.has_key("message") == False and tweet["retweeted_status"]["is_quote_status"] == False: if ("message" in tweet) == False and tweet["retweeted_status"]["is_quote_status"] == False:
text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(tweet["retweeted_status"][value])) text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(tweet["retweeted_status"][value]))
elif tweet["retweeted_status"]["is_quote_status"]: elif tweet["retweeted_status"]["is_quote_status"]:
text = "%s" % (StripChars(tweet[value])) text = "%s" % (StripChars(tweet[value]))
else: else:
text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(tweet[value])) text = "RT @%s: %s" % (tweet["retweeted_status"]["user"]["screen_name"], StripChars(tweet[value]))
# if text[-1] in chars: text=text+"." # if text[-1] in chars: text=text+"."
if tweet.has_key("message") == False: if ("message" in tweet) == False:
urls = utils.find_urls_in_text(text) urls = utils.find_urls_in_text(text)
for url in range(0, len(urls)): for url in range(0, len(urls)):
try: try:
@ -100,7 +101,7 @@ def compose_dm(tweet, db, relative_times, show_screen_names=False):
def compose_quoted_tweet(quoted_tweet, original_tweet, show_screen_names=False): def compose_quoted_tweet(quoted_tweet, original_tweet, show_screen_names=False):
""" It receives a tweet and returns a list with the user, text for the tweet or message, date and the client where user is.""" """ It receives a tweet and returns a list with the user, text for the tweet or message, date and the client where user is."""
if quoted_tweet.has_key("full_text"): if "full_text" in quoted_tweet:
value = "full_text" value = "full_text"
else: else:
value = "text" value = "text"
@ -114,9 +115,9 @@ def compose_quoted_tweet(quoted_tweet, original_tweet, show_screen_names=False):
except KeyError: text = "%s" % (StripChars(quoted_tweet[value])) except KeyError: text = "%s" % (StripChars(quoted_tweet[value]))
if text[-1] in chars: text=text+"." if text[-1] in chars: text=text+"."
original_user = original_tweet["user"]["screen_name"] original_user = original_tweet["user"]["screen_name"]
if original_tweet.has_key("message"): if "message" in original_tweet:
original_text = StripChars(original_tweet["message"]) original_text = StripChars(original_tweet["message"])
elif original_tweet.has_key("full_text"): elif "full_text" in original_tweet:
original_text = StripChars(original_tweet["full_text"]) original_text = StripChars(original_tweet["full_text"])
else: else:
original_text = StripChars(original_tweet["text"]) original_text = StripChars(original_tweet["text"])
@ -133,7 +134,7 @@ def compose_followers_list(tweet, db, relative_times=True, show_screen_names=Fal
ts = original_date.replace(seconds=db["utc_offset"]).format(_(u"dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage()) ts = original_date.replace(seconds=db["utc_offset"]).format(_(u"dddd, MMMM D, YYYY H:m:s"), locale=languageHandler.getLanguage())
else: else:
ts = tweet["created_at"] ts = tweet["created_at"]
if tweet.has_key("status"): if "status" in tweet:
if len(tweet["status"]) > 4 and system == "Windows": if len(tweet["status"]) > 4 and system == "Windows":
original_date2 = arrow.get(tweet["status"]["created_at"], "ddd MMM D H:m:s Z YYYY", locale="en") original_date2 = arrow.get(tweet["status"]["created_at"], "ddd MMM D H:m:s Z YYYY", locale="en")
if relative_times: if relative_times:

View File

@ -1,11 +1,12 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import config import config
import random import random
import BaseHTTPServer import BaseHTTPServer
import webbrowser import webbrowser
from twython import Twython, TwythonError from twython import Twython, TwythonError
from keys import keyring from keys import keyring
import authorisationHandler from . import authorisationHandler
from requests import certs from requests import certs
import logging import logging
log = logging.getLogger("sessionTwitter") log = logging.getLogger("sessionTwitter")

View File

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import print_function
import url_shortener, re import url_shortener, re
import output import output
from twython import TwythonError from twython import TwythonError
@ -23,9 +24,9 @@ def find_urls_in_text(text):
def find_urls (tweet): def find_urls (tweet):
urls = [] urls = []
if tweet.has_key("message"): if "message" in tweet:
i = "message" i = "message"
elif tweet.has_key("full_text"): elif "full_text" in tweet:
i = "full_text" i = "full_text"
else: else:
i = "text" i = "text"
@ -59,18 +60,18 @@ def is_audio(tweet):
if i["text"] == "audio": if i["text"] == "audio":
return True return True
except: except:
print tweet["entities"]["hashtags"] print(tweet["entities"]["hashtags"])
log.exception("Exception while executing is_audio hashtag algorithm") log.exception("Exception while executing is_audio hashtag algorithm")
def is_geocoded(tweet): def is_geocoded(tweet):
if tweet.has_key("coordinates") and tweet["coordinates"] != None: if "coordinates" in tweet and tweet["coordinates"] != None:
return True return True
def is_media(tweet): def is_media(tweet):
if tweet["entities"].has_key("media") == False: if ("media" in tweet["entities"]) == False:
return False return False
for i in tweet["entities"]["media"]: for i in tweet["entities"]["media"]:
if i.has_key("type") and i["type"] == "photo": if "type" in i and i["type"] == "photo":
return True return True
return False return False
@ -85,10 +86,10 @@ def get_all_mentioned(tweet, conf, field="screen_name"):
def get_all_users(tweet, conf): def get_all_users(tweet, conf):
string = [] string = []
if tweet.has_key("retweeted_status"): if "retweeted_status" in tweet:
string.append(tweet["user"]["screen_name"]) string.append(tweet["user"]["screen_name"])
tweet = tweet["retweeted_status"] tweet = tweet["retweeted_status"]
if tweet.has_key("sender"): if "sender" in tweet:
string.append(tweet["sender"]["screen_name"]) string.append(tweet["sender"]["screen_name"])
else: else:
if tweet["user"]["screen_name"] != conf["user_name"]: if tweet["user"]["screen_name"] != conf["user_name"]:
@ -124,9 +125,9 @@ def api_call(parent=None, call_name=None, preexec_message="", success="", succes
return val return val
def is_allowed(tweet, clients): def is_allowed(tweet, clients):
if tweet.has_key("sender"): return True if "sender" in tweet: return True
allowed = True allowed = True
if tweet.has_key("retweeted_status"): tweet = tweet["retweeted_status"] if "retweeted_status" in tweet: tweet = tweet["retweeted_status"]
source = re.sub(r"(?s)<.*?>", "", tweet["source"]) source = re.sub(r"(?s)<.*?>", "", tweet["source"])
for i in clients: for i in clients:
if i.lower() == source.lower(): if i.lower() == source.lower():

View File

@ -1,11 +1,12 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import application import application
import update from . import update
import platform import platform
import logging import logging
import output import output
from requests.exceptions import ConnectionError from requests.exceptions import ConnectionError
from wxUpdater import * from .wxUpdater import *
logger = logging.getLogger("updater") logger = logging.getLogger("updater")
def do_update(endpoint=application.update_url): def do_update(endpoint=application.update_url):

View File

@ -1,7 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
import application import application
import utils from . import utils
progress_dialog = None progress_dialog = None

View File

@ -1,2 +1,3 @@
import shorteners from __future__ import absolute_import
from __main__ import * from . import shorteners
from .__main__ import *

View File

@ -1,5 +1,6 @@
from __future__ import absolute_import
from functools import wraps from functools import wraps
import shorteners from . import shorteners
def service_selecter (func): def service_selecter (func):

View File

@ -1,9 +1,10 @@
from url_shortener import URLShortener from __future__ import absolute_import
from hkcim import HKCShortener from .url_shortener import URLShortener
from isgd import IsgdShortener from .hkcim import HKCShortener
from onjme import OnjmeShortener from .isgd import IsgdShortener
from tinyarrows import TinyArrowsShortener from .onjme import OnjmeShortener
from tinyurl import TinyurlShortener from .tinyarrows import TinyArrowsShortener
from xedcc import XedccShortener from .tinyurl import TinyurlShortener
from clckru import ClckruShortener from .xedcc import XedccShortener
from .clckru import ClckruShortener
__all__ = ["HKCShortener", "IsgdShortener", "OnjmeShortener", "TinyArrowsShortener", "TinyurlShortener", "XedccShortener", "ClckruShortener"] __all__ = ["HKCShortener", "IsgdShortener", "OnjmeShortener", "TinyArrowsShortener", "TinyurlShortener", "XedccShortener", "ClckruShortener"]

View File

@ -1,6 +1,7 @@
from __future__ import absolute_import
import urllib import urllib
from url_shortener import URLShortener from .url_shortener import URLShortener
class ClckruShortener (URLShortener): class ClckruShortener (URLShortener):

View File

@ -1,6 +1,7 @@
from __future__ import absolute_import
import urllib import urllib
from url_shortener import URLShortener from .url_shortener import URLShortener
class HKCShortener (URLShortener): class HKCShortener (URLShortener):
def __init__ (self, *args, **kwargs): def __init__ (self, *args, **kwargs):

View File

@ -1,6 +1,7 @@
from __future__ import absolute_import
import urllib import urllib
from url_shortener import URLShortener from .url_shortener import URLShortener
class IsgdShortener (URLShortener): class IsgdShortener (URLShortener):

View File

@ -1,6 +1,7 @@
from __future__ import absolute_import
import urllib import urllib
from url_shortener import URLShortener from .url_shortener import URLShortener
class OnjmeShortener (URLShortener): class OnjmeShortener (URLShortener):
def __init__ (self, *args, **kwargs): def __init__ (self, *args, **kwargs):

View File

@ -1,6 +1,7 @@
from __future__ import absolute_import
import urllib import urllib
from url_shortener import URLShortener from .url_shortener import URLShortener
class TinyArrowsShortener (URLShortener): class TinyArrowsShortener (URLShortener):
def __init__ (self, *args, **kwargs): def __init__ (self, *args, **kwargs):

View File

@ -1,4 +1,5 @@
from url_shortener import URLShortener from __future__ import absolute_import
from .url_shortener import URLShortener
import urllib import urllib
class TinyurlShortener (URLShortener): class TinyurlShortener (URLShortener):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):

View File

@ -24,7 +24,7 @@ class URLShortener (object):
def unshorten(self, url): def unshorten(self, url):
working = urlparse(url) working = urlparse(url)
if not working.netloc: if not working.netloc:
raise TypeError, "Unable to parse URL." raise TypeError("Unable to parse URL.")
con = HTTPConnection(working.netloc) con = HTTPConnection(working.netloc)
con.connect() con.connect()
con.request('GET', working.path) con.request('GET', working.path)

View File

@ -1,6 +1,7 @@
from __future__ import absolute_import
import urllib import urllib
from url_shortener import URLShortener from .url_shortener import URLShortener
class XedccShortener (URLShortener): class XedccShortener (URLShortener):
def __init__ (self, *args, **kwargs): def __init__ (self, *args, **kwargs):

View File

@ -1,5 +1,6 @@
from __future__ import absolute_import
import platform import platform
if platform.system() == "Windows": if platform.system() == "Windows":
from wxUtils import * from .wxUtils import *
#elif platform.system() == "Linux": #elif platform.system() == "Linux":
# from gtkUtils import * # from gtkUtils import *

View File

@ -1,11 +1,12 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from base import basePanel from __future__ import absolute_import
from dm import dmPanel from .base import basePanel
from events import eventsPanel from .dm import dmPanel
from favourites import favsPanel from .events import eventsPanel
from lists import listPanel from .favourites import favsPanel
from panels import accountPanel, emptyPanel from .lists import listPanel
from people import peoplePanel from .panels import accountPanel, emptyPanel
from trends import trendsPanel from .people import peoplePanel
from tweet_searches import searchPanel from .trends import trendsPanel
from user_searches import searchUsersPanel from .tweet_searches import searchPanel
from .user_searches import searchUsersPanel

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from base import basePanel from .base import basePanel
class dmPanel(basePanel): class dmPanel(basePanel):
def __init__(self, parent, name): def __init__(self, parent, name):

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from base import basePanel from .base import basePanel
class favsPanel(basePanel): class favsPanel(basePanel):
def __init__(self, parent, name): def __init__(self, parent, name):

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from base import basePanel from .base import basePanel
class listPanel(basePanel): class listPanel(basePanel):
def __init__(self, parent, name): def __init__(self, parent, name):

View File

@ -1,7 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from multiplatform_widgets import widgets from multiplatform_widgets import widgets
from base import basePanel from .base import basePanel
class peoplePanel(basePanel): class peoplePanel(basePanel):
""" Buffer used to show people.""" """ Buffer used to show people."""

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from base import basePanel from .base import basePanel
class searchPanel(basePanel): class searchPanel(basePanel):
def __init__(self, parent, name): def __init__(self, parent, name):

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
from tweet_searches import searchPanel from .tweet_searches import searchPanel
from multiplatform_widgets import widgets from multiplatform_widgets import widgets
class searchUsersPanel(searchPanel): class searchUsersPanel(searchPanel):

View File

@ -1 +1,2 @@
import baseDialog, trends, configuration, lists, message, search, find, show_user, update_profile, urlList, userSelection, utils from __future__ import absolute_import
from . import baseDialog, trends, configuration, lists, message, search, find, show_user, update_profile, urlList, userSelection, utils

View File

@ -1,5 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import baseDialog from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import baseDialog
import wx import wx
import logging as original_logger import logging as original_logger
import application import application

View File

@ -1,5 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import baseDialog from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import baseDialog
import wx import wx
class findDialog(baseDialog.BaseWXDialog): class findDialog(baseDialog.BaseWXDialog):

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import widgetUtils import widgetUtils
import baseDialog from . import baseDialog
import wx import wx
from extra import translator from extra import translator

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
import baseDialog from . import baseDialog
class showUserProfile(baseDialog.BaseWXDialog): class showUserProfile(baseDialog.BaseWXDialog):
def __init__(self): def __init__(self):

View File

@ -1,5 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import baseDialog from __future__ import absolute_import
# -*- coding: utf-8 -*-
from . import baseDialog
import wx import wx
class trendingTopicsDialog(baseDialog.BaseWXDialog): class trendingTopicsDialog(baseDialog.BaseWXDialog):

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import
import wx import wx
import baseDialog from . import baseDialog
class updateProfileDialog(baseDialog.BaseWXDialog): class updateProfileDialog(baseDialog.BaseWXDialog):
def __init__(self): def __init__(self):

View File

@ -16,8 +16,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################ ############################################################
from __future__ import absolute_import
import wx import wx
import baseDialog from . import baseDialog
class selectUserDialog(baseDialog.BaseWXDialog): class selectUserDialog(baseDialog.BaseWXDialog):
def __init__(self, title, users): def __init__(self, title, users):