mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-01-24 00:04:16 +03:00
Refactored get_view_description, moved appropriate tests to test_description.py
This commit is contained in:
parent
2bf5f63050
commit
c8b0e6c40f
|
@ -3,8 +3,10 @@
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework.compat import apply_markdown
|
from rest_framework.compat import apply_markdown, smart_text
|
||||||
from rest_framework.utils.formatting import get_view_name, get_view_description
|
from rest_framework.utils.formatting import get_view_name, get_view_description
|
||||||
|
from rest_framework.tests.views import (
|
||||||
|
ViewWithNonASCIICharactersInDocstring, UTF8_TEST_DOCSTRING)
|
||||||
|
|
||||||
# We check that docstrings get nicely un-indented.
|
# We check that docstrings get nicely un-indented.
|
||||||
DESCRIPTION = """an example docstring
|
DESCRIPTION = """an example docstring
|
||||||
|
@ -83,11 +85,10 @@ class TestViewNamesAndDescriptions(TestCase):
|
||||||
Unicode in docstrings should be respected.
|
Unicode in docstrings should be respected.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class MockView(APIView):
|
self.assertEqual(
|
||||||
"""Проверка"""
|
get_view_description(ViewWithNonASCIICharactersInDocstring),
|
||||||
pass
|
smart_text(UTF8_TEST_DOCSTRING)
|
||||||
|
)
|
||||||
self.assertEqual(get_view_description(MockView), "Проверка")
|
|
||||||
|
|
||||||
def test_view_description_can_be_empty(self):
|
def test_view_description_can_be_empty(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from django.test import TestCase
|
|
||||||
from rest_framework.utils import formatting
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
class FormattingUnitTests(TestCase):
|
|
||||||
def setUp(self):
|
|
||||||
# test strings snatched from http://www.columbia.edu/~fdc/utf8/,
|
|
||||||
# http://winrus.com/utf8-jap.htm and memory
|
|
||||||
self.utf8_test_string = (
|
|
||||||
'zażółć gęślą jaźń'
|
|
||||||
'Sîne klâwen durh die wolken sint geslagen'
|
|
||||||
'Τη γλώσσα μου έδωσαν ελληνική'
|
|
||||||
'யாமறிந்த மொழிகளிலே தமிழ்மொழி'
|
|
||||||
'На берегу пустынных волн'
|
|
||||||
' てすと'
|
|
||||||
'アイウエオカキクケコサシスセソタチツテ'
|
|
||||||
)
|
|
||||||
self.non_utf8_test_string = ('The quick brown fox jumps over the lazy '
|
|
||||||
'dog')
|
|
||||||
|
|
||||||
def test_for_ascii_support_in_remove_leading_indent(self):
|
|
||||||
if sys.version_info < (3, 0):
|
|
||||||
# only Python 2.x is affected, so we skip the test entirely
|
|
||||||
# if on Python 3.x
|
|
||||||
self.assertEqual(formatting._remove_leading_indent(
|
|
||||||
self.non_utf8_test_string), self.non_utf8_test_string)
|
|
||||||
|
|
||||||
def test_for_utf8_support_in_remove_leading_indent(self):
|
|
||||||
if sys.version_info < (3, 0):
|
|
||||||
# only Python 2.x is affected, so we skip the test entirely
|
|
||||||
# if on Python 3.x
|
|
||||||
self.assertEqual(formatting._remove_leading_indent(
|
|
||||||
self.utf8_test_string), self.utf8_test_string.decode('utf-8'))
|
|
25
rest_framework/tests/views.py
Normal file
25
rest_framework/tests/views.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
|
|
||||||
|
# test strings snatched from http://www.columbia.edu/~fdc/utf8/,
|
||||||
|
# http://winrus.com/utf8-jap.htm and memory
|
||||||
|
UTF8_TEST_DOCSTRING = (
|
||||||
|
'zażółć gęślą jaźń'
|
||||||
|
'Sîne klâwen durh die wolken sint geslagen'
|
||||||
|
'Τη γλώσσα μου έδωσαν ελληνική'
|
||||||
|
'யாமறிந்த மொழிகளிலே தமிழ்மொழி'
|
||||||
|
'На берегу пустынных волн'
|
||||||
|
'てすと'
|
||||||
|
'アイウエオカキクケコサシスセソタチツテ'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Apparently there is an issue where docstrings of imported view classes
|
||||||
|
# do not retain their encoding information even if a module has a proper
|
||||||
|
# encoding declaration at the top of its source file. Therefore for tests
|
||||||
|
# to catch unicode related errors, a mock view has to be declared in a separate
|
||||||
|
# module.
|
||||||
|
class ViewWithNonASCIICharactersInDocstring(APIView):
|
||||||
|
__doc__ = UTF8_TEST_DOCSTRING
|
|
@ -5,7 +5,7 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from rest_framework.compat import apply_markdown
|
from rest_framework.compat import apply_markdown, smart_text
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,11 +24,6 @@ def _remove_leading_indent(content):
|
||||||
Remove leading indent from a block of text.
|
Remove leading indent from a block of text.
|
||||||
Used when generating descriptions from docstrings.
|
Used when generating descriptions from docstrings.
|
||||||
"""
|
"""
|
||||||
try:
|
|
||||||
content = content.decode('utf-8')
|
|
||||||
except (AttributeError, UnicodeEncodeError):
|
|
||||||
pass # the string should keep the default 'ascii' encoding in
|
|
||||||
# Python 2.x or stay a unicode string in Python 3.x
|
|
||||||
whitespace_counts = [len(line) - len(line.lstrip(' '))
|
whitespace_counts = [len(line) - len(line.lstrip(' '))
|
||||||
for line in content.splitlines()[1:] if line.lstrip()]
|
for line in content.splitlines()[1:] if line.lstrip()]
|
||||||
|
|
||||||
|
@ -68,7 +63,7 @@ def get_view_description(cls, html=False):
|
||||||
Return a description for an `APIView` class or `@api_view` function.
|
Return a description for an `APIView` class or `@api_view` function.
|
||||||
"""
|
"""
|
||||||
description = cls.__doc__ or ''
|
description = cls.__doc__ or ''
|
||||||
description = _remove_leading_indent(description)
|
description = _remove_leading_indent(smart_text(description))
|
||||||
if html:
|
if html:
|
||||||
return markup_description(description)
|
return markup_description(description)
|
||||||
return description
|
return description
|
||||||
|
|
Loading…
Reference in New Issue
Block a user