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):
|
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
9
external/element.py
vendored
|
@ -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')
|
||||||
|
|
32
setup.py
32
setup.py
|
@ -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',
|
||||||
|
|
|
@ -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'
|
||||||
|
|
Loading…
Add table
Reference in a new issue