factoring code, using settings from tabellio.config
This commit is contained in:
parent
8b8b72366a
commit
f9c06e30d5
4
setup.py
4
setup.py
|
@ -26,6 +26,10 @@ setup(name='tabellio.pcfdb',
|
|||
install_requires=[
|
||||
'setuptools',
|
||||
# -*- Extra requirements: -*-
|
||||
'tabellio.config',
|
||||
'themis.datatypes',
|
||||
'z3c.relationfield',
|
||||
'z3c.sqlalchemy',
|
||||
],
|
||||
entry_points="""
|
||||
# -*- Entry points: -*-
|
||||
|
|
|
@ -9,9 +9,30 @@
|
|||
|
||||
<browser:view
|
||||
name="sync_deputies_from_pcfdb"
|
||||
for="*"
|
||||
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
|
||||
class=".sync.SyncDeputiesFromPcfDbView"
|
||||
permission="cmf.ManagePortal"
|
||||
/>
|
||||
|
||||
<browser:view
|
||||
name="sync_commissions_from_pcfdb"
|
||||
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
|
||||
class=".sync.SyncCommissionsFromPcfDbView"
|
||||
permission="cmf.ManagePortal"
|
||||
/>
|
||||
|
||||
<browser:view
|
||||
name="sync_documents_from_pcfdb"
|
||||
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
|
||||
class=".sync.SyncDocumentsFromPcfDbView"
|
||||
permission="cmf.ManagePortal"
|
||||
/>
|
||||
|
||||
<browser:view
|
||||
name="sync_dossiers_from_pcfdb"
|
||||
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
|
||||
class=".sync.SyncDossiersFromPcfDbView"
|
||||
permission="cmf.ManagePortal"
|
||||
/>
|
||||
|
||||
</configure>
|
||||
|
|
|
@ -7,15 +7,75 @@ from zope import component
|
|||
from zope.app.intid.interfaces import IIntIds
|
||||
from z3c.relationfield import RelationValue
|
||||
|
||||
class SyncDeputiesFromPcfDbView(BrowserView):
|
||||
def __call__(self):
|
||||
portal = getToolByName(self.context, 'portal_url').getPortalObject()
|
||||
plone_tool = getToolByName(self.context, 'plone_utils')
|
||||
intids = component.getUtility(IIntIds)
|
||||
workflowTool = getToolByName(self.context, 'portal_workflow')
|
||||
from plone.registry.interfaces import IRegistry
|
||||
|
||||
c = portal.db._wrapper.connection
|
||||
cursor = c.cursor()
|
||||
from tabellio.config.interfaces import ITabellioSettings
|
||||
|
||||
|
||||
class SyncFromPcfDbView(BrowserView):
|
||||
def setup(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.intids = component.getUtility(IIntIds)
|
||||
self.portal_workflow = getToolByName(self.context, 'portal_workflow')
|
||||
self.portal_types = getToolByName(self.context, 'portal_types')
|
||||
|
||||
def db_connection(self):
|
||||
return self.portal.db._wrapper.connection
|
||||
db_connection = property(db_connection)
|
||||
|
||||
def get_folder_at_path(self, path):
|
||||
current = self.portal
|
||||
for part in path.split('/'):
|
||||
if not part:
|
||||
continue
|
||||
current = getattr(self.portal, part)
|
||||
return current
|
||||
|
||||
_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)
|
||||
|
||||
_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(polgroupdir, 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
|
||||
|
||||
|
||||
class SyncDeputiesFromPcfDbView(SyncFromPcfDbView):
|
||||
def __call__(self):
|
||||
self.setup()
|
||||
|
||||
cursor = self.db_connection.cursor()
|
||||
cursor.execute('''SELECT t_pers.id, t_pers.nom, prenom, sexe, datenaiss, t_comppol.abbr, t_arrond.nom
|
||||
FROM t_pers, t_pershistoline, t_comppol, t_parl, t_arrond
|
||||
WHERE t_pers.st = 'S_PARL' and
|
||||
|
@ -35,34 +95,69 @@ class SyncDeputiesFromPcfDbView(BrowserView):
|
|||
break
|
||||
pers_id, lastname, firstname, sex, birthdate, polgroup, district = row
|
||||
fullname = '%s %s' % (firstname, lastname)
|
||||
new_id = plone_tool.normalizeString(fullname)
|
||||
if not hasattr(self.context, new_id):
|
||||
self.context.invokeFactory('themis.datatypes.deputy', new_id,
|
||||
new_id = self.plone_utils.normalizeString(fullname)
|
||||
if not hasattr(self.deputies_folder, new_id):
|
||||
self.deputies_folder.invokeFactory('themis.datatypes.deputy', new_id,
|
||||
firstname=firstname, lastname=lastname)
|
||||
object = getattr(self.context, new_id)
|
||||
object = getattr(self.deputies_folder, new_id)
|
||||
object.firstname = firstname
|
||||
object.lastname = lastname
|
||||
object.sex = sex
|
||||
object.birthdate = birthdate
|
||||
object.district = district
|
||||
if not polgroup in polgroup_ids:
|
||||
polgroup_id = plone_tool.normalizeString(polgroup)
|
||||
polgroupdir = getattr(portal, 'groupes-politiques')
|
||||
if not hasattr(polgroupdir, polgroup_id):
|
||||
polgroupdir.invokeFactory('themis.datatypes.polgroup',
|
||||
polgroup_id, title=polgroup)
|
||||
object.polgroup = RelationValue(self.get_polgroup_intid(polgroup))
|
||||
try:
|
||||
workflowTool.doActionFor(getattr(polgroupdir, polgroup_id), 'publish')
|
||||
except WorkflowException:
|
||||
pass
|
||||
polgroup_intid = intids.getId(getattr(polgroupdir, polgroup_id))
|
||||
polgroup_ids[polgroup] = polgroup_intid
|
||||
|
||||
object.polgroup = RelationValue(polgroup_ids.get(polgroup))
|
||||
try:
|
||||
workflowTool.doActionFor(object, 'publish')
|
||||
self.portal_workflow.doActionFor(object, 'publish')
|
||||
except WorkflowException:
|
||||
pass
|
||||
|
||||
#self.request.response.redirect('./')
|
||||
|
||||
|
||||
class SyncCommissionsFromPcfDbView(SyncFromPcfDbView):
|
||||
def __call__(self):
|
||||
self.setup()
|
||||
|
||||
# comtyp, comcat
|
||||
# |
|
||||
# \-- select id, nom from t_comtyp where st = S_ACTIVE
|
||||
#
|
||||
# \-- select id, nom from t_comcat where st = S_ACTIVE
|
||||
|
||||
|
||||
|
||||
class SyncDocumentsFromPcfDbView(SyncFromPcfDbView):
|
||||
def __call__(self):
|
||||
self.setup()
|
||||
|
||||
cursor = self.db_connection.cursor()
|
||||
cursor.execute('''SELECT id, sess, date, no, nodoc, intit, auteurs, matiereids
|
||||
FROM t_document
|
||||
WHERE st = 'S_INDEXED' AND intit IS NOT NULL''')
|
||||
|
||||
type_info = self.portal_types.getTypeInfo('tabellio.documents.document')
|
||||
while True:
|
||||
row = cursor.fetchone()
|
||||
if row is None:
|
||||
break
|
||||
doc_id, sess, date, no, nodoc, intit, authors, subjects = row
|
||||
|
||||
if not hasattr(self.context, doc_id):
|
||||
type_info._constructInstance(self.context, doc_id)
|
||||
object = getattr(self.context, doc_id)
|
||||
object.title = intit
|
||||
object.date = date
|
||||
object.no = no
|
||||
object.nodoc = nodoc
|
||||
|
||||
try:
|
||||
self.portal_workflow.doActionFor(object, 'publish')
|
||||
except WorkflowException:
|
||||
pass
|
||||
|
||||
# TODO: catalog(?)
|
||||
|
||||
|
||||
class SyncDossiersFromPcfDbView(SyncFromPcfDbView):
|
||||
def __call__(self):
|
||||
self.setup()
|
||||
|
|
Reference in New Issue