Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion modelsdoc/templates/modelsdoc/models.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
{% autoescape off %}

{% for model in models %}
## {{ model.name }}({{ model.class_fullname }})
## {{ model.display_name }}

```
{{ model.doc }}
Expand Down
4 changes: 2 additions & 2 deletions modelsdoc/templates/modelsdoc/models.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
:local:

{% for model in models %}
{{ model.name }}({{ model.class_fullname }})
-----------------------------------------------------------------------------------------
{{ model.display_name }}
{{ model.display_name_length|str_repeat:'-' }}

::

Expand Down
5 changes: 5 additions & 0 deletions modelsdoc/templatetags/modelsdoc_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,8 @@ def emptylineless(parser, token):
@register.filter
def get_attr(obj, attr):
return getattr(obj, attr, '')


@register.filter
def str_repeat(times, string):
return string * times
10 changes: 10 additions & 0 deletions modelsdoc/wrappers.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

from sphinx.pycode import ModuleAnalyzer
import django
from django.utils.encoding import force_bytes

from modelsdoc.utils import (
class_to_string, get_foreignkey,
Expand Down Expand Up @@ -67,6 +68,15 @@ def class_fullname(self):
def class_name(self):
return self._model._model.__name__

@property
def display_name(self):
return '{}({})'.format(self.name, self.class_fullname)

@property
def display_name_length(self):
""" Return length of byte string. for reST section """
return len(force_bytes(self.display_name))

@property
def doc(self):
return self._model.__doc__
Expand Down
13 changes: 13 additions & 0 deletions tests/tests/test_templatetags.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,16 @@ class Dummy(object):

self.assertEqual('test', self._callFUT(Dummy(), 'test'))
self.assertEqual('', self._callFUT(Dummy(), 'non_exists_attr'))


class TestStrRepeat(TestCase):

def _getTargetTags(self):
return "{% load modelsdoc_tags %}{{ length|str_repeat:'-' }}"

def _callFUT(self, length):
t = Template(self._getTargetTags())
return t.render(Context({'length': length}))

def test_str_repeat(self):
self.assertEqual('-----', self._callFUT(5))
16 changes: 16 additions & 0 deletions tests/tests/test_wrappers.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,22 @@ def test_class_name(self):
)
self.assertEqual('DummyModel', target.class_name)

@mock.patch('modelsdoc.wrappers.class_to_string', return_value='dummy')
def test_display_name(self, mock):
target = self._makeOne(
self._getDummyModel(self._getDummyModel()),
'connection'
)
self.assertEqual('name(dummy)', target.display_name)

@mock.patch('modelsdoc.wrappers.class_to_string', return_value='dummy')
def test_display_name_length(self, mock):
target = self._makeOne(
self._getDummyModel(self._getDummyModel()),
'connection'
)
self.assertEqual(11, target.display_name_length)

def test_doc(self):
target = self._makeOne(self._getDummyModel(), 'connection')
self.assertEqual(' TEST DOC STRING ', target.doc)
Expand Down