From c3d6a38e45fdae294dded6112154c7843b790035 Mon Sep 17 00:00:00 2001 From: Manuel Ebert Date: Sun, 19 Jan 2014 11:58:13 +0100 Subject: [PATCH] Port slugify to Python3 --- CHANGELOG.md | 1 + jrnl/__init__.py | 2 +- jrnl/exporters.py | 6 ++---- jrnl/util.py | 12 ++++++++++++ requirements.txt | 1 - setup.py | 1 - 6 files changed, 16 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4684510..b70f3659 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ Changelog ### 1.7 (December 22, 2013) +* __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. * __1.7.2__ Dateutil added to requirements. diff --git a/jrnl/__init__.py b/jrnl/__init__.py index a8e1bfe3..1e54f31b 100644 --- a/jrnl/__init__.py +++ b/jrnl/__init__.py @@ -7,7 +7,7 @@ jrnl is a simple journal application for your command line. """ __title__ = 'jrnl' -__version__ = '1.7.5' +__version__ = '1.7.6' __author__ = 'Manuel Ebert' __license__ = 'MIT License' __copyright__ = 'Copyright 2013 - 2014 Manuel Ebert' diff --git a/jrnl/exporters.py b/jrnl/exporters.py index 7d2eaa93..4362dfae 100644 --- a/jrnl/exporters.py +++ b/jrnl/exporters.py @@ -3,12 +3,10 @@ import os import string -try: from slugify import slugify -except ImportError: import slugify try: import simplejson as json except ImportError: import json -try: from .util import u -except (SystemError, ValueError): from util import u +try: from .util import u, slugify +except (SystemError, ValueError): from util import u, slugify def get_tags_count(journal): diff --git a/jrnl/util.py b/jrnl/util.py index 0c5d148d..ae45cbb9 100644 --- a/jrnl/util.py +++ b/jrnl/util.py @@ -15,6 +15,7 @@ import re import tempfile import subprocess import codecs +import unicodedata PY3 = sys.version_info[0] == 3 PY2 = sys.version_info[0] == 2 @@ -144,3 +145,14 @@ def colorize(string): """Returns the string wrapped in cyan ANSI escape""" return u"\033[36m{}\033[39m".format(string) +def slugify(string): + """Slugifies a string. + Based on public domain code from https://github.com/zacharyvoase/slugify + and ported to deal with all kinds of python 2 and 3 strings + """ + string = u(string) + ascii_string = str(unicodedata.normalize('NFKD', string).encode('ascii', 'ignore')) + no_punctuation = re.sub(r'[^\w\s-]', '', ascii_string).strip().lower() + slug = re.sub(r'[-\s]+', '-', no_punctuation) + return u(slug) + diff --git a/requirements.txt b/requirements.txt index 413a3844..211675e6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,5 @@ pytz >= 2013b pycrypto >= 2.6 argparse==1.2.1 tzlocal == 1.0 -slugify==0.0.1 keyring==3.0.5 python-dateutil==2.2 diff --git a/setup.py b/setup.py index bd6455e1..def31310 100644 --- a/setup.py +++ b/setup.py @@ -73,7 +73,6 @@ setup( "parsedatetime>=1.1.2", "pytz>=2013b", "tzlocal==1.0", - "slugify>=0.0.1", "keyring>=3.3", "python-dateutil>=2.2" ] + [p for p, cond in conditional_dependencies.items() if cond],