Products.csvreplicata 1.0.7
CSV import/export for Archetypes
Introduction
============
Allows to export and import AT objects contents and hierarchy.
Changelog
=========
1.0.7
----------------
* Prevent fixTools from running outside of the context of Products.csvreplicata [pigeonflight]
* Fix export when data value is not ascii [yboussard]
1.0.6
----------------
* support vocabulary defined as object method
Contribution from Jim BAACK
1.0.5
----------------
* fix bug crc32 with large media files
* when you set a CSVHandledTypesSchematas default is automatically preselected for user convenience
Contribution from Jean-Philippe CAMGUILHEM
1.0.4
----------------
* Uninstall problem fix
IMPORTANT NOTE: when migrating from previous versions, you need to uninstall csvreplicata and then reinstall csvreplicata.
Contribution from Jean-Philippe CAMGUILHEM
1.0.3
----------------
* Custom handlers can be now implemented outside the product, and dynamically declared to the csvreplicata tool.
Contribution from Jean-Philippe CAMGUILHEM
1.0.2
----------------
* Initial release. Contributors: Eric BREHAULT / Christophe SAUTHIER
1.0
----------------
* Unreleased
CSV Replicator
==============
Overview
--------
A description of csv replicata here.
Interfaces
----------
import interfaces and classes ::
>>> from zope.interface.verify import verifyClass
>>> from zope.interface import implements
>>> from Products.csvreplicata.handlers.base import CSVdefault
>>> from Products.csvreplicata.handlers.file import CSVFile
>>> from Products.csvreplicata.interfaces import ICSVDefault, ICSVFile
Verify implementation ::
>>> verifyClass(ICSVDefault, CSVdefault)
True
>>> verifyClass(ICSVFile, CSVFile)
True
Default handlers
----------------
Verify the default handlers provided for Archetypes fields::
>>> self.portal.portal_csvreplicatatool.getHandlers()
{'Products.Archetypes.Field.DateTimeField':
{'handler_class':
>> class MyCSV(CSVdefault) :
... implements(ICSVDefault)
...
... def get(self, obj, field, context=None):
... pass
...
... def set(self, obj, field, value, context=None):
... pass
>>> verifyClass(ICSVDefault, MyCSV)
True
Ok now we could register a new handler to csvrplica tool and the way is the same in both cases.
We have to set a new handler to the tool with the appropriated method. ::
>>> self.portal.portal_csvreplicatatool.setHandler('Myproduct.Field.MyField',
... {'handler_class': MyCSV(), 'file': False})
>>> 'Myproduct.Field.MyField' \
... in self.portal.portal_csvreplicatatool.getHandlers()
True
of course setHandler() permits to edit an existing handler too ! ::
>>> class AnotherMyCSV(MyCSV) :
... pass
>>> self.portal.portal_csvreplicatatool.setHandler('Myproduct.Field.MyField',
... {'handler_class': AnotherMyCSV(), 'file': False})
>>> self.portal.portal_csvreplicatatool.getHandlers()['Myproduct.Field.MyField']
{'handler_class': >> self.portal.portal_csvreplicatatool.delHandler('Myproduct.Field.MyField')
>>> 'Myproduct.Field.MyField' in self.portal.portal_csvreplicatatool.getHandlers()
False
Export / Import
---------------
Export
______
here we export folders and documents ::
>>> import re
>>> self.setRoles(['Manager'])
>>> id=self.folder.invokeFactory('Document', id='doc1', title="Document 1")
>>> id=self.folder.invokeFactory('Document', id='doc2', title="Document 2")
>>> id=self.folder.invokeFactory('Document', id='doc3',
... title="Document 'super' 3")
>>> id=self.folder.invokeFactory('Document', id='doc4', title="Document 4")
>>> id=self.folder.invokeFactory('Folder', id='sub1', title="Séléction")
>>> id=self.folder.sub1.invokeFactory('Document', id='doc11',
... title="Document 1 du dossier 1")
>>> self.portal.portal_csvreplicatatool.getEncoding()
'UTF-8'
>>> self.portal.portal_csvreplicatatool.getDelimiter()
';'
>>> self.portal.portal_csvreplicatatool.getStringdelimiter()
'"'
>>> self.portal.portal_csvreplicatatool.replicabletypes = \
... {'Document':['default'], 'Folder':['default']}
>>> from Products.csvreplicata.interfaces import Icsvreplicata
>>> replicator = Icsvreplicata(self.folder)
>>> re.sub(';\d{14}',';YYYYMMDDhhmmss',
... replicator.csvexport(exportable_content_types=['Document', 'Folder']))
'"/plone/Members/test_user_1_";YYYYMMDDhhmmss\r\n"parent";"id";"type";"title";"description";"text"\r\n"Parent folder";"Identifier";"Content type";"Title";"label_description";"label_body_text"\r\n"";"doc1";"Document";"Document 1";"";""\r\n"";"doc2";"Document";"Document 2";"";""\r\n"";"doc3";"Document";"Document \'super\' 3";"";""\r\n"";"doc4";"Document";"Document 4";"";""\r\n"parent";"id";"type";"title";"description"\r\n"Parent folder";"Identifier";"Content type";"Title";"label_description"\r\n"";"sub1";"Folder";"S\xc3\xa9l\xc3\xa9ction";""\r\n'
>>> re.sub(';\d{14}',';YYYYMMDDhhmmss',
... replicator.csvexport(depth=2, exportable_content_types=['Document', 'Folder']))
'"/plone/Members/test_user_1_";YYYYMMDDhhmmss\r\n"parent";"id";"type";"title";"description";"text"\r\n"Parent folder";"Identifier";"Content type";"Title";"label_description";"label_body_text"\r\n"";"doc1";"Document";"Document 1";"";""\r\n"";"doc2";"Document";"Document 2";"";""\r\n"";"doc3";"Document";"Document \'super\' 3";"";""\r\n"";"doc4";"Document";"Document 4";"";""\r\n"parent";"id";"type";"title";"description"\r\n"Parent folder";"Identifier";"Content type";"Title";"label_description"\r\n"";"sub1";"Folder";"S\xc3\xa9l\xc3\xa9ction";""\r\n"parent";"id";"type";"title";"description";"text"\r\n"Parent folder";"Identifier";"Content type";"Title";"label_description";"label_body_text"\r\n"sub1";"doc11";"Document";"Document 1 du dossier 1";"";""\r\n'
>>> self.portal.portal_csvreplicatatool.setEncoding('windows-1256')
>>> re.sub(';\d{14}',';YYYYMMDDhhmmss',
... replicator.csvexport(depth=2, exportable_content_types=['Folder']))
'"/plone/Members/test_user_1_";YYYYMMDDhhmmss\r\n"parent";"id";"type";"title";"description"\r\n"Parent folder";"Identifier";"Content type";"Title";"label_description"\r\n"";"sub1";"Folder";"S\xe9l\xe9ction";""\r\n'
import
______
see data in tests/test_file.csv ::
>>> import os
>>> from Globals import package_home
>>> from Products.csvreplicata.tests import GLOBALS
>>> path = os.path.join(package_home(GLOBALS), 'test_file.csv')
>>> fd = open(path, 'rb')
>>> replicator.csvimport(fd, datetimeformat='%d/%m/%Y')
(1, 1, DateTime('2050/10/20 12:12:00 GMT+1'), [])
>>> fd.close()
>>> self.folder.doc1.Title()
'Document 1 NEW'
>>> self.folder.doc5
| File | Type | Py Version | Uploaded on | Size | # downloads |
|---|---|---|---|---|---|
| Products.csvreplicata-1.0.7-py2.4.egg (md5) | Python Egg | 2.4 | 2009-07-15 16:54:31.699624 | 59KB | 275 |
- Author: Eric BREHAULT <eric brehault at makina-corpus org>
- Home Page: http://plone.org/products/csvreplicata
- Keywords: archetypes,import/export,csv,replication,synchronisation
- License: GPL
- Categories
- Package Index Owner: ebrehault
- DOAP record: Products.csvreplicata-1.0.7.xml
Log in to rate this package.
