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 self.count += 1
yield r yield r
def extractNodes(self, parent=None, path=''): def getNodePath(self, node):
if parent is None: result = []
parent = self.views node = getParent(node)
for name, obj in parent.items(): 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 = {} data = {}
for attr in ('description', 'body', 'viewName', 'pageName'): for attr in ('description', 'body', 'viewName', 'pageName'):
value = getattr(obj, attr, None) value = getattr(obj, attr, None)
@ -148,7 +163,13 @@ class Extractor(Base):
data[attr] = value data[attr] = value
target = obj.target target = obj.target
if target is not None: 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'] elementClass = (isinstance(obj, LayoutNode) and elementTypes['layoutNode']
or elementTypes['node']) or elementTypes['node'])
elem = elementClass(name, obj.title, path, obj.nodeType, **data) elem = elementClass(name, obj.title, path, obj.nodeType, **data)
@ -156,7 +177,8 @@ class Extractor(Base):
self.count += 1 self.count += 1
yield elem yield elem
childPath = path and '/'.join((path, name)) or name 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.provideSubElements(obj, elem)
self.count += 1 self.count += 1
yield elem 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.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
from zope.cachedescriptors.property import Lazy from zope.cachedescriptors.property import Lazy
from zope.security.proxy import removeSecurityProxy 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 cybertools.util.date import str2timeStamp
from loops.external.base import Loader, Extractor from loops.external.base import Loader, Extractor
@ -74,7 +74,12 @@ class ExportImport(object):
def export(self): def export(self):
form = self.request.form 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') parentIds = form.get('parents')
if parentIds: if parentIds:
parentIds = [id for id in parentIds.splitlines() if id] parentIds = [id for id in parentIds.splitlines() if id]
@ -87,6 +92,7 @@ class ExportImport(object):
if typeIds: if typeIds:
types = ([self.conceptManager[id] for id in typeIds]) types = ([self.conceptManager[id] for id in typeIds])
changed = form.get('changed') changed = form.get('changed')
includeNodeTargets = form.get('include_node_targets')
includeSubconcepts = form.get('include_subconcepts') includeSubconcepts = form.get('include_subconcepts')
includeResources = form.get('include_resources') includeResources = form.get('include_resources')
extractor = Extractor(self.context, self.resourceExportDirectory) extractor = Extractor(self.context, self.resourceExportDirectory)
@ -95,6 +101,9 @@ class ExportImport(object):
if changed: if changed:
elements = extractor.extractChanges(changed, parents, elements = extractor.extractChanges(changed, parents,
predicates, types) predicates, types)
elif nodes:
elements = extractor.extractNodes(topNodes=nodes,
includeTargets=includeNodeTargets)
elif parents: elif parents:
elements = extractor.extractForParents(parents, predicates, types, elements = extractor.extractForParents(parents, predicates, types,
includeSubconcepts, includeResources) includeSubconcepts, includeResources)

View file

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