Code to import deputies from a dump of pfb mysql database
This commit is contained in:
parent
74f503926d
commit
de59716cfe
|
@ -14,4 +14,11 @@
|
|||
permission="cmf.ManagePortal"
|
||||
/>
|
||||
|
||||
<browser:view
|
||||
name="importdeputies"
|
||||
for="*"
|
||||
class=".migration.ImportDeputies"
|
||||
permission="cmf.ManagePortal"
|
||||
/>
|
||||
|
||||
</configure>
|
||||
|
|
|
@ -4,7 +4,10 @@ import cPickle
|
|||
import os
|
||||
import datetime
|
||||
import cStringIO
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
from zope.app.intid.interfaces import IIntIds
|
||||
from z3c.relationfield import RelationValue
|
||||
from Products.Five.browser import BrowserView
|
||||
from Products.CMFCore.utils import getToolByName
|
||||
from plone.dexterity.factory import DexterityFactory
|
||||
|
@ -13,8 +16,17 @@ try:
|
|||
from plone.namedfile.file import NamedBlobFile as NamedFile
|
||||
except ImportError:
|
||||
from plone.namedfile.file import NamedFile
|
||||
try:
|
||||
from plone.namedfile.file import NamedBlobImage as NamedImage
|
||||
except ImportError:
|
||||
from plone.namedfile.file import NamedImage
|
||||
from Products.CMFCore.WorkflowCore import WorkflowException
|
||||
|
||||
from plone.registry.interfaces import IRegistry
|
||||
from zope import component
|
||||
|
||||
from tabellio.config.interfaces import ITabellioSettings
|
||||
|
||||
class Migrate(BrowserView):
|
||||
def __call__(self):
|
||||
self.logfile = file('/tmp/migration.log', 'a+')
|
||||
|
@ -281,3 +293,105 @@ class Migrate(BrowserView):
|
|||
pass
|
||||
|
||||
return 'deputy:'+author_id
|
||||
|
||||
class ImportDeputies(BrowserView):
|
||||
def __call__(self):
|
||||
self.settings = component.getUtility(IRegistry).forInterface(ITabellioSettings, False)
|
||||
self.portal = getToolByName(self.context, 'portal_url').getPortalObject()
|
||||
self.plone_utils = getToolByName(self.context, 'plone_utils')
|
||||
self.portal_workflow = getToolByName(self.context, 'portal_workflow')
|
||||
self.intids = component.getUtility(IIntIds)
|
||||
self.portal_types = getToolByName(self.context, 'portal_types')
|
||||
|
||||
path = self.request.form.get('path')
|
||||
if not path:
|
||||
path = '/tmp/Datas_pertinentes_sitePFBactu.xml'
|
||||
base_picdir = os.path.join(os.path.dirname(path), 'pictures')
|
||||
|
||||
plone_tool = getToolByName(self.context, 'plone_utils')
|
||||
|
||||
doc = ET.parse(path)
|
||||
|
||||
# get mapping for political groups
|
||||
polgroups = {}
|
||||
for d in doc.findall('groupesPolitiques'):
|
||||
polgroup_id = d.find('grpPolId').text
|
||||
polgroup_name = d.find('grpPolName').text
|
||||
polgroups[polgroup_id] = polgroup_name
|
||||
|
||||
for d in self.deputies_folder.objectValues():
|
||||
d.active = False
|
||||
|
||||
# import deputies
|
||||
for d in doc.findall('parlementaires'):
|
||||
firstname = d.find('parlFirstName').text
|
||||
lastname = d.find('parlLastName').text
|
||||
parlname = u'%s %s' % (lastname, firstname)
|
||||
parl_id = plone_tool.normalizeString(parlname)
|
||||
if not hasattr(self.deputies_folder, parl_id):
|
||||
print 'Created deputy:', firstname, lastname
|
||||
self.deputies_folder.invokeFactory('themis.datatypes.deputy',
|
||||
parl_id, firstname=firstname, lastname=lastname)
|
||||
object = getattr(self.deputies_folder, parl_id)
|
||||
day, month, year = d.find('parlBirthday').text.split('-')
|
||||
object.active = True
|
||||
object.birthdate = datetime.datetime(int(year), int(month), int(day))
|
||||
object.birthplace = d.find('parlLocBirthDay').text
|
||||
object.polgroup = RelationValue(self.get_polgroup_intid(
|
||||
polgroups.get(d.find('grpPolId').text)))
|
||||
pic_filename = d.find('parlPicture').text
|
||||
pic_filepath = os.path.join(base_picdir, pic_filename)
|
||||
if os.path.exists(pic_filepath):
|
||||
fd = file(pic_filepath)
|
||||
object.picture = NamedImage(fd.read(), filename=unicode(pic_filename))
|
||||
fd.close()
|
||||
|
||||
|
||||
_polgroups_folder = None
|
||||
def polgroups_folder(self):
|
||||
if self._polgroups_folder:
|
||||
return self._polgroups_folder
|
||||
path = self.settings.polgroupsPath
|
||||
self._polgroups_folder = self.get_folder_at_path(path)
|
||||
return self._polgroups_folder
|
||||
polgroups_folder = property(polgroups_folder)
|
||||
|
||||
|
||||
_polgroups_intids = None
|
||||
def get_polgroup_intid(self, title):
|
||||
if not self._polgroups_intids:
|
||||
self._polgroups_intids = {}
|
||||
|
||||
if title in self._polgroups_intids:
|
||||
return self._polgroups_intids.get(title)
|
||||
|
||||
polgroup_id = self.plone_utils.normalizeString(title)
|
||||
if not hasattr(self.polgroups_folder, polgroup_id):
|
||||
self.polgroups_folder.invokeFactory('themis.datatypes.polgroup', polgroup_id, title=title)
|
||||
try:
|
||||
self.portal_workflow.doActionFor(getattr(self.polgroups_folder, polgroup_id), 'publish')
|
||||
except WorkflowException:
|
||||
pass
|
||||
polgroup_intid = self.intids.getId(getattr(self.polgroups_folder, polgroup_id))
|
||||
self._polgroups_intids[title] = polgroup_intid
|
||||
return polgroup_intid
|
||||
|
||||
_deputies_folder = None
|
||||
def deputies_folder(self):
|
||||
if self._deputies_folder:
|
||||
return self._deputies_folder
|
||||
path = self.settings.deputiesPath
|
||||
self._deputies_folder = self.get_folder_at_path(path)
|
||||
return self._deputies_folder
|
||||
deputies_folder = property(deputies_folder)
|
||||
|
||||
|
||||
def get_folder_at_path(self, path):
|
||||
current = self.portal
|
||||
for part in path.split('/'):
|
||||
if not part:
|
||||
continue
|
||||
current = getattr(current, part)
|
||||
return current
|
||||
|
||||
|
||||
|
|
Reference in New Issue