aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBu Sun Kim <8822365+busunkim96@users.noreply.github.com>2019-06-25 12:44:16 -0700
committerGitHub <noreply@github.com>2019-06-25 12:44:16 -0700
commitbee4b07c6f53891ccc3d7298f8fd3a0cf25dc05a (patch)
tree2a2c1683f370c48ea05daa34e7b2a6710aa45458
parent6089ed54c435ffc94278183b0d75d680a2313471 (diff)
downloadpython-api-core-bee4b07c6f53891ccc3d7298f8fd3a0cf25dc05a.tar.gz
All: Add docs job to publish to googleapis.dev. (#8464)
-rw-r--r--.repo-metadata.json9
-rw-r--r--docs/auth.rst301
l---------docs/changelog.md1
-rw-r--r--docs/client_info.rst11
-rw-r--r--docs/conf.py366
-rw-r--r--docs/exceptions.rst6
-rw-r--r--docs/helpers.rst26
-rw-r--r--docs/iam.rst7
-rw-r--r--docs/index.rst28
-rw-r--r--docs/operation.rst6
-rw-r--r--docs/operations_client.rst6
-rw-r--r--docs/page_iterator.rst6
-rw-r--r--docs/path_template.rst6
-rw-r--r--docs/retry.rst6
-rw-r--r--docs/timeout.rst6
-rw-r--r--noxfile.py24
16 files changed, 815 insertions, 0 deletions
diff --git a/.repo-metadata.json b/.repo-metadata.json
new file mode 100644
index 0000000..6a5f3f5
--- /dev/null
+++ b/.repo-metadata.json
@@ -0,0 +1,9 @@
+{
+ "name": "google-api-core",
+ "name_pretty": "Google API client core library",
+ "client_documentation": "https://googleapis.dev/python/google-api-core/latest",
+ "release_level": "ga",
+ "language": "python",
+ "repo": "googleapis/google-cloud-python",
+ "distribution_name": "google-api-core"
+} \ No newline at end of file
diff --git a/docs/auth.rst b/docs/auth.rst
new file mode 100644
index 0000000..f309a3a
--- /dev/null
+++ b/docs/auth.rst
@@ -0,0 +1,301 @@
+Authentication
+**************
+
+.. _Overview:
+
+Overview
+========
+
+* **If you're running in Compute Engine or App Engine**,
+ authentication should "just work".
+
+* **If you're developing locally**,
+ the easiest way to authenticate is using the `Google Cloud SDK`_:
+
+ .. code-block:: bash
+
+ $ gcloud auth application-default login
+
+ Note that this command generates credentials for client libraries. To authenticate the CLI itself, use:
+
+ .. code-block:: bash
+
+ $ gcloud auth login
+
+ Previously, ``gcloud auth login`` was used for both use cases. If
+ your ``gcloud`` installation does not support the new command,
+ please update it:
+
+ .. code-block:: bash
+
+ $ gcloud components update
+
+.. _Google Cloud SDK: http://cloud.google.com/sdk
+
+
+* **If you're running your application elsewhere**,
+ you should download a `service account`_ JSON keyfile
+ and point to it using an environment variable:
+
+ .. code-block:: bash
+
+ $ export GOOGLE_APPLICATION_CREDENTIALS="/path/to/keyfile.json"
+
+.. _service account: https://cloud.google.com/storage/docs/authentication#generating-a-private-key
+
+Client-Provided Authentication
+==============================
+
+Every package uses a :class:`Client <google.cloud.client.Client>`
+as a base for interacting with an API.
+For example:
+
+.. code-block:: python
+
+ from google.cloud import datastore
+ client = datastore.Client()
+
+Passing no arguments at all will "just work" if you've followed the
+instructions in the :ref:`Overview`.
+The credentials are inferred from your local environment by using
+Google `Application Default Credentials`_.
+
+.. _Application Default Credentials: https://developers.google.com/identity/protocols/application-default-credentials
+
+.. _Precedence:
+
+Credential Discovery Precedence
+-------------------------------
+
+When loading the `Application Default Credentials`_,
+the library will check for credentials in your environment by following the
+precedence outlined by :func:`google.auth.default`.
+
+Explicit Credentials
+====================
+
+The Application Default Credentials discussed above can be useful
+if your code needs to run in many different environments or
+if you just don't want authentication to be a focus in your code.
+
+However, you may want to be explicit because
+
+* your code will only run in one place
+* you may have code which needs to be run as a specific service account
+ every time (rather than with the locally inferred credentials)
+* you may want to use two separate accounts to simultaneously access data
+ from different projects
+
+In these situations, you can create an explicit
+:class:`~google.auth.credentials.Credentials` object suited to your environment.
+After creation, you can pass it directly to a :class:`Client <google.cloud.client.Client>`:
+
+.. code:: python
+
+ client = Client(credentials=credentials)
+
+.. tip::
+ To create a credentials object, follow the `google-auth-guide`_.
+
+.. _google-auth-guide: https://google-auth.readthedocs.io/en/latest/user-guide.html#service-account-private-key-files
+
+
+Google App Engine Environment
+-----------------------------
+
+To create
+:class:`credentials <google.auth.app_engine.Credentials>`
+just for Google App Engine:
+
+.. code:: python
+
+ from google.auth import app_engine
+ credentials = app_engine.Credentials()
+
+Google Compute Engine Environment
+---------------------------------
+
+To create
+:class:`credentials <google.auth.compute_engine.Credentials>`
+just for Google Compute Engine:
+
+.. code:: python
+
+ from google.auth import compute_engine
+ credentials = compute_engine.Credentials()
+
+Service Accounts
+----------------
+
+A `service account`_ is stored in a JSON keyfile.
+
+The
+:meth:`from_service_account_json() <google.cloud.client.Client.from_service_account_json>`
+factory can be used to create a :class:`Client <google.cloud.client.Client>` with
+service account credentials.
+
+For example, with a JSON keyfile:
+
+.. code:: python
+
+ client = Client.from_service_account_json('/path/to/keyfile.json')
+
+.. tip::
+
+ Previously the Google Cloud Console would issue a PKCS12/P12 key for your
+ service account. This library does not support that key format. You can
+ generate a new JSON key for the same service account from the console.
+
+User Accounts (3-legged OAuth 2.0) with a refresh token
+-------------------------------------------------------
+
+The majority of cases are intended to authenticate machines or
+workers rather than actual user accounts. However, it's also
+possible to call Google Cloud APIs with a user account via
+`OAuth 2.0`_.
+
+.. _OAuth 2.0: https://developers.google.com/identity/protocols/OAuth2
+
+.. tip::
+
+ A production application should **use a service account**,
+ but you may wish to use your own personal user account when first
+ getting started with the ``google-cloud-python`` library.
+
+The simplest way to use credentials from a user account is via
+Application Default Credentials using ``gcloud auth login``
+(as mentioned above) and :func:`google.auth.default`:
+
+.. code:: python
+
+ import google.auth
+
+ credentials, project = google.auth.default()
+
+This will still follow the :ref:`precedence <Precedence>`
+described above,
+so be sure none of the other possible environments conflict
+with your user provided credentials.
+
+Advanced users of `oauth2client`_ can also use custom flows to
+create credentials using `client secrets`_ or using a
+`webserver flow`_.
+After creation, :class:`Credentials <oauth2client.client.Credentials>`
+can be serialized with
+:meth:`to_json() <oauth2client.client.Credentials.to_json>`
+and stored in a file and then and deserialized with
+:meth:`from_json() <oauth2client.client.Credentials.from_json>`. In order
+to use ``oauth2client``'s credentials with this library, you'll need to
+`convert them`_.
+
+.. _oauth2client: https://github.com/Google/oauth2client.
+.. _client secrets: https://developers.google.com/api-client-library/python/guide/aaa_oauth#flow_from_clientsecrets
+.. _webserver flow: https://developers.google.com/api-client-library/python/guide/aaa_oauth#OAuth2WebServerFlow
+.. _convert them: http://google-auth.readthedocs.io/en/stable/user-guide.html#user-credentials
+
+Troubleshooting
+===============
+
+Setting up a Service Account
+----------------------------
+
+If your application is not running on Google Compute Engine,
+you need a `Google Developers Service Account`_.
+
+#. Visit the `Google Developers Console`_.
+
+#. Create a new project or click on an existing project.
+
+#. Navigate to **APIs & auth** > **APIs** and enable the APIs
+ that your application requires.
+
+ .. raw:: html
+
+ <img src="https://raw.githubusercontent.com/GoogleCloudPlatform/google-cloud-common/master/authentication/enable-apis.png"/>
+
+ .. note::
+
+ You may need to enable billing in order to use these services.
+
+ * **BigQuery**
+
+ * BigQuery API
+
+ * **Datastore**
+
+ * Google Cloud Datastore API
+
+ * **Pub/Sub**
+
+ * Google Cloud Pub/Sub
+
+ * **Storage**
+
+ * Google Cloud Storage
+ * Google Cloud Storage JSON API
+
+#. Navigate to **APIs & auth** > **Credentials**.
+
+ You should see a screen like one of the following:
+
+ .. raw:: html
+
+ <img src="https://raw.githubusercontent.com/GoogleCloudPlatform/google-cloud-common/master/authentication/create-new-service-account.png">
+
+ .. raw:: html
+
+ <img src="https://raw.githubusercontent.com/GoogleCloudPlatform/google-cloud-common/master/authentication/create-new-service-account-existing-keys.png">
+
+ Find the "Add credentials" drop down and select "Service account" to be
+ guided through downloading a new JSON keyfile.
+
+ If you want to re-use an existing service account,
+ you can easily generate a new keyfile.
+ Just select the account you wish to re-use,
+ and click **Generate new JSON key**:
+
+ .. raw:: html
+
+ <img src="https://raw.githubusercontent.com/GoogleCloudPlatform/google-cloud-common/master/authentication/reuse-service-account.png">
+
+.. _Google Developers Console: https://console.developers.google.com/project
+.. _Google Developers Service Account: https://developers.google.com/accounts/docs/OAuth2ServiceAccount
+
+Using Google Compute Engine
+---------------------------
+
+If your code is running on Google Compute Engine,
+using the inferred Google `Application Default Credentials`_
+will be sufficient for retrieving credentials.
+
+However, by default your credentials may not grant you
+access to the services you intend to use.
+Be sure when you `set up the GCE instance`_,
+you add the correct scopes for the APIs you want to access:
+
+* **All APIs**
+
+ * ``https://www.googleapis.com/auth/cloud-platform``
+ * ``https://www.googleapis.com/auth/cloud-platform.read-only``
+
+* **BigQuery**
+
+ * ``https://www.googleapis.com/auth/bigquery``
+ * ``https://www.googleapis.com/auth/bigquery.insertdata``
+
+* **Datastore**
+
+ * ``https://www.googleapis.com/auth/datastore``
+ * ``https://www.googleapis.com/auth/userinfo.email``
+
+* **Pub/Sub**
+
+ * ``https://www.googleapis.com/auth/pubsub``
+
+* **Storage**
+
+ * ``https://www.googleapis.com/auth/devstorage.full_control``
+ * ``https://www.googleapis.com/auth/devstorage.read_only``
+ * ``https://www.googleapis.com/auth/devstorage.read_write``
+
+.. _set up the GCE instance: https://cloud.google.com/compute/docs/authentication#using
diff --git a/docs/changelog.md b/docs/changelog.md
new file mode 120000
index 0000000..04c99a5
--- /dev/null
+++ b/docs/changelog.md
@@ -0,0 +1 @@
+../CHANGELOG.md \ No newline at end of file
diff --git a/docs/client_info.rst b/docs/client_info.rst
new file mode 100644
index 0000000..e976b18
--- /dev/null
+++ b/docs/client_info.rst
@@ -0,0 +1,11 @@
+Client Information Helpers
+==========================
+
+.. automodule:: google.api_core.client_info
+ :members:
+ :show-inheritance:
+
+.. automodule:: google.api_core.gapic_v1.client_info
+ :members:
+ :show-inheritance:
+
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644
index 0000000..f1f3a2c
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,366 @@
+# -*- coding: utf-8 -*-
+#
+# google-api-core documentation build configuration file
+#
+# This file is execfile()d with the current directory set to its
+# containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys
+import os
+import shlex
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+sys.path.insert(0, os.path.abspath(".."))
+
+__version__ = "0.1.0"
+
+# -- General configuration ------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+needs_sphinx = "1.6.3"
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+ "sphinx.ext.autodoc",
+ "sphinx.ext.autosummary",
+ "sphinx.ext.intersphinx",
+ "sphinx.ext.coverage",
+ "sphinx.ext.napoleon",
+ "sphinx.ext.todo",
+ "sphinx.ext.viewcode",
+]
+
+# autodoc/autosummary flags
+autoclass_content = "both"
+autodoc_default_flags = ["members"]
+autosummary_generate = True
+
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ["_templates"]
+
+# Allow markdown includes (so releases.md can include CHANGLEOG.md)
+# http://www.sphinx-doc.org/en/master/markdown.html
+source_parsers = {".md": "recommonmark.parser.CommonMarkParser"}
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+# source_suffix = ['.rst', '.md']
+source_suffix = [".rst", ".md"]
+
+# The encoding of source files.
+# source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = "index"
+
+# General information about the project.
+project = u"google-api-core"
+copyright = u"2017, Google"
+author = u"Google APIs"
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The full version, including alpha/beta/rc tags.
+release = __version__
+# The short X.Y version.
+version = ".".join(release.split(".")[0:2])
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+# today = ''
+# Else, today_fmt is used as the format for a strftime call.
+# today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ["_build"]
+
+# The reST default role (used for this markup: `text`) to use for all
+# documents.
+# default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+# add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+# add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+# show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = "sphinx"
+
+# A list of ignored prefixes for module index sorting.
+# modindex_common_prefix = []
+
+# If true, keep warnings as "system message" paragraphs in the built documents.
+# keep_warnings = False
+
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = True
+
+
+# -- Options for HTML output ----------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+html_theme = "alabaster"
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further. For a list of options available for each theme, see the
+# documentation.
+html_theme_options = {
+ "description": "Google Cloud Client Libraries for Python",
+ "github_user": "googleapis",
+ "github_repo": "google-cloud-python",
+ "github_banner": True,
+ "font_family": "'Roboto', Georgia, sans",
+ "head_font_family": "'Roboto', Georgia, serif",
+ "code_font_family": "'Roboto Mono', 'Consolas', monospace",
+}
+
+# Add any paths that contain custom themes here, relative to this directory.
+# html_theme_path = []
+
+# The name for this set of Sphinx documents. If None, it defaults to
+# "<project> v<release> documentation".
+# html_title = None
+
+# A shorter title for the navigation bar. Default is the same as html_title.
+# html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+# html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+# html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+# html_static_path = []
+
+# Add any extra paths that contain custom files (such as robots.txt or
+# .htaccess) here, relative to this directory. These files are copied
+# directly to the root of the documentation.
+# html_extra_path = []
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+# html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+# html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+# html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+# html_additional_pages = {}
+
+# If false, no module index is generated.
+# html_domain_indices = True
+
+# If false, no index is generated.
+# html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+# html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+# html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+# html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+# html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it. The value of this option must be the
+# base URL from which the finished HTML is served.
+# html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+# html_file_suffix = None
+
+# Language to be used for generating the HTML full-text search index.
+# Sphinx supports the following languages:
+# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
+# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
+# html_search_language = 'en'
+
+# A dictionary with options for the search language support, empty by default.
+# Now only 'ja' uses this config value
+# html_search_options = {'type': 'default'}
+
+# The name of a javascript file (relative to the configuration directory) that
+# implements a search results scorer. If empty, the default will be used.
+# html_search_scorer = 'scorer.js'
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = "google-api-core-doc"
+
+# -- Options for warnings ------------------------------------------------------
+
+
+suppress_warnings = [
+ # Temporarily suppress this to avoid "more than one target found for
+ # cross-reference" warning, which are intractable for us to avoid while in
+ # a mono-repo.
+ # See https://github.com/sphinx-doc/sphinx/blob
+ # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843
+ "ref.python"
+]
+
+# -- Options for LaTeX output ---------------------------------------------
+
+latex_elements = {
+ # The paper size ('letterpaper' or 'a4paper').
+ #'papersize': 'letterpaper',
+ # The font size ('10pt', '11pt' or '12pt').
+ #'pointsize': '10pt',
+ # Additional stuff for the LaTeX preamble.
+ #'preamble': '',
+ # Latex figure (float) alignment
+ #'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+# author, documentclass [howto, manual, or own class]).
+latex_documents = [
+ (
+ master_doc,
+ "google-api-core.tex",
+ u"google-api-core Documentation",
+ author,
+ "manual",
+ )
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+# latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+# latex_use_parts = False
+
+# If true, show page references after internal links.
+# latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+# latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+# latex_appendices = []
+
+# If false, no module index is generated.
+# latex_domain_indices = True
+
+
+# -- Options for manual page output ---------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+ (
+ master_doc,
+ "google-api-core",
+ u"google-api-core Documentation",
+ [author],
+ 1,
+ )
+]
+
+# If true, show URL addresses after external links.
+# man_show_urls = False
+
+
+# -- Options for Texinfo output -------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+# dir menu entry, description, category)
+texinfo_documents = [
+ (
+ master_doc,
+ "google-api-core",
+ u"google-api-core Documentation",
+ author,
+ "google-api-core",
+ "GAPIC library for the {metadata.shortName} v1beta1 service",
+ "APIs",
+ )
+]
+
+# Documents to append as an appendix to all manuals.
+# texinfo_appendices = []
+
+# If false, no module index is generated.
+# texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+# texinfo_show_urls = 'footnote'
+
+# If true, do not generate a @detailmenu in the "Top" node's menu.
+# texinfo_no_detailmenu = False
+
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {
+ "python": ("http://python.readthedocs.org/en/latest/", None),
+ "gax": ("https://gax-python.readthedocs.org/en/latest/", None),
+ "google-auth": ("https://google-auth.readthedocs.io/en/stable", None),
+ "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None),
+ "google.api_core": (
+ "https://googleapis.github.io/google-cloud-python/latest",
+ None,
+ ),
+ "grpc": ("https://grpc.io/grpc/python/", None),
+ "requests": ("http://docs.python-requests.org/en/master/", None),
+ "fastavro": ("https://fastavro.readthedocs.io/en/stable/", None),
+ "pandas": ("https://pandas.pydata.org/pandas-docs/stable/", None),
+}
+
+
+# Napoleon settings
+napoleon_google_docstring = True
+napoleon_numpy_docstring = True
+napoleon_include_private_with_doc = False
+napoleon_include_special_with_doc = True
+napoleon_use_admonition_for_examples = False
+napoleon_use_admonition_for_notes = False
+napoleon_use_admonition_for_references = False
+napoleon_use_ivar = False
+napoleon_use_param = True
+napoleon_use_rtype = True
diff --git a/docs/exceptions.rst b/docs/exceptions.rst
new file mode 100644
index 0000000..d671f4e
--- /dev/null
+++ b/docs/exceptions.rst
@@ -0,0 +1,6 @@
+Exceptions
+==========
+
+.. automodule:: google.api_core.exceptions
+ :members:
+ :show-inheritance:
diff --git a/docs/helpers.rst b/docs/helpers.rst
new file mode 100644
index 0000000..6f72df9
--- /dev/null
+++ b/docs/helpers.rst
@@ -0,0 +1,26 @@
+Helpers
+=======
+
+
+General Helpers
+---------------
+
+.. automodule:: google.api_core.general_helpers
+ :members:
+ :show-inheritance:
+
+
+Datetime Helpers
+----------------
+
+.. automodule:: google.api_core.datetime_helpers
+ :members:
+ :show-inheritance:
+
+
+gRPC Helpers
+------------
+
+.. automodule:: google.api_core.grpc_helpers
+ :members:
+ :show-inheritance:
diff --git a/docs/iam.rst b/docs/iam.rst
new file mode 100644
index 0000000..bb80ae3
--- /dev/null
+++ b/docs/iam.rst
@@ -0,0 +1,7 @@
+Identity and Access Management
+==============================
+
+.. automodule:: google.api_core.iam
+ :members:
+ :show-inheritance:
+ :member-order: bysource
diff --git a/docs/index.rst b/docs/index.rst
new file mode 100644
index 0000000..112bb30
--- /dev/null
+++ b/docs/index.rst
@@ -0,0 +1,28 @@
+The ``google-cloud-core`` package contains helpers common to all
+``google-cloud-*`` packages. In an attempt to reach a stable API,
+much of the functionality has been split out into this package,
+``google-api-core``.
+
+Core
+====
+
+.. toctree::
+ auth
+ client_info
+ exceptions
+ helpers
+ iam
+ operation
+ operations_client
+ page_iterator
+ path_template
+ retry
+ timeout
+
+Changelog
+~~~~~~~~~
+
+.. toctree::
+ :maxdepth: 2
+
+ changelog
diff --git a/docs/operation.rst b/docs/operation.rst
new file mode 100644
index 0000000..c5e6766
--- /dev/null
+++ b/docs/operation.rst
@@ -0,0 +1,6 @@
+Long-Running Operations
+=======================
+
+.. automodule:: google.api_core.operation
+ :members:
+ :show-inheritance:
diff --git a/docs/operations_client.rst b/docs/operations_client.rst
new file mode 100644
index 0000000..be466d3
--- /dev/null
+++ b/docs/operations_client.rst
@@ -0,0 +1,6 @@
+Long-Running Operations Client
+==============================
+
+.. automodule:: google.api_core.operations_v1
+ :members:
+ :show-inheritance:
diff --git a/docs/page_iterator.rst b/docs/page_iterator.rst
new file mode 100644
index 0000000..28842da
--- /dev/null
+++ b/docs/page_iterator.rst
@@ -0,0 +1,6 @@
+Page Iterators
+==============
+
+.. automodule:: google.api_core.page_iterator
+ :members:
+ :show-inheritance:
diff --git a/docs/path_template.rst b/docs/path_template.rst
new file mode 100644
index 0000000..220779e
--- /dev/null
+++ b/docs/path_template.rst
@@ -0,0 +1,6 @@
+Path Templates
+==============
+
+.. automodule:: google.api_core.path_template
+ :members:
+ :show-inheritance:
diff --git a/docs/retry.rst b/docs/retry.rst
new file mode 100644
index 0000000..23a7d70
--- /dev/null
+++ b/docs/retry.rst
@@ -0,0 +1,6 @@
+Retry
+=====
+
+.. automodule:: google.api_core.retry
+ :members:
+ :show-inheritance:
diff --git a/docs/timeout.rst b/docs/timeout.rst
new file mode 100644
index 0000000..943d425
--- /dev/null
+++ b/docs/timeout.rst
@@ -0,0 +1,6 @@
+Timeout
+=======
+
+.. automodule:: google.api_core.timeout
+ :members:
+ :show-inheritance:
diff --git a/noxfile.py b/noxfile.py
index 06e78c1..5e70db2 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -14,6 +14,7 @@
from __future__ import absolute_import
import os
+import shutil
# https://github.com/google/importlab/issues/25
import nox # pytype: disable=import-error
@@ -103,3 +104,26 @@ def cover(session):
session.install("coverage", "pytest-cov")
session.run("coverage", "report", "--show-missing", "--fail-under=100")
session.run("coverage", "erase")
+
+
+@nox.session(python="3.7")
+def docs(session):
+ """Build the docs for this library."""
+
+ session.install(".", "grpcio >= 1.8.2", "grpcio-gcp >= 0.2.2")
+ session.install("-e", ".")
+ session.install("sphinx", "alabaster", "recommonmark")
+
+ shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True)
+ session.run(
+ "sphinx-build",
+ "-W", # warnings as errors
+ "-T", # show full traceback on exception
+ "-N", # no colors
+ "-b",
+ "html",
+ "-d",
+ os.path.join("docs", "_build", "doctrees", ""),
+ os.path.join("docs", ""),
+ os.path.join("docs", "_build", "html", ""),
+ ) \ No newline at end of file