2015-08-13 21 views
8

Ich bin fast erfolgreich in meinen Bemühungen, einen Auszug aus meinem ZODB (eine kleine Teilmenge von Ordnern, einschließlich Ressourcen aus anderen Ordnern) zu einem anderen zu übertragen Plone-Instanz; Der Showstopper ist: Während des Imports werden meine Objekte nicht geschrieben. Hier ist meine Exportskript:Plone: ​​collective.transmogrifier.sections.constructor schreibt keine Objekte beim Import

[transmogrifier] 
pipeline = 
    sitewalker 
    xmlwalker 
    uidextractor 
    encapsulator 
    manifestexporter 
    fileexporter 
    marshaller 
    propertiesexporter 
    commentsexporter 
    datacorrector 
    portletsexporter 
    writer 
    EXPORTING 

[sitewalker] 
blueprint = quintagroup.transmogrifier.sitewalker 
path = 
    folder1 
    folder2 

[xmlwalker] 
blueprint = collective.transmogrifier.sections.xmlwalker 

[uidextractor] 
# my own section which parses the html text of the given fields, 
# checks the href and src attributes for UIDs, and injects entries 
# for the refered objects into the pipeline 
blueprint = my.transmogrifier.uidextractor 
inspect_fields = 
    text 
    description 
    notes 

[encapsulator] 
blueprint = plone.app.transmogrifier.mimeencapsulator 
mimetype = item/_mimetype 
field = string:datafield 

[manifestexporter] 
blueprint = quintagroup.transmogrifier.manifestexporter 

[fileexporter] 
blueprint = quintagroup.transmogrifier.fileexporter 

[marshaller] 
blueprint = quintagroup.transmogrifier.marshaller 

[propertiesexporter] 
blueprint = quintagroup.transmogrifier.propertiesexporter 

[commentsexporter] 
blueprint = quintagroup.transmogrifier.commentsexporter 

[datacorrector] 
blueprint = quintagroup.transmogrifier.datacorrector 
sources = 
    marshall 

[portletsexporter] 
blueprint = quintagroup.transmogrifier.portletsexporter 

[writer] 
blueprint = quintagroup.transmogrifier.writer 
context = directory 
path = var/export/ 
prefix = structure 

[EXPORTING] 
blueprint = quintagroup.transmogrifier.logger 
keys = 
    _type 
    _path 

Basierend auf dem Standard-Export und Import-Skripte von quintagroup.transmogrifier, hier ist mein Importskript:

[transmogrifier] 
pipeline = 
    reader 
    pathfixer 
    constructor 
    schemaupdater 
    datacorrector 
    demarshaller 
    uidupdater 
    referencesimporter 
    propertiesimporter 
    commentsimporter 
    portletsimporter 
    printcounters 
    IMPORTING 

[reader] 
blueprint = quintagroup.transmogrifier.reader 
prefix = 
path = /path/to/var/export 
context = directory 
# unchanged entries I don't really understand: 
.objects.xml = manifest 
.marshall.xml = marshall 
.properties.xml = propertymanager 
.comments.xml = comments 
.file-fields.xml = file-fields 
.interfaces.xml = interfaces 
.portlets.xml = portlets 

[pathfixer] 
blueprint = plone.app.transmogrifier.pathfixer 
stripstring = Plone/ 
prependstring = 

[constructor] 
blueprint = collective.transmogrifier.sections.constructor 

[schemaupdater] 
blueprint = plone.app.transmogrifier.atschemaupdater 

[datacorrector] 
blueprint = quintagroup.transmogrifier.datacorrector 
type = import 
sources = 
    marshall 

[fileimporter] 
blueprint = quintagroup.transmogrifier.fileimporter 

[demarshaller] 
blueprint = quintagroup.transmogrifier.demarshaller 

[uidupdater] 
blueprint = plone.app.transmogrifier.uidupdater 

[referencesimporter] 
blueprint = quintagroup.transmogrifier.referencesimporter 

[propertiesimporter] 
blueprint = quintagroup.transmogrifier.propertiesimporter 

