aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Nathaniel Manista <nathaniel@google.com>2015-07-30 15:06:14 -0700
committerGravatar Nathaniel Manista <nathaniel@google.com>2015-07-30 15:06:14 -0700
commit772fb1e9772373f6fa8b815860da222b3e9c8b42 (patch)
treebcef7127c8a469a081b2b108e3d4988e8affe643 /src
parent676560431d9815abec7ed5698d8d0f9b330adca4 (diff)
parentd65632ab044dce63c269e4d1eb432689374015b2 (diff)
Merge pull request #2697 from soltanmm/add-sphinx-doc
Python documentation generation.
Diffstat (limited to 'src')
-rw-r--r--src/python/src/.gitignore4
-rw-r--r--src/python/src/MANIFEST.in1
-rw-r--r--src/python/src/commands.py75
-rw-r--r--src/python/src/setup.cfg2
-rw-r--r--src/python/src/setup.py28
5 files changed, 105 insertions, 5 deletions
diff --git a/src/python/src/.gitignore b/src/python/src/.gitignore
index 144e501237..d89f3db999 100644
--- a/src/python/src/.gitignore
+++ b/src/python/src/.gitignore
@@ -2,3 +2,7 @@ MANIFEST
grpcio.egg-info/
build/
dist/
+*.egg
+*.egg/
+*.eggs/
+doc/
diff --git a/src/python/src/MANIFEST.in b/src/python/src/MANIFEST.in
index 6f32db0548..498b55f20a 100644
--- a/src/python/src/MANIFEST.in
+++ b/src/python/src/MANIFEST.in
@@ -1 +1,2 @@
graft grpc
+include commands.py
diff --git a/src/python/src/commands.py b/src/python/src/commands.py
new file mode 100644
index 0000000000..8e87855011
--- /dev/null
+++ b/src/python/src/commands.py
@@ -0,0 +1,75 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Provides distutils command classes for the GRPC Python setup process."""
+
+import os
+import os.path
+import sys
+
+import setuptools
+
+_CONF_PY_ADDENDUM = """
+extensions.append('sphinx.ext.napoleon')
+napoleon_google_docstring = True
+napoleon_numpy_docstring = True
+
+html_theme = 'sphinx_rtd_theme'
+"""
+
+class SphinxDocumentation(setuptools.Command):
+ """Command to generate documentation via sphinx."""
+
+ description = ''
+ user_options = []
+
+ def initialize_options(self):
+ pass
+
+ def finalize_options(self):
+ pass
+
+ def run(self):
+ # We import here to ensure that setup.py has had a chance to install the
+ # relevant package eggs first.
+ import sphinx
+ import sphinx.apidoc
+ metadata = self.distribution.metadata
+ src_dir = os.path.join(
+ os.getcwd(), self.distribution.package_dir['grpc'])
+ sys.path.append(src_dir)
+ sphinx.apidoc.main([
+ '', '--force', '--full', '-H', metadata.name, '-A', metadata.author,
+ '-V', metadata.version, '-R', metadata.version,
+ '-o', os.path.join('doc', 'src'), src_dir])
+ conf_filepath = os.path.join('doc', 'src', 'conf.py')
+ with open(conf_filepath, 'a') as conf_file:
+ conf_file.write(_CONF_PY_ADDENDUM)
+ sphinx.main(['', os.path.join('doc', 'src'), os.path.join('doc', 'build')])
+
diff --git a/src/python/src/setup.cfg b/src/python/src/setup.cfg
new file mode 100644
index 0000000000..8f69613632
--- /dev/null
+++ b/src/python/src/setup.cfg
@@ -0,0 +1,2 @@
+[build_ext]
+inplace=1
diff --git a/src/python/src/setup.py b/src/python/src/setup.py
index a857ae98cc..0310a83a7b 100644
--- a/src/python/src/setup.py
+++ b/src/python/src/setup.py
@@ -30,11 +30,17 @@
"""A setup module for the GRPC Python package."""
import os
+import os.path
import sys
from distutils import core as _core
import setuptools
+# Ensure we're in the proper directory whether or not we're being used by pip.
+os.chdir(os.path.dirname(os.path.abspath(__file__)))
+
+# Break import-style to ensure we can actually find our commands module.
+import commands
# Use environment variables to determine whether or not the Cython extension
# should *use* Cython or use the generated C files. Note that this requires the
@@ -98,15 +104,27 @@ _PACKAGE_DIRECTORIES = {
'grpc.framework': 'grpc/framework',
}
+_INSTALL_REQUIRES = (
+ 'enum34==1.0.4',
+ 'futures==2.2.0',
+ 'protobuf==3.0.0a3'
+)
+
+_SETUP_REQUIRES = (
+ 'sphinx>=1.3',
+) + _INSTALL_REQUIRES
+
+_COMMAND_CLASS = {
+ 'doc': commands.SphinxDocumentation
+}
+
setuptools.setup(
name='grpcio',
version='0.10.0a0',
ext_modules=_EXTENSION_MODULES,
packages=list(_PACKAGES),
package_dir=_PACKAGE_DIRECTORIES,
- install_requires=[
- 'enum34==1.0.4',
- 'futures==2.2.0',
- 'protobuf==3.0.0a3'
- ]
+ install_requires=_INSTALL_REQUIRES,
+ setup_requires=_SETUP_REQUIRES,
+ cmdclass=_COMMAND_CLASS
)