Discussion:
Script python pour affecter un groupe à un utilisateur
DAVID STAVASIUS
2009-09-16 14:17:49 UTC
Permalink
Bonjour,

Je cherche à affecter un groupe à plusieurs utilisateurs et ce via un script python mais je n'y arrive pas...

Est ce que quelqu'un connait le script à faire pour celà ?

Merci d'avance.

Cordialement,
______________________________________________
David STAVASIUS
Webmestre
Hôpital Saint - Jean
Service Informatique
Tel. 04-68-61-66-06
Fax. 04-68-61-62-21
Portail: http://10.0.0.53
Site Internet: http://www.ch-perpignan.fr
M.-A. DARCHE
2009-09-16 16:25:08 UTC
Permalink
Post by DAVID STAVASIUS
Bonjour,
Bonjour,
Post by DAVID STAVASIUS
Je cherche à affecter un groupe à plusieurs utilisateurs et ce via un
script python mais je n'y arrive pas...
Est ce que quelqu'un connait le script à faire pour celà ?
Pour quelle version de CPS ?


Cordialement,
--
Marc-Aurèle DARCHE
AFUL http://www.aful.org/
Association Francophone des Utilisateurs de Logiciels Libres
French speaking Libre Software Users' Association
DAVID STAVASIUS
2009-09-17 10:08:37 UTC
Permalink
Bonjour,

Je cherche à affecter un groupe à plusieurs utilisateurs et ce via un script python mais je n'y arrive pas...

Zope Version
(Zope 2.8.1-final, python 2.4.3, linux2)

CPS Version
(CPS-3.3.2)

Merci d'avance.



Cordialement,
______________________________________________
David STAVASIUS
Webmestre
Hôpital Saint - Jean
Service Informatique
Tel. 04-68-61-66-06
Fax. 04-68-61-62-21
Portail: http://10.0.0.53
Site Internet: http://www.ch-perpignan.fr
M.-A. DARCHE
2009-09-17 12:47:54 UTC
Permalink
Post by DAVID STAVASIUS
Je cherche à affecter un groupe à plusieurs utilisateurs et ce via un script python mais je n'y arrive pas...
Zope Version
(Zope 2.8.1-final, python 2.4.3, linux2)
CPS Version
(CPS-3.3.2)
Ci-joint un module directories.py (que je copie également en bas
de ce courriel, mais le fichier attaché sera plus rapide à exploiter)
d'exemple à mettre dans un répertoire Extensions de votre choix
(par exemple celui à la racine de votre instance Zope, ou celui
d'un produit que vous aurez développé).

Pour l'exécuter il faut :

1. Créer une External Method à la racine de votre instance Zope
avec les paramètres suivants :

Id : setSomeGroupToSomeUsers
Module Name : directories
Function Name : setSomeGroupToSomeUsers

2. Exécuter cette External Method en allant sur le lien
de l'onglet « Test »


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

"""Module for external methods.
"""

import logging

from AccessControl import Unauthorized

from Products.CMFCore.CMFCorePermissions import View, ManagePortal
from Products.CMFCore.utils import getToolByName
from Products.CMFCore.utils import _checkPermission

LOG_KEY = 'directories'

def setSomeGroupToSomeUsers(self):
"""Set a group to several users.
"""
log_key = LOG_KEY + '.setSomeGroupToSomeUsers'
logger = logging.getLogger(log_key)
logger.debug("...")

utool = getToolByName(self, 'portal_url')
portal = utool.getPortalObject()
if not _checkPermission(ManagePortal, portal):
raise Unauthorized("You need the ManagePortal permission.")

dtool = getToolByName(self, 'portal_directories')
members_directory = dtool.members
# The method returns a list of tuples containing the member id
# and a dictionary of available fields:
# [('member1', {'email': 'foo', 'age': 75}), ('member2', {'age': 5})]
#entries = members_directory.searchEntries(return_fields=return_fields,
entries_ids = members_directory.listEntryIds()
for entry_id in entries_ids:
entry = members_directory.getEntry(entry_id)
logger.debug("entry = %s" % str(entry))

# Uncomment this to also modify the roles
#entry['roles'] = ['Member']

# Modifying the entry
groups = list(entry['groups'])
logger.debug("previous groups = %s" % str(groups))

groups.append('another_group')
logger.debug("new groups = %s" % str(groups))

entry['groups'] = groups

# Saving the modified entry in the directory
members_directory.editEntry(entry)




Cordialement,
--
Marc-Aurèle DARCHE
AFUL http://www.aful.org/
Association Francophone des Utilisateurs de Logiciels Libres
French speaking Libre Software Users' Association
DAVID STAVASIUS
2009-09-18 10:08:21 UTC
Permalink
En exécutant l'External Method, j'ai le message d'erreur suivant :
argument 2 to map() must support iteration

Traceback (innermost last): Module ZPublisher.Publish, line 113, in publish Module ZPublisher.mapply, line 88, in mapply Module ZPublisher.Publish, line 40, in call_object Module Products.ExternalMethod.ExternalMethod, line 225, in __call__
__traceback_info__: ((<Folder at /portail/portal_skins/custom>,), {}, None) Module /usr/local/portail/webpages/cps/Extensions/directories.py, line 47, in setSomeGroupToSomeUsers Module Products.CPSDirectory.BaseDirectory, line 462, in editEntry Module Products.CPSSchemas.DataModel, line 314, in _commit Module Products.CPSSchemas.DataModel, line 340, in _commitData Module Products.CPSSchemas.StorageAdapter, line 138, in setData Module Products.CPSDirectory.MembersDirectory, line 352, in _setData Module Products.CPSDirectory.MemberToolsPatch, line 323, in setMemberProperties Module Products.LDAPUserGroupsFolder.LDAPUser, line 406, in setProperties Module Products.LDAPUserGroupsFolder.LDAPUserFolder, line 2535, in manage_editUser Module Products.LDAPUserGroupsFolder.LDAPDelegate, line 401, in modifyTypeError: argument 2 to map() must support iteration




Cordialement,
______________________________________________
David STAVASIUS
Webmestre
Hôpital Saint - Jean
Service Informatique
Tel. 04-68-61-66-06
Fax. 04-68-61-62-21
Portail: http://10.0.0.53
Site Internet: http://www.ch-perpignan.fr
M.-A. DARCHE
2009-09-22 10:31:20 UTC
Permalink
Post by DAVID STAVASIUS
argument 2 to map() must support iteration
[...]
Le code que j'ai posté précédemment a été testé avec un CPS ayant
un annuaire ZODB et pas un LDAPUserGroupsFolder comme l'erreur
que vous avez postée l'indique.

Arrivez-vous à modifier sans problème les groupes par l'intermédiaire
de l'interface web ?


Cordialement,
--
Marc-Aurèle DARCHE
AFUL http://www.aful.org/
Association Francophone des Utilisateurs de Logiciels Libres
French speaking Libre Software Users' Association
Loading...