Merge pull request #304 from maebert/unicode-fixes

Unicode fixes
This commit is contained in:
Manuel Ebert 2014-11-06 11:33:36 +01:00
commit b45e52f743
5 changed files with 16 additions and 9 deletions

View file

@ -4,6 +4,7 @@ Changelog
### 1.9 (July 21, 2014) ### 1.9 (July 21, 2014)
* __1.9.7__ Fixes writing non-ascii entries on the prompt
* __1.9.6__ Fuzzy time parsing improvements (thanks to @pcarranza) * __1.9.6__ Fuzzy time parsing improvements (thanks to @pcarranza)
* __1.9.5__ Multi-word tags for DayOne Journals * __1.9.5__ Multi-word tags for DayOne Journals
* __1.9.4__ Fixed: Order of journal entries in file correct after --edit'ing * __1.9.4__ Fixed: Order of journal entries in file correct after --edit'ing

View file

@ -59,3 +59,10 @@ Feature: Zapped bugs should stay dead.
2014-04-24 09:00 Ran 6.2 miles today in 1:02:03. 2014-04-24 09:00 Ran 6.2 miles today in 1:02:03.
| I'm feeling sore because I forgot to stretch. | I'm feeling sore because I forgot to stretch.
""" """
Scenario: Writing an entry at the prompt with non-ascii characters
# https://github.com/maebert/jrnl/issues/295
Given we use the config "basic.json"
When we run "jrnl" and enter "Crème brûlée & Mötorhead"
Then we should get no error
and the journal should contain "Crème brûlée & Mötorhead"

View file

@ -2,9 +2,8 @@ from behave import *
from jrnl import cli, Journal, util from jrnl import cli, Journal, util
from dateutil import parser as date_parser from dateutil import parser as date_parser
import os import os
import sys import codecs
import json import json
import pytz
import keyring import keyring
keyring.set_keyring(keyring.backends.file.PlaintextKeyring()) keyring.set_keyring(keyring.backends.file.PlaintextKeyring())
try: try:
@ -30,7 +29,7 @@ def _parse_args(command):
def read_journal(journal_name="default"): def read_journal(journal_name="default"):
with open(cli.CONFIG_PATH) as config_file: with open(cli.CONFIG_PATH) as config_file:
config = json.load(config_file) config = json.load(config_file)
with open(config['journals'][journal_name]) as journal_file: with codecs.open(config['journals'][journal_name], 'r', 'utf-8') as journal_file:
journal = journal_file.read() journal = journal_file.read()
return journal return journal
@ -57,7 +56,7 @@ def run_with_input(context, command, inputs=None):
buffer = StringIO(text.strip()) buffer = StringIO(text.strip())
util.STDIN = buffer util.STDIN = buffer
try: try:
cli.run(args or None) cli.run(args)
context.exit_status = 0 context.exit_status = 0
except SystemExit as e: except SystemExit as e:
context.exit_status = e.code context.exit_status = e.code
@ -66,7 +65,7 @@ def run_with_input(context, command, inputs=None):
def run(context, command): def run(context, command):
args = _parse_args(command) args = _parse_args(command)
try: try:
cli.run(args or None) cli.run(args)
context.exit_status = 0 context.exit_status = 0
except SystemExit as e: except SystemExit as e:
context.exit_status = e.code context.exit_status = e.code
@ -184,7 +183,7 @@ def config_var(context, key, value, journal=None):
@then('the journal should have {number:d} entry') @then('the journal should have {number:d} entry')
@then('journal "{journal_name}" should have {number:d} entries') @then('journal "{journal_name}" should have {number:d} entries')
@then('journal "{journal_name}" should have {number:d} entry') @then('journal "{journal_name}" should have {number:d} entry')
def check_journal_content(context, number, journal_name="default"): def check_num_entries(context, number, journal_name="default"):
journal = open_journal(journal_name) journal = open_journal(journal_name)
assert len(journal.entries) == number assert len(journal.entries) == number

View file

@ -8,7 +8,7 @@ jrnl is a simple journal application for your command line.
from __future__ import absolute_import from __future__ import absolute_import
__title__ = 'jrnl' __title__ = 'jrnl'
__version__ = '1.9.6' __version__ = '1.9.7'
__author__ = 'Manuel Ebert' __author__ = 'Manuel Ebert'
__license__ = 'MIT License' __license__ = 'MIT License'
__copyright__ = 'Copyright 2013 - 2014 Manuel Ebert' __copyright__ = 'Copyright 2013 - 2014 Manuel Ebert'

View file

@ -79,11 +79,11 @@ def prompt(msg):
def py23_input(msg=""): def py23_input(msg=""):
prompt(msg) prompt(msg)
return STDIN.readline().strip() return u(STDIN.readline()).strip()
def py23_read(msg=""): def py23_read(msg=""):
prompt(msg) prompt(msg)
return STDIN.read() return u(STDIN.read())
def yesno(prompt, default=True): def yesno(prompt, default=True):
prompt = prompt.strip() + (" [Y/n]" if default else " [y/N]") prompt = prompt.strip() + (" [Y/n]" if default else " [y/N]")