From d35502423a20f37c626471602351ea58de04ce3a Mon Sep 17 00:00:00 2001 From: Manuel Ebert Date: Thu, 23 Jan 2014 14:33:14 +0100 Subject: [PATCH 1/2] Cleaned up imports to work with Python2.6 and Python 3.3 --- CHANGELOG.md | 1 + jrnl/Journal.py | 7 +++---- jrnl/__init__.py | 3 ++- jrnl/cli.py | 17 ++++++----------- jrnl/exporters.py | 8 +++----- jrnl/install.py | 7 +++---- jrnl/util.py | 3 +-- 7 files changed, 19 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b70f3659..43c02af8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ Changelog ### 1.7 (December 22, 2013) +* __1.7.7__ Cleaned up imporrts * __1.7.6__ Python 3 port for slugify * __1.7.5__ Colorama is only needed on windows. Smaller fixes * __1.7.3__ Touches temporary files before opening them to allow more external editors. diff --git a/jrnl/Journal.py b/jrnl/Journal.py index 0fa9eada..aa34139f 100644 --- a/jrnl/Journal.py +++ b/jrnl/Journal.py @@ -1,10 +1,9 @@ #!/usr/bin/env python # encoding: utf-8 -try: from . import Entry -except (SystemError, ValueError): import Entry -try: from . import util -except (SystemError, ValueError): import util +from __future__ import absolute_import +from . import Entry +from . import util import codecs import os try: import parsedatetime.parsedatetime_consts as pdt diff --git a/jrnl/__init__.py b/jrnl/__init__.py index 1e54f31b..12d92e04 100644 --- a/jrnl/__init__.py +++ b/jrnl/__init__.py @@ -5,9 +5,10 @@ """ jrnl is a simple journal application for your command line. """ +from __future__ import absolute_import __title__ = 'jrnl' -__version__ = '1.7.6' +__version__ = '1.7.7' __author__ = 'Manuel Ebert' __license__ = 'MIT License' __copyright__ = 'Copyright 2013 - 2014 Manuel Ebert' diff --git a/jrnl/cli.py b/jrnl/cli.py index 20e39f9a..d6156822 100644 --- a/jrnl/cli.py +++ b/jrnl/cli.py @@ -7,17 +7,12 @@ license: MIT, see LICENSE for more details. """ -try: - from . import Journal - from . import util - from . import exporters - from . import install - from . import __version__ -except (SystemError, ValueError): - import Journal - import util - import exporters - import install +from __future__ import absolute_import +from . import Journal +from . import util +from . import exporters +from . import install +from . import __version__ import jrnl import os import argparse diff --git a/jrnl/exporters.py b/jrnl/exporters.py index 4362dfae..b8463e03 100644 --- a/jrnl/exporters.py +++ b/jrnl/exporters.py @@ -1,12 +1,10 @@ #!/usr/bin/env python # encoding: utf-8 +from __future__ import absolute_import import os -import string -try: import simplejson as json -except ImportError: import json -try: from .util import u, slugify -except (SystemError, ValueError): from util import u, slugify +import json +from .util import u, slugify def get_tags_count(journal): diff --git a/jrnl/install.py b/jrnl/install.py index 3240a206..fa78ca0c 100644 --- a/jrnl/install.py +++ b/jrnl/install.py @@ -1,14 +1,13 @@ #!/usr/bin/env python # encoding: utf-8 +from __future__ import absolute_import import readline import glob import getpass -try: import simplejson as json -except ImportError: import json +import json import os -try: from . import util -except (SystemError, ValueError): import util +from . import util def module_exists(module_name): diff --git a/jrnl/util.py b/jrnl/util.py index ae45cbb9..72d00ca3 100644 --- a/jrnl/util.py +++ b/jrnl/util.py @@ -6,8 +6,7 @@ from tzlocal import get_localzone import getpass as gp import keyring import pytz -try: import simplejson as json -except ImportError: import json +import json if "win32" in sys.platform: import colorama colorama.init() From 46951cbe1253b87226e95d7c133443625afe94b0 Mon Sep 17 00:00:00 2001 From: Manuel Ebert Date: Thu, 23 Jan 2014 15:14:20 +0100 Subject: [PATCH 2/2] More unicode support --- CHANGELOG.md | 2 +- features/steps/core.py | 4 ++++ jrnl/cli.py | 11 ++++++----- jrnl/util.py | 4 ++++ 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 43c02af8..e43f5c7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ Changelog ### 1.7 (December 22, 2013) -* __1.7.7__ Cleaned up imporrts +* __1.7.7__ Cleaned up imports, better unicode support * __1.7.6__ Python 3 port for slugify * __1.7.5__ Colorama is only needed on windows. Smaller fixes * __1.7.3__ Touches temporary files before opening them to allow more external editors. diff --git a/features/steps/core.py b/features/steps/core.py index 2a27ebc9..6f2baa5b 100644 --- a/features/steps/core.py +++ b/features/steps/core.py @@ -129,11 +129,15 @@ def check_output_time_inline(context, text): @then('the output should contain "{text}"') def check_output_inline(context, text): out = context.stdout_capture.getvalue() + if isinstance(out, bytes): + out = out.decode('utf-8') assert text in out @then('the output should not contain "{text}"') def check_output_not_inline(context, text): out = context.stdout_capture.getvalue() + if isinstance(out, bytes): + out = out.decode('utf-8') assert text not in out @then('we should see the message "{text}"') diff --git a/jrnl/cli.py b/jrnl/cli.py index d6156822..7a9c1b55 100644 --- a/jrnl/cli.py +++ b/jrnl/cli.py @@ -115,7 +115,8 @@ def run(manual_args=None): args = parse_args(manual_args) if args.version: - print("{0} version {1}".format(jrnl.__title__, jrnl.__version__)) + version_str = "{0} version {1}".format(jrnl.__title__, jrnl.__version__) + print(util.py2encode(version_str)) sys.exit(0) # If the first textual argument points to a journal file, @@ -181,17 +182,17 @@ def run(manual_args=None): # Reading mode if not mode_compose and not mode_export: - print(journal.pprint()) + print(util.py2encode(journal.pprint())) # Various export modes elif args.short: - print(journal.pprint(short=True)) + print(util.py2encode(journal.pprint(short=True))) elif args.tags: - print(exporters.to_tag_list(journal)) + print(util.py2encode(exporters.to_tag_list(journal))) elif args.export is not False: - print(exporters.export(journal, args.export, args.output)) + print(util.py2encode(exporters.export(journal, args.export, args.output))) elif (args.encrypt is not False or args.decrypt is not False) and not PYCRYPTO: util.prompt("PyCrypto not found. To encrypt or decrypt your journal, install the PyCrypto package from http://www.pycrypto.org.") diff --git a/jrnl/util.py b/jrnl/util.py index 72d00ca3..708150f0 100644 --- a/jrnl/util.py +++ b/jrnl/util.py @@ -65,6 +65,10 @@ def u(s): """Mock unicode function for python 2 and 3 compatibility.""" return s if PY3 or type(s) is unicode else unicode(s.encode('string-escape'), "unicode_escape") +def py2encode(s): + """Encode in Python 2, but not in python 3.""" + return s.encode("utf-8") if PY2 and type(s) is unicode else s + def prompt(msg): """Prints a message to the std err stream defined in util.""" if not msg.endswith("\n"):