We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
PEP257 docstrings for file "./docs/conf.py"
Cover `./docs/conf.py` file with docstrings and follow [PEP257](https://www.python.org/dev/peps/pep-0257/). We use [pydocstyle](https://pypi.org/project/pydocstyle/) for validation.

Current validation log:

```
./docs/conf.py:1 at module level:
        D100: Missing docstring in public module
./docs/conf.py:28 in public class `Mock`:
        D101: Missing docstring in public class
./docs/conf.py:29 in public method `__init__`:
        D107: Missing docstring in __init__
./docs/conf.py:32 in public method `__call__`:
        D102: Missing docstring in public method
./docs/conf.py:36 in public method `__getattr__`:
        D105: Missing docstring in magic method
```

Subtask for #742 

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `docs/ccext.py`
Content:
```
1 # -*- coding: utf-8 -*-
2 
3 """Custom Sphinx extension to build a list of all of cookiecutter's cli."""
4 
5 import click
6 from docutils import nodes
7 from docutils.parsers import rst
8 from docutils.statemachine import ViewList
9 
10 from cookiecutter import cli
11 
12 
13 class CcCommandLineOptions(rst.Directive):
14     def _format_option(self, option):
15         return [
16             ".. _`%s`:" % option.name,
17             "",
18             ".. option:: " + ", ".join(option.opts),
19             "",
20             option.help,
21             ""
22         ]
23 
24     def process_actions(self):
25         for option in cli.main.params:
26             if isinstance(option, click.core.Option):
27                 for line in self._format_option(option):
28                     self.view_list.append(line, "")
29 
30     def run(self):
31         node = nodes.paragraph()
32         node.document = self.state.document
33         self.view_list = ViewList()
34         self.process_actions()
35         self.state.nested_parse(self.view_list, 0, node)
36         return [node]
37 
38 
39 def setup(app):
40     app.add_directive('cc-command-line-options', CcCommandLineOptions)
41
```

Path: `cookiecutter/extensions.py`
Content:
```
1 # -*- coding: utf-8 -*-
2 
3 """Jinja2 extensions."""
4 
5 import json
6 import string
7 try:
8     # Python 3.6 and above
9     from secrets import choice
10 except ImportError:
11     from random import choice
12 
13 from jinja2.ext import Extension
14 
15 
16 class JsonifyExtension(Extension):
17     """Jinja2 extension to convert a Python object to JSON."""
18 
19     def __init__(self, environment):
20         """Initialize the extension with the given environment."""
21         super(JsonifyExtension, self).__init__(environment)
22 
23         def jsonify(obj):
24             return json.dumps(obj, sort_keys=True, indent=4)
25 
26         environment.filters['jsonify'] = jsonify
27 
28 
29 class RandomStringExtension(Extension):
30     """Jinja2 extension to create a random string."""
31 
32     def __init__(self, environment):
33         """Jinja2 Extension Constructor"""
34         super(RandomStringExtension, self).__init__(environment)
35 
36         def random_ascii_string(length, punctuation=False):
37             if punctuation:
38                 corpus = "".join((string.ascii_letters, string.punctuation))
39             else:
40                 corpus = string.ascii_letters
41             return "".join(choice(corpus) for _ in range(length))
42         environment.globals.update(random_ascii_string=random_ascii_string)
43
```

Path: `setup.py`
Content:
```
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 """cookiecutter distutils configuration"""
5 
6 import os
7 import io
8 import sys
9 
10 from setuptools import setup
11 
12 version = "1.7.0"
13 
14 if sys.argv[-1] == 'publish':
15     os.system('python setup.py sdist upload')
16     os.system('python setup.py bdist_wheel upload')
17     sys.exit()
18 
19 if sys.argv[-1] == 'tag':
20     os.system("git tag -a %s -m 'version %s'" % (version, version))
21     os.system("git push --tags")
22     sys.exit()
23 
24 with io.open('README.md', 'r', encoding='utf-8') as readme_file:
25     readme = readme_file.read()
26 
27 requirements = [
28     'binaryornot>=0.2.0',
29     'jinja2>=2.7',
30     'click>=7.0',
31     'poyo>=0.1.0',
32     'jinja2-time>=0.1.0',
33     'requests>=2.18.0',
34     'six>=1.10',
35 ]
36 
37 if sys.argv[-1] == 'readme':
38     print(readme)
39     sys.exit()
40 
41 
42 setup(
43     name='cookiecutter',
44     version=version,
45     description=('A command-line utility that creates projects from project '
46                  'templates, e.g. creating a Python package project from a '
47                  'Python package project template.'),
48     long_description=readme,
49     long_description_content_type='text/markdown',
50     author='Audrey Roy',
51     author_email='audreyr@gmail.com',
52     url='https://github.com/cookiecutter/cookiecutter',
53     packages=[
54         'cookiecutter',
55     ],
56     package_dir={'cookiecutter': 'cookiecutter'},
57     entry_points={
58         'console_scripts': [
59             'cookiecutter = cookiecutter.__main__:main',
60         ]
61     },
62     include_package_data=True,
63     python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*',
64     install_requires=requirements,
65     extras_require={
66         ':python_version<"3.3"': ['whichcraft>=0.4.0'],
67     },
68     license='BSD',
69     zip_safe=False,
70     classifiers=[
71         "Development Status :: 5 - Production/Stable",
72         "Environment :: Console",
73         "Intended Audience :: Developers",
74         "Natural Language :: English",
75         "License :: OSI Approved :: BSD License",
76         "Programming Language :: Python",
77         "Programming Language :: Python :: 2",
78         "Programming Language :: Python :: 2.7",
79         "Programming Language :: Python :: 3",
80         "Programming Language :: Python :: 3.5",
81         "Programming Language :: Python :: 3.6",
82         "Programming Language :: Python :: 3.7",
83         "Programming Language :: Python :: 3.8",
84         "Programming Language :: Python :: Implementation :: CPython",
85         "Programming Language :: Python :: Implementation :: PyPy",
86         "Topic :: Software Development",
87     ],
88     keywords=(
89         'cookiecutter, Python, projects, project templates, Jinja2, '
90         'skeleton, scaffolding, project directory, setup.py, package, '
91         'packaging'
92     ),
93 )
94
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/cookiecutter/extensions.py b/cookiecutter/extensions.py
--- a/cookiecutter/extensions.py
+++ b/cookiecutter/extensions.py
@@ -30,7 +30,7 @@
     """Jinja2 extension to create a random string."""
 
     def __init__(self, environment):
-        """Jinja2 Extension Constructor"""
+        """Jinja2 Extension Constructor."""
         super(RandomStringExtension, self).__init__(environment)
 
         def random_ascii_string(length, punctuation=False):
diff --git a/docs/ccext.py b/docs/ccext.py
--- a/docs/ccext.py
+++ b/docs/ccext.py
@@ -11,7 +11,10 @@
 
 
 class CcCommandLineOptions(rst.Directive):
+    """Custom docutils extension class to parse cli commands from code."""
+
     def _format_option(self, option):
+        """Do cli options formatting."""
         return [
             ".. _`%s`:" % option.name,
             "",
@@ -22,12 +25,14 @@
         ]
 
     def process_actions(self):
+        """Get options from cookiecutter, send to formatter, prepare result."""
         for option in cli.main.params:
             if isinstance(option, click.core.Option):
                 for line in self._format_option(option):
                     self.view_list.append(line, "")
 
     def run(self):
+        """Override `run` in `rst.Directive` class."""
         node = nodes.paragraph()
         node.document = self.state.document
         self.view_list = ViewList()
@@ -37,4 +42,5 @@
 
 
 def setup(app):
+    """Register a Docutils extension directive."""
     app.add_directive('cc-command-line-options', CcCommandLineOptions)
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-"""cookiecutter distutils configuration"""
+"""cookiecutter distutils configuration."""
 
 import os
 import io

{"golden_diff": "diff --git a/cookiecutter/extensions.py b/cookiecutter/extensions.py\n--- a/cookiecutter/extensions.py\n+++ b/cookiecutter/extensions.py\n@@ -30,7 +30,7 @@\n     \"\"\"Jinja2 extension to create a random string.\"\"\"\n \n     def __init__(self, environment):\n-        \"\"\"Jinja2 Extension Constructor\"\"\"\n+        \"\"\"Jinja2 Extension Constructor.\"\"\"\n         super(RandomStringExtension, self).__init__(environment)\n \n         def random_ascii_string(length, punctuation=False):\ndiff --git a/docs/ccext.py b/docs/ccext.py\n--- a/docs/ccext.py\n+++ b/docs/ccext.py\n@@ -11,7 +11,10 @@\n \n \n class CcCommandLineOptions(rst.Directive):\n+    \"\"\"Custom docutils extension class to parse cli commands from code.\"\"\"\n+\n     def _format_option(self, option):\n+        \"\"\"Do cli options formatting.\"\"\"\n         return [\n             \".. _`%s`:\" % option.name,\n             \"\",\n@@ -22,12 +25,14 @@\n         ]\n \n     def process_actions(self):\n+        \"\"\"Get options from cookiecutter, send to formatter, prepare result.\"\"\"\n         for option in cli.main.params:\n             if isinstance(option, click.core.Option):\n                 for line in self._format_option(option):\n                     self.view_list.append(line, \"\")\n \n     def run(self):\n+        \"\"\"Override `run` in `rst.Directive` class.\"\"\"\n         node = nodes.paragraph()\n         node.document = self.state.document\n         self.view_list = ViewList()\n@@ -37,4 +42,5 @@\n \n \n def setup(app):\n+    \"\"\"Register a Docutils extension directive.\"\"\"\n     app.add_directive('cc-command-line-options', CcCommandLineOptions)\ndiff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -1,7 +1,7 @@\n #!/usr/bin/env python\n # -*- coding: utf-8 -*-\n \n-\"\"\"cookiecutter distutils configuration\"\"\"\n+\"\"\"cookiecutter distutils configuration.\"\"\"\n \n import os\n import io\n", "issue": "PEP257 docstrings for file \"./docs/conf.py\"\nCover `./docs/conf.py` file with docstrings and follow [PEP257](https://www.python.org/dev/peps/pep-0257/). We use [pydocstyle](https://pypi.org/project/pydocstyle/) for validation.\r\n\r\nCurrent validation log:\r\n\r\n```\r\n./docs/conf.py:1 at module level:\r\n        D100: Missing docstring in public module\r\n./docs/conf.py:28 in public class `Mock`:\r\n        D101: Missing docstring in public class\r\n./docs/conf.py:29 in public method `__init__`:\r\n        D107: Missing docstring in __init__\r\n./docs/conf.py:32 in public method `__call__`:\r\n        D102: Missing docstring in public method\r\n./docs/conf.py:36 in public method `__getattr__`:\r\n        D105: Missing docstring in magic method\r\n```\r\n\r\nSubtask for #742 \n", "before_files": [{"content": "# -*- coding: utf-8 -*-\n\n\"\"\"Custom Sphinx extension to build a list of all of cookiecutter's cli.\"\"\"\n\nimport click\nfrom docutils import nodes\nfrom docutils.parsers import rst\nfrom docutils.statemachine import ViewList\n\nfrom cookiecutter import cli\n\n\nclass CcCommandLineOptions(rst.Directive):\n    def _format_option(self, option):\n        return [\n            \".. _`%s`:\" % option.name,\n            \"\",\n            \".. option:: \" + \", \".join(option.opts),\n            \"\",\n            option.help,\n            \"\"\n        ]\n\n    def process_actions(self):\n        for option in cli.main.params:\n            if isinstance(option, click.core.Option):\n                for line in self._format_option(option):\n                    self.view_list.append(line, \"\")\n\n    def run(self):\n        node = nodes.paragraph()\n        node.document = self.state.document\n        self.view_list = ViewList()\n        self.process_actions()\n        self.state.nested_parse(self.view_list, 0, node)\n        return [node]\n\n\ndef setup(app):\n    app.add_directive('cc-command-line-options', CcCommandLineOptions)\n", "path": "docs/ccext.py"}, {"content": "# -*- coding: utf-8 -*-\n\n\"\"\"Jinja2 extensions.\"\"\"\n\nimport json\nimport string\ntry:\n    # Python 3.6 and above\n    from secrets import choice\nexcept ImportError:\n    from random import choice\n\nfrom jinja2.ext import Extension\n\n\nclass JsonifyExtension(Extension):\n    \"\"\"Jinja2 extension to convert a Python object to JSON.\"\"\"\n\n    def __init__(self, environment):\n        \"\"\"Initialize the extension with the given environment.\"\"\"\n        super(JsonifyExtension, self).__init__(environment)\n\n        def jsonify(obj):\n            return json.dumps(obj, sort_keys=True, indent=4)\n\n        environment.filters['jsonify'] = jsonify\n\n\nclass RandomStringExtension(Extension):\n    \"\"\"Jinja2 extension to create a random string.\"\"\"\n\n    def __init__(self, environment):\n        \"\"\"Jinja2 Extension Constructor\"\"\"\n        super(RandomStringExtension, self).__init__(environment)\n\n        def random_ascii_string(length, punctuation=False):\n            if punctuation:\n                corpus = \"\".join((string.ascii_letters, string.punctuation))\n            else:\n                corpus = string.ascii_letters\n            return \"\".join(choice(corpus) for _ in range(length))\n        environment.globals.update(random_ascii_string=random_ascii_string)\n", "path": "cookiecutter/extensions.py"}, {"content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n\"\"\"cookiecutter distutils configuration\"\"\"\n\nimport os\nimport io\nimport sys\n\nfrom setuptools import setup\n\nversion = \"1.7.0\"\n\nif sys.argv[-1] == 'publish':\n    os.system('python setup.py sdist upload')\n    os.system('python setup.py bdist_wheel upload')\n    sys.exit()\n\nif sys.argv[-1] == 'tag':\n    os.system(\"git tag -a %s -m 'version %s'\" % (version, version))\n    os.system(\"git push --tags\")\n    sys.exit()\n\nwith io.open('README.md', 'r', encoding='utf-8') as readme_file:\n    readme = readme_file.read()\n\nrequirements = [\n    'binaryornot>=0.2.0',\n    'jinja2>=2.7',\n    'click>=7.0',\n    'poyo>=0.1.0',\n    'jinja2-time>=0.1.0',\n    'requests>=2.18.0',\n    'six>=1.10',\n]\n\nif sys.argv[-1] == 'readme':\n    print(readme)\n    sys.exit()\n\n\nsetup(\n    name='cookiecutter',\n    version=version,\n    description=('A command-line utility that creates projects from project '\n                 'templates, e.g. creating a Python package project from a '\n                 'Python package project template.'),\n    long_description=readme,\n    long_description_content_type='text/markdown',\n    author='Audrey Roy',\n    author_email='audreyr@gmail.com',\n    url='https://github.com/cookiecutter/cookiecutter',\n    packages=[\n        'cookiecutter',\n    ],\n    package_dir={'cookiecutter': 'cookiecutter'},\n    entry_points={\n        'console_scripts': [\n            'cookiecutter = cookiecutter.__main__:main',\n        ]\n    },\n    include_package_data=True,\n    python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*',\n    install_requires=requirements,\n    extras_require={\n        ':python_version<\"3.3\"': ['whichcraft>=0.4.0'],\n    },\n    license='BSD',\n    zip_safe=False,\n    classifiers=[\n        \"Development Status :: 5 - Production/Stable\",\n        \"Environment :: Console\",\n        \"Intended Audience :: Developers\",\n        \"Natural Language :: English\",\n        \"License :: OSI Approved :: BSD License\",\n        \"Programming Language :: Python\",\n        \"Programming Language :: Python :: 2\",\n        \"Programming Language :: Python :: 2.7\",\n        \"Programming Language :: Python :: 3\",\n        \"Programming Language :: Python :: 3.5\",\n        \"Programming Language :: Python :: 3.6\",\n        \"Programming Language :: Python :: 3.7\",\n        \"Programming Language :: Python :: 3.8\",\n        \"Programming Language :: Python :: Implementation :: CPython\",\n        \"Programming Language :: Python :: Implementation :: PyPy\",\n        \"Topic :: Software Development\",\n    ],\n    keywords=(\n        'cookiecutter, Python, projects, project templates, Jinja2, '\n        'skeleton, scaffolding, project directory, setup.py, package, '\n        'packaging'\n    ),\n)\n", "path": "setup.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\n\n\"\"\"Custom Sphinx extension to build a list of all of cookiecutter's cli.\"\"\"\n\nimport click\nfrom docutils import nodes\nfrom docutils.parsers import rst\nfrom docutils.statemachine import ViewList\n\nfrom cookiecutter import cli\n\n\nclass CcCommandLineOptions(rst.Directive):\n    \"\"\"Custom docutils extension class to parse cli commands from code.\"\"\"\n\n    def _format_option(self, option):\n        \"\"\"Do cli options formatting.\"\"\"\n        return [\n            \".. _`%s`:\" % option.name,\n            \"\",\n            \".. option:: \" + \", \".join(option.opts),\n            \"\",\n            option.help,\n            \"\"\n        ]\n\n    def process_actions(self):\n        \"\"\"Get options from cookiecutter, send to formatter, prepare result.\"\"\"\n        for option in cli.main.params:\n            if isinstance(option, click.core.Option):\n                for line in self._format_option(option):\n                    self.view_list.append(line, \"\")\n\n    def run(self):\n        \"\"\"Override `run` in `rst.Directive` class.\"\"\"\n        node = nodes.paragraph()\n        node.document = self.state.document\n        self.view_list = ViewList()\n        self.process_actions()\n        self.state.nested_parse(self.view_list, 0, node)\n        return [node]\n\n\ndef setup(app):\n    \"\"\"Register a Docutils extension directive.\"\"\"\n    app.add_directive('cc-command-line-options', CcCommandLineOptions)\n", "path": "docs/ccext.py"}, {"content": "# -*- coding: utf-8 -*-\n\n\"\"\"Jinja2 extensions.\"\"\"\n\nimport json\nimport string\ntry:\n    # Python 3.6 and above\n    from secrets import choice\nexcept ImportError:\n    from random import choice\n\nfrom jinja2.ext import Extension\n\n\nclass JsonifyExtension(Extension):\n    \"\"\"Jinja2 extension to convert a Python object to JSON.\"\"\"\n\n    def __init__(self, environment):\n        \"\"\"Initialize the extension with the given environment.\"\"\"\n        super(JsonifyExtension, self).__init__(environment)\n\n        def jsonify(obj):\n            return json.dumps(obj, sort_keys=True, indent=4)\n\n        environment.filters['jsonify'] = jsonify\n\n\nclass RandomStringExtension(Extension):\n    \"\"\"Jinja2 extension to create a random string.\"\"\"\n\n    def __init__(self, environment):\n        \"\"\"Jinja2 Extension Constructor.\"\"\"\n        super(RandomStringExtension, self).__init__(environment)\n\n        def random_ascii_string(length, punctuation=False):\n            if punctuation:\n                corpus = \"\".join((string.ascii_letters, string.punctuation))\n            else:\n                corpus = string.ascii_letters\n            return \"\".join(choice(corpus) for _ in range(length))\n        environment.globals.update(random_ascii_string=random_ascii_string)\n", "path": "cookiecutter/extensions.py"}, {"content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n\"\"\"cookiecutter distutils configuration.\"\"\"\n\nimport os\nimport io\nimport sys\n\nfrom setuptools import setup\n\nversion = \"1.7.0\"\n\nif sys.argv[-1] == 'publish':\n    os.system('python setup.py sdist upload')\n    os.system('python setup.py bdist_wheel upload')\n    sys.exit()\n\nif sys.argv[-1] == 'tag':\n    os.system(\"git tag -a %s -m 'version %s'\" % (version, version))\n    os.system(\"git push --tags\")\n    sys.exit()\n\nwith io.open('README.md', 'r', encoding='utf-8') as readme_file:\n    readme = readme_file.read()\n\nrequirements = [\n    'binaryornot>=0.2.0',\n    'jinja2>=2.7',\n    'click>=7.0',\n    'poyo>=0.1.0',\n    'jinja2-time>=0.1.0',\n    'requests>=2.18.0',\n    'six>=1.10',\n]\n\nif sys.argv[-1] == 'readme':\n    print(readme)\n    sys.exit()\n\n\nsetup(\n    name='cookiecutter',\n    version=version,\n    description=('A command-line utility that creates projects from project '\n                 'templates, e.g. creating a Python package project from a '\n                 'Python package project template.'),\n    long_description=readme,\n    long_description_content_type='text/markdown',\n    author='Audrey Roy',\n    author_email='audreyr@gmail.com',\n    url='https://github.com/cookiecutter/cookiecutter',\n    packages=[\n        'cookiecutter',\n    ],\n    package_dir={'cookiecutter': 'cookiecutter'},\n    entry_points={\n        'console_scripts': [\n            'cookiecutter = cookiecutter.__main__:main',\n        ]\n    },\n    include_package_data=True,\n    python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*',\n    install_requires=requirements,\n    extras_require={\n        ':python_version<\"3.3\"': ['whichcraft>=0.4.0'],\n    },\n    license='BSD',\n    zip_safe=False,\n    classifiers=[\n        \"Development Status :: 5 - Production/Stable\",\n        \"Environment :: Console\",\n        \"Intended Audience :: Developers\",\n        \"Natural Language :: English\",\n        \"License :: OSI Approved :: BSD License\",\n        \"Programming Language :: Python\",\n        \"Programming Language :: Python :: 2\",\n        \"Programming Language :: Python :: 2.7\",\n        \"Programming Language :: Python :: 3\",\n        \"Programming Language :: Python :: 3.5\",\n        \"Programming Language :: Python :: 3.6\",\n        \"Programming Language :: Python :: 3.7\",\n        \"Programming Language :: Python :: 3.8\",\n        \"Programming Language :: Python :: Implementation :: CPython\",\n        \"Programming Language :: Python :: Implementation :: PyPy\",\n        \"Topic :: Software Development\",\n    ],\n    keywords=(\n        'cookiecutter, Python, projects, project templates, Jinja2, '\n        'skeleton, scaffolding, project directory, setup.py, package, '\n        'packaging'\n    ),\n)\n", "path": "setup.py"}]}