Skip to content

Commit

Permalink
Comply with PEP517 (Python-Markdown#824)
Browse files Browse the repository at this point in the history
 Add pep517check environment to tox

 Split version info into a separate file, load it using importlib

Fixes Python-Markdown#823.
  • Loading branch information
mitya57 authored and waylan committed May 15, 2019
1 parent 4e8cbad commit 144768d
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 36 deletions.
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ matrix:
packages:
- aspell
- aspell-en
- env: TOXENV=pep517check

addons:
apt:
Expand Down
5 changes: 5 additions & 0 deletions docs/change_log/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ title: Change Log
Python-Markdown Change Log
=========================

_______, 2019: Released version 3.1.1 (a bug-fix release).

* Fixed import failure in `setup.py` when the source directory is not
on `sys.path` (#823).

Mar 25, 2019: Released version 3.1 ([Notes](release-3.1.md)).

Sept 28, 2018: Released version 3.0.1 (a bug-fix release).
Expand Down
35 changes: 1 addition & 34 deletions markdown/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,47 +25,14 @@
from .core import Markdown, markdown, markdownFromFile
from .util import PY37
from .pep562 import Pep562
from pkg_resources.extern import packaging
from .__meta__ import __version__, __version_info__
import warnings

# For backward compatibility as some extensions expect it...
from .extensions import Extension # noqa

__all__ = ['Markdown', 'markdown', 'markdownFromFile']

# version must conform to PEP 440
# https://www.python.org/dev/peps/pep-0440/

# __version_info__ format:
# (major, minor, patch, dev/alpha/beta/rc/final, #)
# (1, 1, 2, 'dev', 0) => "1.1.2.dev0"
# (1, 1, 2, 'alpha', 1) => "1.1.2a1"
# (1, 2, 0, 'beta', 2) => "1.2b2"
# (1, 2, 0, 'rc', 4) => "1.2rc4"
# (1, 2, 0, 'final', 0) => "1.2"
__version_info__ = (3, 1, 0, 'final', 0)


def _get_version(): # pragma: no cover
" Returns a PEP 440-compliant version number from version_info. "
assert len(__version_info__) == 5
assert __version_info__[3] in ('dev', 'alpha', 'beta', 'rc', 'final')

parts = 2 if __version_info__[2] == 0 else 3
v = '.'.join(map(str, __version_info__[:parts]))

if __version_info__[3] == 'dev':
v += '.dev' + str(__version_info__[4])
elif __version_info__[3] != 'final':
mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'rc'}
v += mapping[__version_info__[3]] + str(__version_info__[4])

# Ensure version is valid and normalized
return str(packaging.version.Version(v))


__version__ = _get_version()

__deprecated__ = {
"version": ("__version__", __version__),
"version_info": ("__version_info__", __version_info__)
Expand Down
53 changes: 53 additions & 0 deletions markdown/__meta__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
"""
Python Markdown
A Python implementation of John Gruber's Markdown.
Documentation: https://python-markdown.github.io/
GitHub: https://github.com/Python-Markdown/markdown/
PyPI: https://pypi.org/project/Markdown/
Started by Manfred Stienstra (http://www.dwerg.net/).
Maintained for a few years by Yuri Takhteyev (http://www.freewisdom.org).
Currently maintained by Waylan Limberg (https://github.com/waylan),
Dmitry Shachnev (https://github.com/mitya57) and Isaac Muse (https://github.com/facelessuser).
Copyright 2007-2018 The Python Markdown Project (v. 1.7 and later)
Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
Copyright 2004 Manfred Stienstra (the original version)
License: BSD (see LICENSE.md for details).
"""

from pkg_resources.extern import packaging

# __version_info__ format:
# (major, minor, patch, dev/alpha/beta/rc/final, #)
# (1, 1, 2, 'dev', 0) => "1.1.2.dev0"
# (1, 1, 2, 'alpha', 1) => "1.1.2a1"
# (1, 2, 0, 'beta', 2) => "1.2b2"
# (1, 2, 0, 'rc', 4) => "1.2rc4"
# (1, 2, 0, 'final', 0) => "1.2"
__version_info__ = (3, 1, 0, 'final', 0)


def _get_version(): # pragma: no cover
" Returns a PEP 440-compliant version number from version_info. "
assert len(__version_info__) == 5
assert __version_info__[3] in ('dev', 'alpha', 'beta', 'rc', 'final')

parts = 2 if __version_info__[2] == 0 else 3
v = '.'.join(map(str, __version_info__[:parts]))

if __version_info__[3] == 'dev':
v += '.dev' + str(__version_info__[4])
elif __version_info__[3] != 'final':
mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'rc'}
v += mapping[__version_info__[3]] + str(__version_info__[4])

# Ensure version is valid and normalized
return str(packaging.version.Version(v))


__version__ = _get_version()
21 changes: 20 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,29 @@
"""


import os
import sys
from setuptools import setup
from markdown import __version__, __version_info__


def get_version():
"""Get version and version_info from markdown/__meta__.py file."""
module_path = os.path.join(os.path.dirname('__file__'), 'markdown', '__meta__.py')

if sys.version_info[0] == 2:
import imp
meta = imp.load_source('__meta__', module_path)
return meta.__version__, meta.__version_info__

import importlib.util
spec = importlib.util.spec_from_file_location('__meta__', module_path)
meta = importlib.util.module_from_spec(spec)
spec.loader.exec_module(meta)
return meta.__version__, meta.__version_info__


__version__, __version_info__ = get_version()

# Get development Status for classifiers
dev_status_map = {
'dev': '2 - Pre-Alpha',
Expand Down
6 changes: 5 additions & 1 deletion tox.ini
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[tox]
envlist = py27, py35, py36, py37, pypy, pypy3, flake8, checkspelling
envlist = py27, py35, py36, py37, pypy, pypy3, flake8, checkspelling, pep517check
requires = setuptools>=36
isolated_build = True

Expand All @@ -19,6 +19,10 @@ deps =
mkdocs_nature
commands = {toxinidir}/checkspelling.sh

[testenv:pep517check]
deps = pep517
commands = python -m pep517.check {toxinidir}

[flake8]
max-line-length = 119
exclude=markdown/pep562.py

0 comments on commit 144768d

Please sign in to comment.