mirror of
https://github.com/vale981/releases
synced 2025-03-04 17:21:43 -05:00
Get parse_changelog working + tested
This commit is contained in:
parent
13fd559eb7
commit
71d213ef4f
3 changed files with 51 additions and 11 deletions
|
@ -11,14 +11,14 @@ from spec import Spec, ok_, eq_
|
|||
from sphinx.application import Sphinx
|
||||
|
||||
from releases.models import Release, Issue
|
||||
from releases.util import get_doctree
|
||||
from releases.util import get_doctree, parse_changelog
|
||||
|
||||
support = os.path.join(os.path.dirname(__file__), '_support')
|
||||
vanilla = os.path.join(support, 'vanilla', 'changelog.rst')
|
||||
|
||||
|
||||
class get_doctree_(Spec):
|
||||
def obtains_app_and_doctree_from_filepath(self):
|
||||
vanilla = os.path.join(support, 'vanilla', 'changelog.rst')
|
||||
app, doctree = get_doctree(vanilla)
|
||||
# Expect doctree & app
|
||||
ok_(doctree)
|
||||
|
@ -32,3 +32,22 @@ class get_doctree_(Spec):
|
|||
ok_(isinstance(bug, Issue))
|
||||
eq_(bug.type, 'bug')
|
||||
eq_(bug.number, '1')
|
||||
|
||||
|
||||
class parse_changelog_(Spec):
|
||||
def yields_releases_dict_from_changelog_path(self):
|
||||
releases = parse_changelog(vanilla)
|
||||
ok_(releases)
|
||||
ok_(isinstance(releases, dict))
|
||||
eq_(
|
||||
set(releases.keys()),
|
||||
set(('1.0.0', '1.0.1', 'unreleased_1.x_bugfix',
|
||||
'unreleased_1.x_feature')),
|
||||
)
|
||||
eq_(len(releases['1.0.0']), 0)
|
||||
eq_(len(releases['unreleased_1.x_bugfix']), 0)
|
||||
eq_(len(releases['unreleased_1.x_feature']), 0)
|
||||
eq_(len(releases['1.0.1']), 1)
|
||||
issue = releases['1.0.1'][0]
|
||||
eq_(issue.type, 'bug')
|
||||
eq_(issue.number, '1')
|
||||
|
|
|
@ -8,12 +8,13 @@ from tempfile import mkdtemp
|
|||
import sphinx
|
||||
from docutils.core import Publisher
|
||||
from docutils.io import NullOutput
|
||||
from docutils.nodes import bullet_list
|
||||
from sphinx.application import Sphinx # not exposed at top level
|
||||
from sphinx.io import (
|
||||
SphinxStandaloneReader, SphinxFileInput, SphinxDummyWriter,
|
||||
)
|
||||
|
||||
from . import generate_changelog, setup
|
||||
from . import construct_releases, setup
|
||||
|
||||
|
||||
def parse_changelog(path):
|
||||
|
@ -27,8 +28,22 @@ def parse_changelog(path):
|
|||
|
||||
:param str path: A relative or absolute file path string.
|
||||
|
||||
:returns: Stuff.
|
||||
:returns:
|
||||
A dict of releases (including, if applicable, entries for
|
||||
per-major-line unreleased issues). Keys are release numbers/versions
|
||||
(`"1.0.2"`, `"unreleased_1.x_bugfix"`, etc), values are lists of
|
||||
``releases.models.Issue`` objects.
|
||||
"""
|
||||
app, doctree = get_doctree(path)
|
||||
# Have to semi-reproduce the 'find first bullet list' bit from main code,
|
||||
# which is unfortunately side-effect-heavy (thanks to Sphinx plugin
|
||||
# design).
|
||||
first_list = None
|
||||
for node in doctree[0]:
|
||||
if isinstance(node, bullet_list):
|
||||
first_list = node
|
||||
break
|
||||
return changelog2dict(construct_releases(first_list.children, app))
|
||||
|
||||
|
||||
def get_doctree(path):
|
||||
|
@ -150,3 +165,15 @@ def make_app(**kwargs):
|
|||
init_args = [lambda x: x]
|
||||
app.config.init_values(*init_args)
|
||||
return app
|
||||
|
||||
|
||||
def changelog2dict(changelog):
|
||||
"""
|
||||
Helper turning internal list-o-releases structure into a dict.
|
||||
|
||||
See `parse_changelog` docstring for return value details.
|
||||
"""
|
||||
d = {}
|
||||
for r in changelog:
|
||||
d[r['obj'].number] = r['entries']
|
||||
return d
|
||||
|
|
|
@ -12,7 +12,7 @@ from releases import (
|
|||
release_role,
|
||||
construct_releases,
|
||||
)
|
||||
from releases.util import make_app
|
||||
from releases.util import make_app, changelog2dict
|
||||
|
||||
|
||||
def inliner(app=None):
|
||||
|
@ -85,12 +85,6 @@ def release_list(*entries, **kwargs):
|
|||
entries.append(release('1.0.0'))
|
||||
return entries
|
||||
|
||||
def changelog2dict(changelog):
|
||||
d = {}
|
||||
for r in changelog:
|
||||
d[r['obj'].number] = r['entries']
|
||||
return d
|
||||
|
||||
def releases(*entries, **kwargs):
|
||||
app = kwargs.pop('app', None) or make_app()
|
||||
return construct_releases(release_list(*entries, **kwargs), app)
|
||||
|
|
Loading…
Add table
Reference in a new issue