[commentsimporter] 
blueprint = quintagroup.transmogrifier.commentsimporter 

[portletsimporter] 
blueprint = quintagroup.transmogrifier.portletsimporter 

[printcounters] 
blueprint = collective.transmogrifier.sections.summary 
count = true 

[IMPORTING] 
blueprint = quintagroup.transmogrifier.logger 
keys = 
    _type 
    _path 

Soweit ich verstehe, kommt die reader in dem oberen writer; die marshaller kommt für die demarshaller, etc. Allerdings werden beim Importieren die Objekte nicht wirklich in die Datenbank geschrieben. Zwicken die Pläne mit einer Zähleinrichtung (im add-info Zweig meiner Gabeln der Pakete), bekam ich folgende Übersicht:

Items summary 
~~~~~~~~~~~~~ 
[reader]: 
    created: 714 
[pathfixer]: 
    got:   714 
    forwarded: 714 
    stripped: 390 
[constructor]: 
    got:   714 
    missing-type: 714 
    missing-info: 714 
    forwarded:  714 
[datacorrector]: 
    got:   714 
    forwarded: 714 
[fileimporter]: 
    got:   31 
    forwarded: 31 
[demarshaller]: 
    got:   31 
    forwarded: 31 
[uidupdater]: 
    got:   31 
    forwarded: 31 
[referencesimporter]: 
    passed-through: 31 
[printcounters]: 
    passed-through: 31 
[IMPORTING]: 
    got:   31 
    forwarded: 31 

Wenn die constructor alles tun, nicht über die item, zähle ich die Gründe dafür; Offensichtlich schreibt der Abschnitt constructor nichts, weil er die Typen der zu erstellenden Objekte nicht kennt. Aber sollte nicht diese Information irgendwo geschaffen worden sein ?!

(Es gibt ein weiteres Problem:. Anscheinend die fileimporter erhält nur 31 Objekte der 714 durch die datacorrector weitergegeben Aber zuerst hatte ich wie alles importiert zu sehen.)

Was mache ich falsch?

Oh, und Online-Dokumentation für die collective.transmogrifier.sections wäre schön, sie sogar Docstrings fehlt ...

bearbeiten: Meine Zählung-fähigen Gabeln sind hier (Zweige add-info):

2. Bearbeiten:

Wenn ich den IMPORTING Abschnitt vor constructer bewegen, werden die Zähler ausgegeben wird:

Items summary 
~~~~~~~~~~~~~ 
[reader]: 
    created: 714 
[pathfixer]: 
    got:   714 
    forwarded: 714 
    stripped: 390 
[IMPORTING]: 
    got:   714 
    forwarded: 714 
[constructor]: 
    got:   714 
    missing-type: 714 
    missing-info: 714 
    forwarded:  714 
[datacorrector]: 
    got:   714 
    forwarded: 714 
[fileimporter]: 
    got:   31 
    forwarded: 31 
[demarshaller]: 
    got:   31 
    forwarded: 31 
[uidupdater]: 
    got:   31 
    forwarded: 31 
[referencesimporter]: 
    passed-through: 31 
[printcounters]: 
    passed-through: 31 

Somit ist die collector noch nicht _type Informationen finden können.

3. Edit:

habe ich eine kleine Anlage, die eine kurze Info über die Artikel druckt gefunden (das erste Stück pro Abschnitt standardmäßig; _path und _type mit Werten, falls vorhanden, und eine Liste der andere Schlüssel).Das Ergebnis ist:

[reader], item #1: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
[pathfixer], item #1: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
[pathfixer], item #2: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
2015-08-18 18:39:56 INFO IMPORTING _path= 
[constructor], item #1: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
[reader], item #2: 
    _path='some/archetypes/object/containing/a/video' 
    other keys: _files (dict), _import_context (DirectoryImportContext) 

der Tat gibt es keine _type Schlüssel überall, also brauche ich einen Abschnitt, die sie zur Verfügung stellt.

4. Edit:

Nach Wiedereinsetzen manifestimporter vor constructor, ich habe:

