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): def getDeassignmentElement(self, obj, child, predicate):
args = getName(obj), getName(child), getName(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): def getConceptElement(self, name, obj):
if obj.conceptType is None: if obj.conceptType is None:

9
external/element.py vendored
View file

@ -195,11 +195,16 @@ class DeassignmentElement(Element):
elementType = 'deassign' elementType = 'deassign'
posArgs = ('first', 'second', 'predicate') posArgs = ('first', 'second', 'predicate')
def __init__(self, *args): def __init__(self, *args, **kw):
for idx, arg in enumerate(args): for idx, arg in enumerate(args):
self[self.posArgs[idx]] = arg self[self.posArgs[idx]] = arg
for k, v in kw.items():
self[k] = v
def execute(self, loader): def execute(self, loader):
if self.get('type') == 'child':
loader.deassignChild(self['first'], self['second'], self['predicate'])
else:
loader.deassignResource(self['first'], self['second'], self['predicate']) loader.deassignResource(self['first'], self['second'], self['predicate'])
@ -250,4 +255,4 @@ elementTypes = dict(
) )
toplevelElements = ('type', 'concept', 'resource', 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): def setConceptAttribute(self, concept, attr, value):
setattr(adapted(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))) (attr, getName(concept), repr(value)))
def assignChild(self, conceptName, childName, predicate=None, **kw): def assignChild(self, conceptName, childName, predicate=None, **kw):
@ -160,11 +160,22 @@ class SetupManager(object):
concept = self.concepts[conceptName] concept = self.concepts[conceptName]
child = self.concepts[childName] child = self.concepts[childName]
if child in concept.getChildren([predicate]): 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))) (childName, conceptName, getName(predicate)))
else: else:
concept.assignChild(child, predicate, **kw) 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))) (childName, conceptName, getName(predicate)))
def addResource(self, name, title, resourceType, description=u'', **kw): def addResource(self, name, title, resourceType, description=u'', **kw):
@ -189,11 +200,22 @@ class SetupManager(object):
concept = self.concepts[conceptName] concept = self.concepts[conceptName]
resource = self.resources[resourceName] resource = self.resources[resourceName]
if resource in concept.getResources([predicate]): 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))) (resourceName, conceptName, getName(predicate)))
else: else:
concept.assignResource(resource, predicate, **kw) 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))) (resourceName, conceptName, getName(predicate)))
def addNode(self, name, title, container=None, nodeType='page', def addNode(self, name, title, container=None, nodeType='page',

View file

@ -37,8 +37,8 @@ from cybertools.browser.form import FormController
from cybertools.util.date import str2timeStamp, formatTimeStamp from cybertools.util.date import str2timeStamp, formatTimeStamp
from loops.browser.common import BaseView from loops.browser.common import BaseView
from loops.browser.concept import ConceptView from loops.browser.concept import ConceptView
from loops.external.base import Extractor from loops.external.base import Extractor, Loader
from loops.external.interfaces import IWriter from loops.external.interfaces import IReader, IWriter
from loops.system.job import JobRecords from loops.system.job import JobRecords
from loops import util from loops import util
@ -85,11 +85,13 @@ class ChangesSave(FormController):
def sitePath(self): def sitePath(self):
return getPath(self.view.loopsRoot)[1:].replace('/', '_') return getPath(self.view.loopsRoot)[1:].replace('/', '_')
@Lazy
def subDirectory(self):
return '_'.join((self.sitePath, getName(self.targetView.context)))
@Lazy @Lazy
def exportDirectory(self): def exportDirectory(self):
directory = os.path.join(self.baseDirectory, 'export', directory = os.path.join(self.baseDirectory, 'export', self.subDirectory)
'_'.join((self.sitePath,
getName(self.targetView.context))))
if not os.path.exists(directory): if not os.path.exists(directory):
os.makedirs(directory) os.makedirs(directory)
return directory return directory
@ -162,6 +164,7 @@ class ChangesSync(ChangesSave):
path = p[1] path = p[1]
else: else:
path = p[0] path = p[0]
path = os.path.join(path, self.subDirectory)
f = urlopen(targetUrl, data=urlencode(dict(path=path))) f = urlopen(targetUrl, data=urlencode(dict(path=path)))
result = f.read() result = f.read()
self.transcript.write('trigger import: %s\n' % result) self.transcript.write('trigger import: %s\n' % result)
@ -180,5 +183,13 @@ class SyncImport(object):
self.request = request self.request = request
def importData(self): 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' return 'Done'