aboutsummaryrefslogblamecommitdiff
path: root/patches/terminal_velocity_python3_support.patch
blob: bd4aec7b194284ffef3569f396f9bee71c45f958 (plain) (tree)






















































































































































































































                                                                                                
commit 6ca19964b9e8a7866fd7e21a3dac9ccd35f0d434
Author: Ismaël Bouya <ismael.bouya@normalesup.org>
Date:   Sat Mar 9 20:13:18 2019 +0100

    Add python3 support

diff --git a/terminal_velocity/notebook.py b/terminal_velocity/notebook.py
index b6226dc..11f76de 100644
--- a/terminal_velocity/notebook.py
+++ b/terminal_velocity/notebook.py
@@ -60,51 +60,6 @@ import sys
 import chardet
 
 
-def unicode_or_bust(raw_text):
-    """Return the given raw text data decoded to unicode.
-
-    If the text cannot be decoded, return None.
-
-    """
-    encodings = ["utf-8"]
-    for encoding in (sys.getfilesystemencoding(), sys.getdefaultencoding()):
-        # I would use a set for this, but they don't maintain order.
-        if encoding not in encodings:
-            encodings.append(encoding)
-
-    for encoding in encodings:
-        if encoding:  # getfilesystemencoding() may return None
-            try:
-                decoded = unicode(raw_text, encoding=encoding)
-                return decoded
-            except UnicodeDecodeError:
-                pass
-
-    # If none of those guesses worked, let chardet have a go.
-    encoding = chardet.detect(raw_text)["encoding"]
-    if encoding and encoding not in encodings:
-        try:
-            decoded = unicode(raw_text, encoding=encoding)
-            logger.debug("File decoded with chardet, encoding was {0}".format(
-                encoding))
-            return decoded
-        except UnicodeDecodeError:
-            pass
-        except LookupError:
-            pass
-
-    # I've heard that decoding with cp1252 never fails, so try that last.
-    try:
-        decoded = unicode(raw_text, encoding="cp1252")
-        logger.debug("File decoded with encoding cp1252")
-        return decoded
-    except UnicodeDecodeError:
-        pass
-
-    # If nothing worked then give up.
-    return None
-
-
 class Error(Exception):
     """Base class for exceptions in this module."""
     pass
@@ -192,12 +147,12 @@ class PlainTextNote(object):
         # subdirs) if they don't exist.
         directory = os.path.split(self.abspath)[0]
         if not os.path.isdir(directory):
-            logger.debug(u"'{0} doesn't exist, creating it".format(directory))
+            logger.debug("'{0} doesn't exist, creating it".format(directory))
             try:
                 os.makedirs(directory)
             except os.error as e:
                 raise NewNoteError(
-                        u"{0} could not be created: {1}".format(directory, e))
+                        "{0} could not be created: {1}".format(directory, e))
 
         # Create an empty file if the file doesn't exist.
         open(self.abspath, 'a')
@@ -217,11 +172,11 @@ class PlainTextNote(object):
 
     @property
     def contents(self):
-        contents = unicode_or_bust(open(self.abspath, "r").read())
+        contents = open(self.abspath, "rb").read().decode(errors='ignore')
         if contents is None:
             logger.error(
-                u"Could not decode file contents: {0}".format(self.abspath))
-            return u""
+                "Could not decode file contents: {0}".format(self.abspath))
+            return ""
         else:
             return contents
 
@@ -322,12 +277,12 @@ class PlainTextNoteBook(object):
 
         # Create notebook_dir if it doesn't exist.
         if not os.path.isdir(self.path):
-            logger.debug(u"'{0} doesn't exist, creating it".format(self.path))
+            logger.debug("'{0} doesn't exist, creating it".format(self.path))
             try:
                 os.makedirs(self.path)
             except os.error as e:
                 raise NewNoteBookError(
-                        u"{0} could not be created: {1}".format(self.path, e))
+                        "{0} could not be created: {1}".format(self.path, e))
         else:
             # TODO: Check that self.path is a directory, if not raise.
             pass
@@ -358,13 +313,12 @@ class PlainTextNoteBook(object):
                 abspath = os.path.join(root, filename)
                 relpath = os.path.relpath(abspath, self.path)
                 relpath, ext = os.path.splitext(relpath)
