diff options
| author | Tom Christie | 2011-04-29 14:32:56 +0100 |
|---|---|---|
| committer | Tom Christie | 2011-04-29 14:32:56 +0100 |
| commit | b358fbdbe9cbd4ce644c4b2c7b9b4cec0811e14e (patch) | |
| tree | 601e5576995809b74f914cafcee8a7a8cd9c6937 /djangorestframework/utils/description.py | |
| parent | 93aa065fa92f64472a3ee80564020a81776be742 (diff) | |
| download | django-rest-framework-b358fbdbe9cbd4ce644c4b2c7b9b4cec0811e14e.tar.bz2 | |
More refactoring - move various less core stuff into utils etc
Diffstat (limited to 'djangorestframework/utils/description.py')
| -rw-r--r-- | djangorestframework/utils/description.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/djangorestframework/utils/description.py b/djangorestframework/utils/description.py new file mode 100644 index 00000000..f7145c0f --- /dev/null +++ b/djangorestframework/utils/description.py @@ -0,0 +1,37 @@ +"""Get a descriptive name and description for a view, +based on class name and docstring, and override-able by 'name' and 'description' attributes""" +import re + +def get_name(view): + """Return a name for the view. + + If view has a name attribute, use that, otherwise use the view's class name, with 'CamelCaseNames' converted to 'Camel Case Names'.""" + if getattr(view, 'name', None) is not None: + return view.name + + if getattr(view, '__name__', None) is not None: + name = view.__name__ + elif getattr(view, '__class__', None) is not None: # TODO: should be able to get rid of this case once refactoring to 1.3 class views is complete + name = view.__class__.__name__ + else: + return '' + + return re.sub('(((?<=[a-z])[A-Z])|([A-Z](?![A-Z]|$)))', ' \\1', name).strip() + +def get_description(view): + """Provide a description for the view. + + By default this is the view's docstring with nice unindention applied.""" + if getattr(view, 'description', None) is not None: + return getattr(view, 'description') + + if getattr(view, '__doc__', None) is not None: + whitespace_counts = [len(line) - len(line.lstrip(' ')) for line in view.__doc__.splitlines()[1:] if line.lstrip()] + + if whitespace_counts: + whitespace_pattern = '^' + (' ' * min(whitespace_counts)) + return re.sub(re.compile(whitespace_pattern, re.MULTILINE), '', view.__doc__) + + return view.__doc__ + + return ''
\ No newline at end of file |
