%namespace name="doc" file="_doc.tmpl"/>
<%
ancestors = []
if isinstance(node, ast.Class):
ancestors = formatter.get_inheritable_types(node)
fields = getattr(node, 'fields', [])
extra_fields = [getattr(f.anonymous_node, 'fields', []) for f in fields
if f.anonymous_node is not None]
extra_fields = [field for sublist in extra_fields for field in sublist]
non_private_fields = [f for f in fields + extra_fields
if not formatter.is_private_field(node, f)]
def get_ancestor_counts(*kinds):
counts = {}
for a in ancestors:
count = 0
for kind in kinds:
if kind == 'fields':
count += len(non_private_fields)
else:
count += len(getattr(a, kind, []))
if count:
counts[a] = count
return counts
def should_render(*kinds):
has_nonempty = False
for kind in kinds:
if kind == 'fields':
if non_private_fields:
has_nonempty = True
elif getattr(node, kind, []):
has_nonempty = True
return has_nonempty or get_ancestor_counts(*kinds)
%>
<%def name="inherited(*kinds)">
<% counts = get_ancestor_counts(*kinds) %>
% if counts:
<%
links = ', '.join(['{} ({})'.format(formatter.format_xref(a), count)
for a, count in counts.items()])
%>
${formatter.format(node, '**Inherited:** ' + links)}
% endif
%def>
<%def name="format_function_cell(m)">
${formatter.format_function_name(m)}(${formatter.format_in_parameters(m)})
|
%def>
% if should_render('static_methods', 'constructors', 'methods'):
Methods
${inherited('static_methods', 'constructors', 'methods')}
<%
static_methods = getattr(node, 'static_methods', []) + getattr(node, 'constructors', [])
methods = static_methods + getattr(node, 'methods', [])
%>
% if methods:
% for m in methods:
<%doc:introspectable node="${m}">
% if m in static_methods:
static |
% else:
|
% endif
${format_function_cell(m)}
%doc:introspectable>
% endfor
% endif
% endif
% if should_render('virtual_methods'):
Virtual methods
${inherited('virtual_methods')}
% if getattr(node, 'virtual_methods', []):
% for m in node.virtual_methods:
<%doc:introspectable node="${m}">
${format_function_cell(m)}
%doc:introspectable>
% endfor
% endif
% endif
% if should_render('properties'):
Properties
${inherited('properties')}
% if getattr(node, 'properties', []):
Name |
Type |
Flags |
% for p in node.properties:
<%doc:introspectable node="${p}">
${p.name}
|
${formatter.format_type(p.type)} |
${formatter.format_property_flags(p, abbrev=True)} |
%doc:introspectable>
% endfor
% endif
% endif
% if should_render('signals'):
Signals
${inherited('signals')}
% if getattr(node, 'signals', []):
% for s in node.signals:
<%doc:introspectable node="${s}">
${s.name}(${formatter.format_signal_parameters(s)})
|
%doc:introspectable>
% endfor
% endif
% endif
% if should_render('fields'):
Fields
${inherited('fields')}
% if non_private_fields:
Name |
Type |
Access |
Description |
% for f in non_private_fields:
<%doc:introspectable node="${f}">
${f.name}
|
${formatter.format_type(f.type)} |
${formatter.format_property_flags(f, abbrev=True)} |
## Fields almost never warrant a detailed entry, we'll just make this
## the entry to be indexed by DevDocs
% if f.doc:
${formatter.format_inline(node, f.doc)}
% endif
|
%doc:introspectable>
% endfor
% endif
% endif