1
0
mirror of https://github.com/scrapy/scrapy.git synced 2025-02-23 21:04:20 +00:00

fixes referencing, and list only settings not documented in current document

This commit is contained in:
Elias Dorneles 2015-05-09 16:15:06 -03:00
parent d1053d2a2f
commit 5753e498bf
2 changed files with 40 additions and 20 deletions

View File

@ -13,8 +13,24 @@ class SettingsListDirective(Directive):
return [settingslist_node('')]
def is_setting_node(node):
return node.tagname == 'pending_xref' and node['reftype'] == 'setting'
def is_setting_index(node):
if node.tagname == 'index':
# index entries for setting directives look like:
# [(u'pair', u'SETTING_NAME; setting', u'std:setting-SETTING_NAME', '')]
entry_type, info, refid, _ = node['entries'][0]
return entry_type == 'pair' and info.endswith('; setting')
return False
def get_setting_target(node):
# target nodes are placed next to the node in the doc tree
return node.parent[node.parent.index(node) + 1]
def get_setting_name_and_refid(node):
"""Extract setting name from directive index node"""
entry_type, info, refid, _ = node['entries'][0]
return info.replace('; setting', ''), refid
def collect_scrapy_settings_refs(app, doctree):
@ -23,29 +39,24 @@ def collect_scrapy_settings_refs(app, doctree):
if not hasattr(env, 'scrapy_all_settings'):
env.scrapy_all_settings = []
for node in doctree.traverse(is_setting_node):
try:
targetnode = node.parent[node.parent.index(node) - 1]
if not isinstance(targetnode, nodes.target):
raise IndexError
except IndexError:
targetid = "setting-%d" % env.new_serialno('setting')
targetnode = nodes.target('', '', ids=[targetid])
node.replace_self([targetnode, node])
for node in doctree.traverse(is_setting_index):
targetnode = get_setting_target(node)
assert isinstance(targetnode, nodes.target), "Next node is not a target"
setting_name, refid = get_setting_name_and_refid(node)
env.scrapy_all_settings.append({
'docname': env.docname,
'lineno': node.line,
'node': node.deepcopy(),
'target': targetnode,
'setting_name': setting_name,
'refid': refid,
})
def make_setting_element(setting_data, app, fromdocname):
text = nodes.Text(setting_data['node'].astext())
targetid = '' # TODO: resolve to a proper id
refnode = make_refnode(app.builder, fromdocname,
setting_data['docname'], targetid, text)
todocname=setting_data['docname'],
targetid=setting_data['refid'],
child=nodes.Text(setting_data['setting_name']))
p = nodes.paragraph()
p.append(refnode)
@ -57,7 +68,8 @@ def replace_settingslist_nodes(app, doctree, fromdocname):
for node in doctree.traverse(settingslist_node):
node.replace_self([make_setting_element(d, app, fromdocname)
for d in env.scrapy_all_settings])
for d in env.scrapy_all_settings if fromdocname != d['docname']])
def setup(app):
app.add_crossref_type(

View File

@ -133,8 +133,6 @@ to any particular component. In that case the module of that component will be
shown, typically an extension, middleware or pipeline. It also means that the
component must be enabled in order for the setting to have any effect.
.. settingslist::
.. setting:: AWS_ACCESS_KEY_ID
AWS_ACCESS_KEY_ID
@ -1017,6 +1015,16 @@ Default: ``"Scrapy/VERSION (+http://scrapy.org)"``
The default User-Agent to use when crawling, unless overridden.
Settings documented elsewhere:
------------------------------
The following settings are documented elsewhere, please check each specific
case to see how to enable and use them.
.. settingslist::
.. _Amazon web services: http://aws.amazon.com/
.. _breadth-first order: http://en.wikipedia.org/wiki/Breadth-first_search
.. _depth-first order: http://en.wikipedia.org/wiki/Depth-first_search