[reader], item #1: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
[pathfixer], item #1: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
[pathfixer], item #2: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
2015-08-19 10:15:43 INFO IMPORTING _path= 
[constructor], item #1: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
[manifestimporter], item #1: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
[reader], item #2: 
    _path=' [reader], item #1: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
[pathfixer], item #1: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
[pathfixer], item #2: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
2015-08-19 10:15:43 INFO IMPORTING _path= 
[constructor], item #1: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
[manifestimporter], item #1: 
    _path='' 
    other keys: _import_context (DirectoryImportContext) 
[reader], item #2: 
    _path='some/archetypes/object/containing/a/video' 
    other keys: _files (dict), _import_context (DirectoryImportContext) 
... 
2015-08-19 10:15:44 INFO IMPORTING 
Pipeline processing time: 00:00:00 
     715 items were generated in source sections 
      2 went through full pipeline 
     713 were discarded in some section 

Die manifestimporter Abschnitte weiterleiten keine vorherigen Artikel, so dass alle Elemente aus reader weggeworfen .

5. Edit: versucht, die recommended way die verwenden "Site Configuration Export Step;" Ich habe den Standard-Exportskript und versuchte, den Export, aber ich bekam die folgenden Zurückverfolgungs:

Traceback (innermost last): 
    Module ZPublisher.Publish, line 138, in publish 
    Module ZPublisher.mapply, line 77, in mapply 
    Module ZPublisher.Publish, line 48, in call_object 
    Module Products.GenericSetup.tool, line 598, in manage_exportSelectedSteps 
    Module Products.GenericSetup.tool, line 1053, in _doRunExportSteps 
    Module quintagroup.transmogrifier.exportimport, line 74, in exportSiteStructure 
    Module collective.transmogrifier.utils, line 121, in constructPipeline 
    Module quintagroup.transmogrifier.sitewalker, line 29, in __init__ 
TypeError: ('Could not adapt', {'manifestexporter': {'blueprint': 'quintagroup.transmogrifier.manifestexporter'}, 'transmogrifier': {'pipeline': '\nsitewalker\nuidextractor\npathfixer\nmanifestexporter\nfileexporter\nmarshaller\npropertiesexporter\ncommentsexporter\ndatacorrector\nportletsexporter\nwriter\nEXPORTING'}, 'uidextractor': {'blueprint': 'my.transmogrifier.uidextractor', 'trace-first': 'true', 'inspect_fields': '\ntext\ndescription\nnotes'}, 'sitewalker': {'blueprint': 'quintagroup.transmogrifier.sitewalker', 'start-path': '\nakademie/vortraege/d-02-verlegung-lektion-02-leitungsgraben', 'exclude-contained': 'false'}, 'xmlwalker': {'blueprint': 'collective.transmogrifier.sections.xmlwalker'}, 'encapsulator': {'blueprint': 'plone.app.transmogrifier.mimeencapsulator', 'mimetype': 'item/_mimetype', 'field': 'string:datafield'}, 'writer': {'blueprint': 'quintagroup.transmogrifier.writer', 'path': 'var/export/', 'prefix': '', 'context': 'tarball'}, 'commentsexporter': {'blueprint': 'quintagroup.transmogrifier.commentsexporter'}, 'pathfixer': {'blueprint': 'plone.app.transmogrifier.pathfixer', 'stripstring': 'unitracc/'}, 'echo': {'blueprint': 'visaplan.transmogrifier.echo'}, 'marshaller': {'blueprint': 'quintagroup.transmogrifier.marshaller'}, 'propertiesexporter': {'blueprint': 'quintagroup.transmogrifier.propertiesexporter'}, 'datacorrector': {'blueprint': 'quintagroup.transmogrifier.datacorrector', 'sources': '\nmarshall'}, 'breakpoint': {'blueprint': 'collective.transmogrifier.sections.breakpoint'}, 'EXPORTING': {'blueprint': 'quintagroup.transmogrifier.logger', 'keys': '\n_type\n_path'}, 'portletsexporter': {'blueprint': 'quintagroup.transmogrifier.portletsexporter'}, 'fileexporter': {'blueprint': 'quintagroup.transmogrifier.fileexporter'}}, <InterfaceClass zope.annotation.interfaces.IAnnotations>) 

