mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
only add node if it doesn't already exist
This commit is contained in:
parent
a52fd809bf
commit
34379fedb7
@ -6,6 +6,8 @@ Web Support Quick Start
|
|||||||
Building Documentation Data
|
Building Documentation Data
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
New Test p
|
||||||
|
|
||||||
To make use of the web support package in your application you'll
|
To make use of the web support package in your application you'll
|
||||||
need to build the data it uses. This data includes pickle files representing
|
need to build the data it uses. This data includes pickle files representing
|
||||||
documents, search indices, and node data that is used to track where
|
documents, search indices, and node data that is used to track where
|
||||||
|
@ -16,6 +16,13 @@ class StorageBackend(object):
|
|||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def has_node(self, id):
|
||||||
|
"""Check to see if a node exists.
|
||||||
|
|
||||||
|
:param id: the id to check for.
|
||||||
|
"""
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
def add_node(self, id, document, source):
|
def add_node(self, id, document, source):
|
||||||
"""Add a node to the StorageBackend.
|
"""Add a node to the StorageBackend.
|
||||||
|
|
||||||
|
@ -33,11 +33,16 @@ class SQLAlchemyStorage(StorageBackend):
|
|||||||
def pre_build(self):
|
def pre_build(self):
|
||||||
self.build_session = Session()
|
self.build_session = Session()
|
||||||
|
|
||||||
|
def has_node(self, id):
|
||||||
|
session = Session()
|
||||||
|
node = session.query(Node).filter(Node.id == id).first()
|
||||||
|
session.close()
|
||||||
|
return True if node else False
|
||||||
|
|
||||||
def add_node(self, id, document, source):
|
def add_node(self, id, document, source):
|
||||||
node = Node(id, document, source)
|
node = Node(id, document, source)
|
||||||
self.build_session.add(node)
|
self.build_session.add(node)
|
||||||
self.build_session.flush()
|
self.build_session.flush()
|
||||||
return node
|
|
||||||
|
|
||||||
def post_build(self):
|
def post_build(self):
|
||||||
self.build_session.commit()
|
self.build_session.commit()
|
||||||
|
@ -27,19 +27,19 @@ class WebSupportTranslator(HTMLTranslator):
|
|||||||
HTMLTranslator.dispatch_visit(self, node)
|
HTMLTranslator.dispatch_visit(self, node)
|
||||||
|
|
||||||
def handle_visit_commentable(self, node):
|
def handle_visit_commentable(self, node):
|
||||||
db_node = self.add_db_node(node)
|
|
||||||
# We will place the node in the HTML id attribute. If the node
|
# We will place the node in the HTML id attribute. If the node
|
||||||
# already has an id (for indexing purposes) put an empty
|
# already has an id (for indexing purposes) put an empty
|
||||||
# span with the existing id directly before this node's HTML.
|
# span with the existing id directly before this node's HTML.
|
||||||
|
self.add_db_node(node)
|
||||||
if node.attributes['ids']:
|
if node.attributes['ids']:
|
||||||
self.body.append('<span id="%s"></span>'
|
self.body.append('<span id="%s"></span>'
|
||||||
% node.attributes['ids'][0])
|
% node.attributes['ids'][0])
|
||||||
node.attributes['ids'] = ['s%s' % db_node.id]
|
node.attributes['ids'] = ['s%s' % node.uid]
|
||||||
node.attributes['classes'].append(self.comment_class)
|
node.attributes['classes'].append(self.comment_class)
|
||||||
|
|
||||||
def add_db_node(self, node):
|
def add_db_node(self, node):
|
||||||
storage = self.builder.app.storage
|
storage = self.builder.app.storage
|
||||||
db_node_id = storage.add_node(id=node.uid,
|
if not storage.has_node(node.uid):
|
||||||
document=self.builder.cur_docname,
|
storage.add_node(id=node.uid,
|
||||||
source=node.rawsource or node.astext())
|
document=self.builder.cur_docname,
|
||||||
return db_node_id
|
source=node.rawsource or node.astext())
|
||||||
|
Loading…
Reference in New Issue
Block a user