Skip to content

Commit

Permalink
fix #226
Browse files Browse the repository at this point in the history
  • Loading branch information
mhils committed Feb 24, 2021
1 parent a664b9b commit 326146a
Show file tree
Hide file tree
Showing 7 changed files with 113 additions and 4 deletions.
2 changes: 2 additions & 0 deletions pdoc/doc.py
Expand Up @@ -242,6 +242,8 @@ def members(self) -> dict[str, Doc]:
doc = Module(obj)
else:
docstring = self._var_docstrings.get(name, "")
if not docstring and inspect.isdatadescriptor(obj):
docstring = getattr(obj, "__doc__", None) or ""
doc = Variable(
self.modulename,
qualname,
Expand Down
76 changes: 76 additions & 0 deletions test/testdata/misc.html
Expand Up @@ -22,6 +22,18 @@

<h2>API Documentation</h2>
<ul class="memberlist">
<li>
<a class="class" href="#Issue226">Issue226</a>
<ul class="memberlist">
<li>
<a class="function" href="#Issue226.__init__">Issue226</a>
</li>
<li>
<a class="variable" href="#Issue226.size">size</a>
</li>
</ul>

</li>
<li>
<a class="variable" href="#var_with_default_obj">var_with_default_obj</a>
</li>
Expand Down Expand Up @@ -195,6 +207,26 @@ <h1 class="modulename">
<span class="kn">from</span> <span class="nn">pdoc._compat</span> <span class="kn">import</span> <span class="n">cached_property</span>


<span class="c1"># https://github.com/mitmproxy/pdoc/issues/226</span>


<span class="k">class</span> <span class="nc">Descriptor</span><span class="p">:</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="n">func</span><span class="o">.</span><span class="vm">__doc__</span>

<span class="k">def</span> <span class="fm">__get__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">,</span> <span class="n">owner</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span> <span class="k">if</span> <span class="n">instance</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="s2">&quot;_x&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>

<span class="k">def</span> <span class="fm">__set__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="n">instance</span><span class="o">.</span><span class="n">_x</span> <span class="o">=</span> <span class="n">value</span>


<span class="k">class</span> <span class="nc">Issue226</span><span class="p">:</span>
<span class="nd">@Descriptor</span>
<span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;This is the size&quot;&quot;&quot;</span>


<span class="c1"># Testing function and object default values</span>

<span class="k">def</span> <span class="nf">default_func</span><span class="p">():</span>
Expand Down Expand Up @@ -421,6 +453,7 @@ <h1 class="modulename">


<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span> <span class="c1"># noqa</span>
<span class="s2">&quot;Issue226&quot;</span><span class="p">,</span>
<span class="s2">&quot;var_with_default_obj&quot;</span><span class="p">,</span>
<span class="s2">&quot;var_with_default_func&quot;</span><span class="p">,</span>
<span class="s2">&quot;func_with_defaults&quot;</span><span class="p">,</span>
Expand All @@ -444,6 +477,49 @@ <h1 class="modulename">
</details>

</section>
<section id="Issue226">
<div class="attr class">
<a class="headerlink" href="#Issue226">#&nbsp;&nbsp</a>


<span class="def">class</span>
<span class="name">Issue226</span>:
</div>

<details>
<summary>View Source</summary>
<div class="codehilite"><pre><span></span><span class="k">class</span> <span class="nc">Issue226</span><span class="p">:</span>
<span class="nd">@Descriptor</span>
<span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;This is the size&quot;&quot;&quot;</span>
</pre></div>

</details>



<div id="Issue226.__init__" class="classattr">
<div class="attr function"><a class="headerlink" href="#Issue226.__init__">#&nbsp;&nbsp</a>


<span class="name">Issue226</span><span class="signature">()</span> </div>




</div>
<div id="Issue226.size" class="classattr">
<div class="attr variable"><a class="headerlink" href="#Issue226.size">#&nbsp;&nbsp</a>

<span class="name">size</span><span class="default_value"> = &lt;<a href="#Descriptor">misc.Descriptor</a> object&gt;</span>
</div>

<div class="docstring"><p>This is the size</p>
</div>


</div>
</section>
<section id="var_with_default_obj">
<div class="attr variable"><a class="headerlink" href="#var_with_default_obj">#&nbsp;&nbsp</a>

Expand Down
21 changes: 21 additions & 0 deletions test/testdata/misc.py
Expand Up @@ -6,6 +6,26 @@
from pdoc._compat import cached_property


# https://github.com/mitmproxy/pdoc/issues/226


class Descriptor:
def __init__(self, func):
self.__doc__ = func.__doc__

def __get__(self, instance, owner):
return self if instance is None else getattr(instance, "_x", 0)

def __set__(self, instance, value):
instance._x = value


class Issue226:
@Descriptor
def size(self):
"""This is the size"""


# Testing function and object default values

def default_func():
Expand Down Expand Up @@ -232,6 +252,7 @@ def qux_decorated(self):


__all__ = [ # noqa
"Issue226",
"var_with_default_obj",
"var_with_default_func",
"func_with_defaults",
Expand Down
3 changes: 3 additions & 0 deletions test/testdata/misc.txt
@@ -1,4 +1,7 @@
<module misc
<class misc.Issue226
<method def __init__(): ...>
<var size = <misc.Descriptor object> # This is the size>>
<var var_with_default_obj = <object object> # this shouldn't rende…>
<method def var_with_default_func(): ... # inherited from misc.default_func>
<function def func_with_defaults(a=<object object>, b=<function default_func>): ... # this shouldn't rende…>
Expand Down
10 changes: 8 additions & 2 deletions test/testdata/misc_py39.html
Expand Up @@ -67,6 +67,7 @@ <h1 class="modulename">

<span class="k">class</span> <span class="nc">NamedTupleExample</span><span class="p">(</span><span class="n">NamedTuple</span><span class="p">):</span>
<span class="n">name</span><span class="p">:</span> <span class="nb">str</span>
<span class="sd">&quot;&quot;&quot;Name of or example tuple.&quot;&quot;&quot;</span>
<span class="nb">id</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span>
</pre></div>

Expand All @@ -86,6 +87,7 @@ <h1 class="modulename">
<summary>View Source</summary>
<div class="codehilite"><pre><span></span><span class="k">class</span> <span class="nc">NamedTupleExample</span><span class="p">(</span><span class="n">NamedTuple</span><span class="p">):</span>
<span class="n">name</span><span class="p">:</span> <span class="nb">str</span>
<span class="sd">&quot;&quot;&quot;Name of or example tuple.&quot;&quot;&quot;</span>
<span class="nb">id</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span>
</pre></div>

Expand All @@ -101,7 +103,9 @@ <h1 class="modulename">
<span class="name">name</span><span class="annotation">: str</span>
</div>


<div class="docstring"><p>Name of or example tuple.</p>
</div>


</div>
<div id="NamedTupleExample.id" class="classattr">
Expand All @@ -110,7 +114,9 @@ <h1 class="modulename">
<span class="name">id</span><span class="annotation">: int</span>
</div>


<div class="docstring"><p>Alias for field number 1</p>
</div>


</div>
<div class="inherited">
Expand Down
1 change: 1 addition & 0 deletions test/testdata/misc_py39.py
Expand Up @@ -11,4 +11,5 @@

class NamedTupleExample(NamedTuple):
name: str
"""Name of or example tuple."""
id: int = 3
4 changes: 2 additions & 2 deletions test/testdata/misc_py39.txt
@@ -1,6 +1,6 @@
<module misc_py39 # Testing features tha…
<class misc_py39.NamedTupleExample # NamedTupleExample(na…
<var name: str>
<var id: int>
<var name: str # Name of or example t…>
<var id: int # Alias for field numb…>
<method def index(self, value, start=0, stop=9223372036854775807, /): ... # inherited from builtins.tuple.index, Return first index o…>
<method def count(self, value, /): ... # inherited from builtins.tuple.count, Return number of occ…>>>

0 comments on commit 326146a

Please sign in to comment.