provide export for selected nodes with target objects

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3814 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2010-04-13 09:20:00 +00:00
parent 4d6032e5d3
commit 57f2aa94f2
3 changed files with 60 additions and 14 deletions

34
external/base.py vendored
View file

@ -137,10 +137,25 @@ class Extractor(Base):
self.count += 1
yield r
def extractNodes(self, parent=None, path=''):
if parent is None:
parent = self.views
for name, obj in parent.items():
def getNodePath(self, node):
result = []
node = getParent(node)
while node != self.views:
result.append(getName(node))
node = getParent(node)
return '/'.join(reversed(result))
def extractNodes(self, parent=None, path='',
topNodes=[], includeTargets=False):
if topNodes:
startingSet = [(getName(n), n) for n in topNodes]
elif parent is None:
startingSet = self.views.items()
else:
startingSet = parent.items()
for name, obj in startingSet:
if topNodes:
path = self.getNodePath(obj)
data = {}
for attr in ('description', 'body', 'viewName', 'pageName'):
value = getattr(obj, attr, None)
@ -148,7 +163,13 @@ class Extractor(Base):
data[attr] = value
target = obj.target
if target is not None:
data['target'] = '/'.join((getName(getParent(target)), getName(target)))
tname = getName(target)
if includeTargets:
if IResource.providedBy(target):
yield self.getResourceElement(tname, target)
else:
yield self.getConceptElement(tname, target)
data['target'] = '/'.join((getName(getParent(target)), tname))
elementClass = (isinstance(obj, LayoutNode) and elementTypes['layoutNode']
or elementTypes['node'])
elem = elementClass(name, obj.title, path, obj.nodeType, **data)
@ -156,7 +177,8 @@ class Extractor(Base):
self.count += 1
yield elem
childPath = path and '/'.join((path, name)) or name
for elem in self.extractNodes(obj, childPath):
for elem in self.extractNodes(obj, childPath,
includeTargets=includeTargets):
#self.provideSubElements(obj, elem)
self.count += 1
yield elem

13
external/browser.py vendored
View file

@ -31,7 +31,7 @@ from zope.app import zapi
from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
from zope.cachedescriptors.property import Lazy
from zope.security.proxy import removeSecurityProxy
from zope.traversing.api import getName, getPath
from zope.traversing.api import getName, getPath, traverse
from cybertools.util.date import str2timeStamp
from loops.external.base import Loader, Extractor
@ -74,7 +74,12 @@ class ExportImport(object):
def export(self):
form = self.request.form
parents = predicates = types = None
nodes = parents = predicates = types = None
nodePaths = form.get('nodes')
if nodePaths:
nodePaths = [p for p in nodePaths.splitlines() if p]
nodes = [traverse(self.context.getViewManager(), p) for p in nodePaths]
nodes = [p for p in nodes if p is not None]
parentIds = form.get('parents')
if parentIds:
parentIds = [id for id in parentIds.splitlines() if id]
@ -87,6 +92,7 @@ class ExportImport(object):
if typeIds:
types = ([self.conceptManager[id] for id in typeIds])
changed = form.get('changed')
includeNodeTargets = form.get('include_node_targets')
includeSubconcepts = form.get('include_subconcepts')
includeResources = form.get('include_resources')
extractor = Extractor(self.context, self.resourceExportDirectory)
@ -95,6 +101,9 @@ class ExportImport(object):
if changed:
elements = extractor.extractChanges(changed, parents,
predicates, types)
elif nodes:
elements = extractor.extractNodes(topNodes=nodes,
includeTargets=includeNodeTargets)
elif parents:
elements = extractor.extractForParents(parents, predicates, types,
includeSubconcepts, includeResources)

View file

@ -30,26 +30,41 @@
<td>
<label for="changed">Export only objects changed since:<br />
(YYYY-MM-DD[ HH:MM[:SS]])</label></td>
<td colspan="3">
<td colspan="2">
<input type="text" name="changed" id="changed" />
</td>
</tr>
<tr>
<td colspan="2">
<br />
<label for="nodes">Nodes (paths)</label><br />
<textarea name="nodes" id="nodes"
rows="5" cols="50" class="pretty"></textarea>
</td>
<td>
<label for="parents">Parent concepts</label><br />
<br /><br />
<input type="checkbox" name="include_node_targets"
id="include_node_targets" />
<label for="include_node_targets">Include Node Targets</label>
</tr>
<tr>
<td>
<br />
<label for="parents">Parent concepts (names)</label><br />
<textarea name="parents" id="parents"
rows="8" class="pretty"></textarea>
</td>
<td>
<br />
<label for="predicates">Predicates</label><br />
<select multiple name="predicates:list" id="predicates"
size="9">
size="11">
<option tal:repeat="pred view/predicates"
tal:attributes="value pred/name"
tal:content="pred/title">subobject</option></select>
</td><td>&nbsp;</td>
</td>
<td>
<br />
<br /><br />
<input type="checkbox" name="include_subconcepts"
id="include_subconcepts" />
<label for="include_subconcepts">Include Assigned Subconcepts</label>
@ -60,7 +75,7 @@
</td>
</tr>
<tr>
<td colspan="4">
<td colspan="3">
<label for="types">Restrict Type</label><br />
<select multiple name="types:list" id="types"
size="4">