work in progress: loops site synchronization: process import
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3738 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
89668340de
commit
e5077bb75b
4 changed files with 56 additions and 15 deletions
5
external/base.py
vendored
5
external/base.py
vendored
|
@ -284,7 +284,10 @@ class Extractor(Base):
|
|||
|
||||
def getDeassignmentElement(self, obj, child, predicate):
|
||||
args = getName(obj), getName(child), getName(predicate)
|
||||
return elementTypes['deassign'](*args)
|
||||
kw = {}
|
||||
if IConcept.providedBy(child):
|
||||
kw['type'] = 'concept'
|
||||
return elementTypes['deassign'](*args, **kw)
|
||||
|
||||
def getConceptElement(self, name, obj):
|
||||
if obj.conceptType is None:
|
||||
|
|
11
external/element.py
vendored
11
external/element.py
vendored
|
@ -195,12 +195,17 @@ class DeassignmentElement(Element):
|
|||
elementType = 'deassign'
|
||||
posArgs = ('first', 'second', 'predicate')
|
||||
|
||||
def __init__(self, *args):
|
||||
def __init__(self, *args, **kw):
|
||||
for idx, arg in enumerate(args):
|
||||
self[self.posArgs[idx]] = arg
|
||||
for k, v in kw.items():
|
||||
self[k] = v
|
||||
|
||||
def execute(self, loader):
|
||||
loader.deassignResource(self['first'], self['second'], self['predicate'])
|
||||
if self.get('type') == 'child':
|
||||
loader.deassignChild(self['first'], self['second'], self['predicate'])
|
||||
else:
|
||||
loader.deassignResource(self['first'], self['second'], self['predicate'])
|
||||
|
||||
|
||||
class NodeElement(Element):
|
||||
|
@ -250,4 +255,4 @@ elementTypes = dict(
|
|||
)
|
||||
|
||||
toplevelElements = ('type', 'concept', 'resource',
|
||||
'child', 'resourceRelation', 'node')
|
||||
'child', 'resourceRelation', 'node', 'deassign')
|
||||
|
|
32
setup.py
32
setup.py
|
@ -149,7 +149,7 @@ class SetupManager(object):
|
|||
|
||||
def setConceptAttribute(self, concept, attr, value):
|
||||
setattr(adapted(concept), attr, value)
|
||||
self.log("Setting Attribute '%s' of '%s' to '%s'" %
|
||||
self.log("Setting Attribute '%s' of '%s' to '%s'." %
|
||||
(attr, getName(concept), repr(value)))
|
||||
|
||||
def assignChild(self, conceptName, childName, predicate=None, **kw):
|
||||
|
@ -160,13 +160,24 @@ class SetupManager(object):
|
|||
concept = self.concepts[conceptName]
|
||||
child = self.concepts[childName]
|
||||
if child in concept.getChildren([predicate]):
|
||||
self.log("Concept '%s' is already a child of '%s' with predicate '%s'.'" %
|
||||
self.log("Concept '%s' is already a child of '%s' with predicate '%s'." %
|
||||
(childName, conceptName, getName(predicate)))
|
||||
else:
|
||||
concept.assignChild(child, predicate, **kw)
|
||||
self.log("Concept '%s' assigned to '%s with predicate '%s'.'" %
|
||||
self.log("Concept '%s' assigned to '%s' with predicate '%s'." %
|
||||
(childName, conceptName, getName(predicate)))
|
||||
|
||||
def deassignChild(self, conceptName, childName, predicate=None):
|
||||
if predicate is None:
|
||||
predicate = self.concepts.getDefaultPredicate()
|
||||
if isinstance(predicate, basestring):
|
||||
predicate = self.concepts[predicate]
|
||||
concept = self.concepts[conceptName]
|
||||
child = self.concepts[childName]
|
||||
concept.deassignChild(child, [predicate])
|
||||
self.log("Concept '%s' deassigned from '%s' using predicate '%s'." %
|
||||
(childName, conceptName, getName(predicate)))
|
||||
|
||||
def addResource(self, name, title, resourceType, description=u'', **kw):
|
||||
if name in self.resources:
|
||||
self.log("Resource '%s' ('%s') already exists." % (name, title))
|
||||
|
@ -189,13 +200,24 @@ class SetupManager(object):
|
|||
concept = self.concepts[conceptName]
|
||||
resource = self.resources[resourceName]
|
||||
if resource in concept.getResources([predicate]):
|
||||
self.log("Resource '%s' is already assigned to '%s with predicate '%s'.'" %
|
||||
self.log("Resource '%s' is already assigned to '%s' with predicate '%s'.'" %
|
||||
(resourceName, conceptName, getName(predicate)))
|
||||
else:
|
||||
concept.assignResource(resource, predicate, **kw)
|
||||
self.log("Resource '%s' assigned to '%s with predicate '%s'.'" %
|
||||
self.log("Resource '%s' assigned to '%s' with predicate '%s'." %
|
||||
(resourceName, conceptName, getName(predicate)))
|
||||
|
||||
def deassignResource(self, conceptName, resourceName, predicate=None):
|
||||
if predicate is None:
|
||||
predicate = self.concepts.getDefaultPredicate()
|
||||
if isinstance(predicate, basestring):
|
||||
predicate = self.concepts[predicate]
|
||||
concept = self.concepts[conceptName]
|
||||
resource = self.resources[resourceName]
|
||||
concept.deassignResource(resource, [predicate])
|
||||
self.log("Resource '%s' deassigned from '%s' using predicate '%s'." %
|
||||
(resourceName, conceptName, getName(predicate)))
|
||||
|
||||
def addNode(self, name, title, container=None, nodeType='page',
|
||||
description=u'', body=u'', target=None, factory=Node, **kw):
|
||||
if container is None:
|
||||
|
|
|
@ -37,8 +37,8 @@ from cybertools.browser.form import FormController
|
|||
from cybertools.util.date import str2timeStamp, formatTimeStamp
|
||||
from loops.browser.common import BaseView
|
||||
from loops.browser.concept import ConceptView
|
||||
from loops.external.base import Extractor
|
||||
from loops.external.interfaces import IWriter
|
||||
from loops.external.base import Extractor, Loader
|
||||
from loops.external.interfaces import IReader, IWriter
|
||||
from loops.system.job import JobRecords
|
||||
from loops import util
|
||||
|
||||
|
@ -85,11 +85,13 @@ class ChangesSave(FormController):
|
|||
def sitePath(self):
|
||||
return getPath(self.view.loopsRoot)[1:].replace('/', '_')
|
||||
|
||||
@Lazy
|
||||
def subDirectory(self):
|
||||
return '_'.join((self.sitePath, getName(self.targetView.context)))
|
||||
|
||||
@Lazy
|
||||
def exportDirectory(self):
|
||||
directory = os.path.join(self.baseDirectory, 'export',
|
||||
'_'.join((self.sitePath,
|
||||
getName(self.targetView.context))))
|
||||
directory = os.path.join(self.baseDirectory, 'export', self.subDirectory)
|
||||
if not os.path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
return directory
|
||||
|
@ -162,6 +164,7 @@ class ChangesSync(ChangesSave):
|
|||
path = p[1]
|
||||
else:
|
||||
path = p[0]
|
||||
path = os.path.join(path, self.subDirectory)
|
||||
f = urlopen(targetUrl, data=urlencode(dict(path=path)))
|
||||
result = f.read()
|
||||
self.transcript.write('trigger import: %s\n' % result)
|
||||
|
@ -180,5 +183,13 @@ class SyncImport(object):
|
|||
self.request = request
|
||||
|
||||
def importData(self):
|
||||
print '***', self.request.get('path', '???')
|
||||
path = self.request.get('path', '???')
|
||||
f = open(os.path.join(path, '_changes.dmp'))
|
||||
data = f.read()
|
||||
f.close()
|
||||
reader = component.getUtility(IReader)
|
||||
elements = reader.read(data)
|
||||
loader = Loader(self.context, path)
|
||||
loader.load(elements)
|
||||
return loader.logger.getvalue() + '\n' + loader.transcript.getvalue()
|
||||
return 'Done'
|
||||
|
|
Loading…
Add table
Reference in a new issue