-                unicode_relpath = unicode_or_bust(relpath)
                 if relpath is None:
                     # The filename could not be decoded.
                     logger.error(
                             "Could not decode filename: {0}".format(relpath))
                 else:
-                    self.add_new(title=unicode_relpath, extension=ext)
+                    self.add_new(title=relpath, extension=ext)
 
     @property
     def path(self):
@@ -418,7 +372,7 @@ class PlainTextNoteBook(object):
         for note in self._notes:
             if note.title == title and note.extension == extension:
                 raise NoteAlreadyExistsError(
-                        u"Note already in NoteBook: {0}".format(note.title))
+                        "Note already in NoteBook: {0}".format(note.title))
 
         # Ok, add the note.
         note = PlainTextNote(title, self, extension)
diff --git a/terminal_velocity/terminal_velocity.py b/terminal_velocity/terminal_velocity.py
index 5f0e213..9234bea 100755
--- a/terminal_velocity/terminal_velocity.py
+++ b/terminal_velocity/terminal_velocity.py
@@ -1,7 +1,7 @@
-#!/usr/bin/env python2
+#!/usr/bin/env python3
 """A fast note-taking app for the UNIX terminal"""
 from __future__ import print_function
-import ConfigParser
+import configparser
 import argparse
 import os
 import logging
@@ -9,9 +9,9 @@ import logging.handlers
 import sys
 
 #import terminal_velocity.urwid_ui as urwid_ui
-import urwid_ui
+from . import urwid_ui
 
-from git import get_git_project_config, git_project_is_configured, fetch_changes, push_changes
+from .git import get_git_project_config, git_project_is_configured, fetch_changes, push_changes
 
 
 def startup():
@@ -37,7 +37,7 @@ def main():
 
     # Parse the config file.
     config_file = os.path.abspath(os.path.expanduser(args.config))
-    config = ConfigParser.SafeConfigParser()
+    config = configparser.ConfigParser()
     config.read(config_file)
     defaults = dict(config.items('DEFAULT'))
 
diff --git a/terminal_velocity/urwid_ui.py b/terminal_velocity/urwid_ui.py
index caebcb9..89bab35 100644
--- a/terminal_velocity/urwid_ui.py
+++ b/terminal_velocity/urwid_ui.py
@@ -10,7 +10,7 @@ import logging
 logger = logging.getLogger(__name__)
 
 import urwid
-import notebook
+from . import notebook
 
 
 palette = [
@@ -27,8 +27,6 @@ def system(cmd, loop):
 
     loop.screen.stop()
 
-    cmd = u"{0}".format(cmd)
-    cmd = cmd.encode("utf-8")  # FIXME: Correct encoding?
     safe_cmd = shlex.split(cmd)
 
     logger.debug("System command: {0}".format(safe_cmd))
@@ -114,7 +112,7 @@ class AutocompleteWidget(urwid.Edit):
 
         # When search bar is empty show placeholder text.
         if not self.edit_text and not self.autocomplete_text:
-            placeholder_text = u"Find or Create"
+            placeholder_text = "Find or Create"
             return (placeholder_text,
                     [("placeholder", len(placeholder_text))])
 
@@ -186,7 +184,7 @@ class NoteFilterListBox(urwid.ListBox):
 
     def render(self, size, focus=False):
         if len(self.list_walker) == 0:
-            placeholder = placeholder_text(u"No matching notes, press Enter "
+            placeholder = placeholder_text("No matching notes, press Enter "
                 "to create a new note")
             return placeholder.render(size)
         return super(NoteFilterListBox, self).render(size, self.fake_focus)
@@ -399,7 +397,7 @@ class MainFrame(urwid.Frame):
         # If the user has no notes yet show some placeholder text, otherwise
         # show the note list.
         if len(self.notebook) == 0:
-            self.body = placeholder_text(u"You have no notes yet, to create "
+            self.body = placeholder_text("You have no notes yet, to create "
                 "a note type a note title then press Enter")
         else:
             self.body = urwid.Padding(self.list_box, left=1, right=1)