A docstring is a string literal that occurs as the first statement in
a module, function, class, or method definition. Such a docstring
becomes the __doc__
special attribute of that object.
This is specially useful, for instance, when you are introspecting code and you want to know what a specific method or function does.
pep257 is a Python docstring style checker.
I already filled a feature request on plone.recipe.codeanalysis to add support for it; meanwhile, if you want to use it in your Buildout-based projects, you can add the following to your buildout configuration:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[buildout] | |
parts = pep257 | |
[pep257] | |
recipe = zc.recipe.egg | |
eggs = pep257 | |
entry-points = pep257=pep257:main | |
arguments = *pep257.parse_options() |
bin/buildout
you will find a bin/pep257
script.A typical output will look like this:
(python-2.7)# hvelarde@nanovac (master * u+1) ~/collective/polls # bin/pep257 src/ src/collective/__init__.py:1 at module level: D100: Docstring missing src/collective/polls/js_i18n_helper.py:1 at module level: D100: Docstring missing src/collective/polls/js_i18n_helper.py:8 in public class `LegendOthersTranslation`: D101: Docstring missing src/collective/polls/js_i18n_helper.py:14 in public method `render`: D102: Docstring missing src/collective/polls/testing.py:1 at module level: D100: Docstring missing src/collective/polls/testing.py:10 in public class `Fixture`: D101: Docstring missing src/collective/polls/testing.py:14 in public method `setUpZope`: D102: Docstring missing src/collective/polls/testing.py:19 in public method `setUpPloneSite`: D102: Docstring missing src/collective/polls/config.py:1 at module level: D100: Docstring missing src/collective/polls/polls.py:1 at module level: D100: Docstring missing src/collective/polls/polls.py:21 in public class `IPolls`: D101: Docstring missing src/collective/polls/polls.py:24 in public method `recent_polls`: D400: First line should end with '.', not 's' src/collective/polls/polls.py:24 in public method `recent_polls`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:27 in public method `uid_for_poll`: D400: First line should end with '.', not 'l' src/collective/polls/polls.py:27 in public method `uid_for_poll`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:30 in public method `poll_by_uid`: D400: First line should end with '.', not 'd' src/collective/polls/polls.py:30 in public method `poll_by_uid`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:33 in public method `voters_in_a_poll`: D400: First line should end with '.', not 'l' src/collective/polls/polls.py:33 in public method `voters_in_a_poll`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:36 in public method `voted_in_a_poll`: D400: First line should end with '.', not 'd' src/collective/polls/polls.py:36 in public method `voted_in_a_poll`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:39 in public method `allowed_to_edit`: D401: First line should be imperative: 'i', not 'is' src/collective/polls/polls.py:39 in public method `allowed_to_edit`: D400: First line should end with '.', not 'l' src/collective/polls/polls.py:39 in public method `allowed_to_edit`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:42 in public method `allowed_to_view`: D401: First line should be imperative: 'I', not 'Is' src/collective/polls/polls.py:42 in public method `allowed_to_view`: D400: First line should end with '.', not 'l' src/collective/polls/polls.py:42 in public method `allowed_to_view`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:45 in public method `allowed_to_vote`: D400: First line should end with '.', not 'l' src/collective/polls/polls.py:45 in public method `allowed_to_vote`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:48 in public method `anonymous_vote_id`: D400: First line should end with '.', not 'd' src/collective/polls/polls.py:48 in public method `anonymous_vote_id`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:52 in public class `Polls`: D203: Expected 1 blank line *before* class docstring, found 0 src/collective/polls/polls.py:52 in public class `Polls`: D400: First line should end with '.', not 's' src/collective/polls/polls.py:52 in public class `Polls`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:60 in public method `ct`: D102: Docstring missing src/collective/polls/polls.py:64 in public method `mt`: D102: Docstring missing src/collective/polls/polls.py:68 in public method `wt`: D102: Docstring missing src/collective/polls/polls.py:72 in public method `member`: D102: Docstring missing src/collective/polls/polls.py:75 in private method `_query_for_polls`: D400: First line should end with '.', not 's' src/collective/polls/polls.py:75 in private method `_query_for_polls`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:81 in public method `uid_for_poll`: D400: First line should end with '.', not 'l' src/collective/polls/polls.py:81 in public method `uid_for_poll`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:85 in public method `recent_polls`: D400: First line should end with '.', not 's' src/collective/polls/polls.py:85 in public method `recent_polls`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:98 in public method `poll_by_uid`: D400: First line should end with '.', not 'd' src/collective/polls/polls.py:98 in public method `poll_by_uid`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:109 in public method `voted_in_a_poll`: D400: First line should end with '.', not 'd' src/collective/polls/polls.py:109 in public method `voted_in_a_poll`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:128 in public method `allowed_to_edit`: D401: First line should be imperative: 'I', not 'Is' src/collective/polls/polls.py:128 in public method `allowed_to_edit`: D400: First line should end with '.', not 'l' src/collective/polls/polls.py:128 in public method `allowed_to_edit`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:133 in public method `allowed_to_view`: D401: First line should be imperative: 'I', not 'Is' src/collective/polls/polls.py:133 in public method `allowed_to_view`: D400: First line should end with '.', not 'l' src/collective/polls/polls.py:133 in public method `allowed_to_view`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:137 in public method `allowed_to_vote`: D401: First line should be imperative: 'i', not 'is' src/collective/polls/polls.py:137 in public method `allowed_to_vote`: D400: First line should end with '.', not '?' src/collective/polls/polls.py:137 in public method `allowed_to_vote`: D300: Expected """-quotes, got '''-quotes src/collective/polls/polls.py:156 in public class `PollPortletRender`: D203: Expected 1 blank line *before* class docstring, found 0 src/collective/polls/polls.py:156 in public class `PollPortletRender`: D204: Expected 1 blank line *after* class docstring, found 0 src/collective/polls/polls.py:156 in public class `PollPortletRender`: D400: First line should end with '.', not 'w' src/collective/polls/polls.py:181 in public method `render_portlet`: D202: No blank lines allowed *after* method docstring, found 1 src/collective/polls/polls.py:251 in public method `render`: D400: First line should end with '.', not 'e' src/collective/polls/__init__.py:1 at module level: D100: Docstring missing src/collective/polls/subscribers.py:1 at module level: D100: Docstring missing src/collective/polls/subscribers.py:17 in public function `fix_permissions`: D401: First line should be imperative: 'Thi', not 'This' src/collective/polls/subscribers.py:17 in public function `fix_permissions`: D400: First line should end with '.', not 'f' src/collective/polls/subscribers.py:17 in public function `fix_permissions`: D205: Blank line missing between one-line summary and description src/collective/polls/subscribers.py:17 in public function `fix_permissions`: D208: Docstring is over-indented src/collective/polls/subscribers.py:17 in public function `fix_permissions`: D300: Expected """-quotes, got '''-quotes src/collective/polls/subscribers.py:37 in public function `remove_votes`: D401: First line should be imperative: 'Thi', not 'This' src/collective/polls/subscribers.py:37 in public function `remove_votes`: D400: First line should end with '.', not 't' src/collective/polls/subscribers.py:37 in public function `remove_votes`: D205: Blank line missing between one-line summary and description src/collective/polls/subscribers.py:37 in public function `remove_votes`: D208: Docstring is over-indented src/collective/polls/subscribers.py:37 in public function `remove_votes`: D300: Expected """-quotes, got '''-quotes src/collective/polls/setuphandlers.py:1 at module level: D100: Docstring missing src/collective/polls/setuphandlers.py:12 in public class `HiddenProfiles`: D101: Docstring missing src/collective/polls/setuphandlers.py:18 in public method `getNonInstallableProfiles`: D102: Docstring missing src/collective/polls/setuphandlers.py:23 in public function `updateWorkflowDefinitions`: D103: Docstring missing src/collective/polls/setuphandlers.py:29 in public function `setupVarious`: D103: Docstring missing src/collective/polls/portlet/voteportlet.py:1 at module level: D100: Docstring missing src/collective/polls/portlet/voteportlet.py:24 in public function `PossiblePolls`: D103: Docstring missing src/collective/polls/portlet/voteportlet.py:46 in public class `IVotePortlet`: D203: Expected 1 blank line *before* class docstring, found 0 src/collective/polls/portlet/voteportlet.py:46 in public class `IVotePortlet`: D400: First line should end with '.', not 't' src/collective/polls/portlet/voteportlet.py:46 in public class `IVotePortlet`: D205: Blank line missing between one-line summary and description src/collective/polls/portlet/voteportlet.py:87 in public class `Assignment`: D203: Expected 1 blank line *before* class docstring, found 0 src/collective/polls/portlet/voteportlet.py:102 in public method `__init__`: D102: Docstring missing src/collective/polls/portlet/voteportlet.py:111 in public method `title`: D401: First line should be imperative: 'Thi', not 'This' src/collective/polls/portlet/voteportlet.py:111 in public method `title`: D400: First line should end with '.', not 'e' src/collective/polls/portlet/voteportlet.py:111 in public method `title`: D205: Blank line missing between one-line summary and description src/collective/polls/portlet/voteportlet.py:118 in public class `Renderer`: D203: Expected 1 blank line *before* class docstring, found 0 src/collective/polls/portlet/voteportlet.py:129 in public method `utility`: D200: One-line docstring should not occupy 2 lines src/collective/polls/portlet/voteportlet.py:135 in public method `portlet_manager_name`: D102: Docstring missing src/collective/polls/portlet/voteportlet.py:149 in public method `poll`: D102: Docstring missing src/collective/polls/portlet/voteportlet.py:170 in public method `poll_uid`: D200: One-line docstring should not occupy 2 lines src/collective/polls/portlet/voteportlet.py:176 in public method `getVotingResults`: D102: Docstring missing src/collective/polls/portlet/voteportlet.py:184 in public method `can_vote`: D102: Docstring missing src/collective/polls/portlet/voteportlet.py:193 in public method `available`: D102: Docstring missing src/collective/polls/portlet/voteportlet.py:202 in public method `is_closed`: D102: Docstring missing src/collective/polls/portlet/voteportlet.py:208 in public class `AddForm`: D203: Expected 1 blank line *before* class docstring, found 0 src/collective/polls/portlet/voteportlet.py:208 in public class `AddForm`: D204: Expected 1 blank line *after* class docstring, found 0 src/collective/polls/portlet/voteportlet.py:217 in public method `create`: D102: Docstring missing src/collective/polls/portlet/voteportlet.py:221 in public class `EditForm`: D203: Expected 1 blank line *before* class docstring, found 0 src/collective/polls/portlet/voteportlet.py:221 in public class `EditForm`: D204: Expected 1 blank line *after* class docstring, found 0 src/collective/polls/portlet/__init__.py:1 at module level: D100: Docstring missing src/collective/polls/Extensions/Install.py:1 at module level: D100: Docstring missing src/collective/polls/Extensions/Install.py:7 in public function `uninstall`: D103: Docstring missing src/collective/polls/Extensions/__init__.py:1 at module level: D100: Docstring missing src/collective/polls/tests/__init__.py:1 at module level: D100: Docstring missing src/collective/polls/content/__init__.py:1 at module level: D100: Docstring missing src/collective/polls/content/poll.py:1 at module level: D100: Docstring missing src/collective/polls/content/poll.py:34 in public class `InsuficientOptions`: D101: Docstring missing src/collective/polls/content/poll.py:38 in public class `IPoll`: D203: Expected 1 blank line *before* class docstring, found 0 src/collective/polls/content/poll.py:38 in public class `IPoll`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:80 in public method `validate_options`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:90 in public class `Poll`: D203: Expected 1 blank line *before* class docstring, found 0 src/collective/polls/content/poll.py:90 in public class `Poll`: D400: First line should end with '.', not 'e' src/collective/polls/content/poll.py:90 in public class `Poll`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:101 in public method `annotations`: D102: Docstring missing src/collective/polls/content/poll.py:105 in public method `utility`: D102: Docstring missing src/collective/polls/content/poll.py:109 in public method `getOptions`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:115 in private method `_getVotes`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:133 in public method `getResults`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:144 in private method `_validateVote`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:155 in private method `_setVoter`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:180 in public method `voters`: D102: Docstring missing src/collective/polls/content/poll.py:186 in public method `total_votes`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:192 in public method `setVote`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:217 in public class `PollAddForm`: D203: Expected 1 blank line *before* class docstring, found 0 src/collective/polls/content/poll.py:217 in public class `PollAddForm`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:223 in public method `create`: D102: Docstring missing src/collective/polls/content/poll.py:235 in public class `PollEditForm`: D203: Expected 1 blank line *before* class docstring, found 0 src/collective/polls/content/poll.py:235 in public class `PollEditForm`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:241 in public method `updateWidgets`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:258 in public method `applyChanges`: D102: Docstring missing src/collective/polls/content/poll.py:270 in public class `View`: D101: Docstring missing src/collective/polls/content/poll.py:277 in public method `update`: D102: Docstring missing src/collective/polls/content/poll.py:346 in public method `can_vote`: D102: Docstring missing src/collective/polls/content/poll.py:357 in public method `can_edit`: D102: Docstring missing src/collective/polls/content/poll.py:362 in public method `has_voted`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:371 in public method `poll_uid`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:377 in public method `getOptions`: D200: One-line docstring should not occupy 2 lines src/collective/polls/content/poll.py:382 in public method `getResults`: D200: One-line docstring should not occupy 2 lines