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:
helmutm 2010-02-16 18:53:41 +00:00
parent 89668340de
commit e5077bb75b
4 changed files with 56 additions and 15 deletions

5
external/base.py vendored
View file

@ -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
View file

@ -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')

View file

@ -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:

View file

@ -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'