Es spielte keine Rolle, ob mein uidexporter Abschnitt enthalten war.

6. Edit:

Hier ist der aktuelle Exportprofil, das ich für die Standortkonfiguration Export Schritt verwendet:

[transmogrifier] 
pipeline = 
    sitewalker 
    manifestexporter 
    fileexporter 
    marshaller 
    propertiesexporter 
    commentsexporter 
    datacorrector 
    portletsexporter 
    writer 
    EXPORTING 

[sitewalker] 
blueprint = quintagroup.transmogrifier.sitewalker 
exclude-contained = false 
start-path = 
    Plone/some/existing/structure 

[manifestexporter] 
blueprint = quintagroup.transmogrifier.manifestexporter 

[fileexporter] 
blueprint = quintagroup.transmogrifier.fileexporter 

[marshaller] 
blueprint = quintagroup.transmogrifier.marshaller 

[propertiesexporter] 
blueprint = quintagroup.transmogrifier.propertiesexporter 

[commentsexporter] 
blueprint = quintagroup.transmogrifier.commentsexporter 

[datacorrector] 
blueprint = quintagroup.transmogrifier.datacorrector 
sources = 
    marshall 

[portletsexporter] 
blueprint = quintagroup.transmogrifier.portletsexporter 

[writer] 
blueprint = quintagroup.transmogrifier.writer 
context = tarball 
path = var/export/ 
prefix = 

[EXPORTING] 
blueprint = quintagroup.transmogrifier.logger 
keys = 
    _type 
    _path 

7. Edit: Eine kurze Informationen, die Art von Daten ist benötigt von der reader, um die constructor Objekte zu erstellen, und welcher Abschnitt der Export-Pipeline (mit einer Idee über die notwendigen Optionen) kann leicht 150 Rufpunkte verdienen ;-)

+1

Der [Konstruktor Bauplan] (https://github.com/tobiasherp/collective.transmogrifier/blob/master/docs/source/sections/constructor.rst) muss die '_type' Taste oder ähnlich, um herauszufinden, welcher Typ erstellt werden soll und der _Pfad-Schlüssel, um herauszufinden, wo er abgelegt werden soll. Verschieben Sie den IMPORTING-Abschnitt vor dem Konstruktorabschnitt in der Pipeline und sagen Sie uns, was gedruckt wird. – Danimal

+0

@Danimal: Sie haben recht, es gibt eine erste Seite für die meisten Blaupausen. Ich habe meine Frage bearbeitet und einige Informationen hinzugefügt. – Tobias

+0

können Sie bitte Ihre Export-Pipeline pastie? – Danimal

Antwort

0

Von einem Vergleich zu quintagroup.transmogrifier's import.cfg Sie vermissen einen manifestimporter Abschnitt in Ihrer Pipeline. Ihre Pipeline lautet:

pipeline = 
    reader 
    manifestimporter 
    constructor 
    datacorrector 
    fileimporter 
    demarshaller 
    referencesimporter 
    propertiesimporter 
    commentsimporter 
    portletsimporter 
    IMPORTING 
+0

Wahr. Ich hatte dies auskommentiert, weil der 'manifimporter' keine der vorherigen Punkte weiterleitet und ich keine Dokumentation darüber finden konnte. Siehe mein Update. – Tobias

+0

Ok, aber Sie scheinen hier weit abseits der ausgetretenen Pfade zu sein. Können Sie nicht versuchen, einem der Anleitungen unten auf dieser Seite (http://projects.quintagroup.com/products/wiki/cittarroup.transmogrifier) ​​zu folgen und einen Bericht zu erstellen? "Content migration von Plone 3 nach Plone 4" wird Ihnen wahrscheinlich auch dann zusagen, wenn Sie 4 bis 4 ... – Danimal

+0

@Tobias jedes Update? – Danimal