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:
parent
4d6032e5d3
commit
57f2aa94f2
3 changed files with 60 additions and 14 deletions
34
external/base.py
vendored
34
external/base.py
vendored
|
@ -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
13
external/browser.py
vendored
|
@ -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)
|
||||
|
|
27
external/exportimport.pt
vendored
27
external/exportimport.pt
vendored
|
@ -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> </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">
|
||||
|
|
Loading…
Add table
Reference in a new issue