conf.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. # conf.py/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro).
  2. # This copyright was auto-generated on Wed, Sep 1, 2021 5:05:41 PM
  3. from __future__ import annotations
  4. from datetime import date
  5. import sys
  6. import sphinx
  7. from open_gopro import WirelessGoPro
  8. from open_gopro.network.wifi.controller import SsidState, WifiController
  9. # Workaround for https://github.com/sphinx-doc/sphinx/issues/13178 in Python 3.13
  10. if sys.version_info[:2] >= (3, 13) and sphinx.version_info[:2] < (8, 2):
  11. import pathlib
  12. from sphinx.util.typing import _INVALID_BUILTIN_CLASSES
  13. _INVALID_BUILTIN_CLASSES[pathlib.Path] = "pathlib.Path" # type: ignore
  14. class MockWifiController(WifiController):
  15. def connect(self, ssid: str, password: str, timeout: float = 15) -> bool:
  16. return True
  17. def disconnect(self) -> bool:
  18. return True
  19. def current(self) -> tuple[str | None, SsidState]:
  20. return ("mocked", SsidState.CONNECTED)
  21. def available_interfaces(self) -> list[str]:
  22. return []
  23. def power(self, power: bool) -> bool:
  24. return True
  25. @property
  26. def is_on(self) -> bool:
  27. return True
  28. gopro = WirelessGoPro(enable_wifi=False, wifi_adapter=MockWifiController)
  29. project = "Open GoPro Python SDK"
  30. copyright = f"{date.today().year}, GoPro Inc."
  31. author = "Tim Camise"
  32. source_suffix = ".rst"
  33. master_doc = "index"
  34. pygments_style = "sphinx"
  35. html_static_path = ["_static"]
  36. extensions = [
  37. "sphinx.ext.autodoc",
  38. "sphinx.ext.napoleon",
  39. "sphinx_rtd_theme",
  40. "sphinx.ext.autosectionlabel",
  41. "sphinx.ext.graphviz",
  42. "sphinx.ext.inheritance_diagram",
  43. "sphinxcontrib.autodoc_pydantic",
  44. "sphinx.ext.intersphinx",
  45. ]
  46. html_theme = "sphinx_rtd_theme"
  47. html_context = {
  48. "display_github": True,
  49. }
  50. add_module_names = False
  51. inheritance_graph_attrs = dict(rankdir="BT", center="true")
  52. inheritance_node_attrs = dict(color="dodgerblue1", style="filled")
  53. autodoc_default_options = {
  54. "members": True,
  55. }
  56. # https://autodoc-pydantic.readthedocs.io/en/stable/users/configuration.html
  57. autodoc_pydantic_model_show_json = False
  58. autodoc_pydantic_settings_show_json = False
  59. intersphinx_mapping = {
  60. "python": ("https://docs.python.org/3", None),
  61. }
  62. # Extract version set from pyproject.toml
  63. import importlib.metadata as importlib_metadata
  64. version = importlib_metadata.version("open_gopro")
  65. nitpicky = True
  66. TYPE_ALIASES = {
  67. "CameraState": "open_gopro.models.types.CameraState",
  68. "UpdateCb": "open_gopro.models.types.UpdateCb",
  69. "UpdateType": "open_gopro.models.types.UpdateType",
  70. "JsonDict": "open_gopro.JsonDict",
  71. "ResponseType": "open_gopro.models.types.ResponseType",
  72. "Protobuf": "open_gopro.models.types.Protobuf",
  73. "IdType": "open_gopro.models.types.IdType",
  74. "StreamOptions": "open_gopro.models.types.StreamOptions",
  75. "SyncAction": "open_gopro.observable.SyncAction",
  76. "AsyncAction": "open_gopro.observable.AsyncAction",
  77. "SyncFilter": "open_gopro.observable.SyncFilter",
  78. "AsyncFilter": "open_gopro.observable.AsyncFilter",
  79. }
  80. nitpick_ignore = [
  81. ("py:class", "T"),
  82. ("py:class", "O"),
  83. ("py:class", "T_I"),
  84. ("py:class", "I"),
  85. ("py:class", "T_co"),
  86. ("py:class", "ExceptionHandler"),
  87. ("py:class", "abc.ABC"),
  88. ("py:class", "InitVar"),
  89. ("py:class", "Result"),
  90. ("py:class", "ResultE"),
  91. ("py:class", "returns.result.Result"),
  92. ("py:class", "TracebackType"),
  93. ("py:class", "UUID"),
  94. ("py:class", "Path"),
  95. ("py:class", "JsonDict"),
  96. ("py:class", "SyncAction"),
  97. ("py:class", "AsyncAction"),
  98. ("py:class", "SyncFilter"),
  99. ("py:class", "AsyncFilter"),
  100. ("py:class", "ValueType"),
  101. ]
  102. nitpick_ignore_regex = [
  103. (r"py:class", r".*proto\..+"),
  104. (r"py:class", r".*_pb2\..+"),
  105. (r".*", r".*construct.*"),
  106. (r"py:class", r".*TinyDB.*"),
  107. (r"py:class", r".*asyncio.*"),
  108. (r"py:class", r".*WirelessApi*"),
  109. # Generic Types that are pointless to document
  110. (r"py:class", r".*\.T"),
  111. (r"py:class", r".*\.T_I"),
  112. (r"py:class", r".*\.O"),
  113. (r"py:class", r".*\.I"),
  114. (r"py:obj", r".*\.T_I"),
  115. (r"py:obj", r".*\.O"),
  116. (r"py:obj", r".*\.I"),
  117. (r"py:obj", r".*\.T"),
  118. (r"py:class", r".*\.T_co"),
  119. (r"py:class", r".*BleHandle"),
  120. (r"py:class", r".*BleDevice"),
  121. (r"py:class", r".*CommunicatorType"),
  122. (r"py:class", r".*NotiHandlerType"),
  123. (r"py:class", r".*DisconnectHandlerType"),
  124. (r"py:obj", r".*CommunicatorType"),
  125. (r"py:class", r".*QueryParserType"),
  126. (r"py:class", r".*ValueType"),
  127. (r"py:obj", r".*communicator_interface.MessageType"),
  128. (r"py:class", r".*dataclasses.*"),
  129. (r"py:class", r".*BaseGoProCommunicator._CompositeRegisterType.*"),
  130. ]
  131. def autodoc_skip_member_handler(app, what, name, *_):
  132. for skip in ("internal", "deprecated"):
  133. if skip in name.lower():
  134. return name
  135. def resolve_type_aliases(app, env, node, contnode):
  136. """Resolve :class: references to our type aliases as :attr: instead."""
  137. try:
  138. if node["refdomain"] == "py" and (target := TYPE_ALIASES.get(node["reftarget"])):
  139. # print(f"updating {node['reftarget']}")
  140. return app.env.get_domain("py").resolve_any_xref(
  141. env,
  142. node["refdoc"],
  143. app.builder,
  144. target,
  145. node,
  146. contnode,
  147. )[
  148. 0
  149. ][1]
  150. except IndexError:
  151. # print("Error")
  152. return None
  153. def setup(app):
  154. app.connect("autodoc-skip-member", autodoc_skip_member_handler)
  155. app.connect("missing-reference", resolve_type_aliases)