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
|
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
13
external/browser.py
vendored
|
@ -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)
|
||||||
|
|
27
external/exportimport.pt
vendored
27
external/exportimport.pt
vendored
|
@ -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> </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">
|
||||||
|
|
Loading…
Add table
Reference in a new issue