def getPropertiesForUser(self, user, request=None): """Get property values for a user or group. Returns a dictionary of values or a PropertySheet. """ view_name = createViewName('getPropertiesForUser', user) cached_info = self.ZCacheable_get(view_name=view_name) if cached_info is not None: return MutablePropertySheet(self.id, **cached_info) data = None session = Session() if user.isGroup(): groups = session.query(domain.Group).filter( domain.Group.group_principal_id == user.getUserName()).all() if len(groups) == 1: group = groups[0] data = { 'title': group.short_name or u"", 'description': group.description or u"", } else: users = session.query(domain.User).filter( domain.User.login == user.getUserName()).all() if len(users) == 1: b_user = users[0] data = { 'fullname': u"%s %s" % (b_user.first_name, b_user.last_name), 'email': b_user.email or u"", 'description': b_user.description or u"", 'notification': b_user.recieve_notification or False, } if data: self.ZCacheable_set(data, view_name=view_name) sheet = MutablePropertySheet(self.id, **data) return sheet
def getPropertiesForUser(self, user, request=None): """Get property values for a user or group. Returns a dictionary of values or a PropertySheet. """ view_name = createViewName('getPropertiesForUser', user) cached_info = self.ZCacheable_get(view_name=view_name) if cached_info is not None: return MutablePropertySheet(self.id, **cached_info) data = None if user.isGroup(): http_obj = httplib2.Http() query = '/++rest++brs/groups?' params = urllib.urlencode({'user_name': user.getUserName()}) resp, content = http_obj.request(connection_url() + query + params, "GET") data = simplejson.loads(content) else: http_obj = httplib2.Http() query = '/++rest++brs/users?' params = urllib.urlencode({'user_name': user.getUserName()}) resp, content = http_obj.request(connection_url() + query + params, "GET") data = simplejson.loads(content) if data: self.ZCacheable_set(data, view_name=view_name) sheet = MutablePropertySheet(self.id, **data) return sheet
def getPropertiesForUser(self, user, request=None): """Get properties for this group. """ properties = {} catalog = api.portal.get_tool('portal_catalog') query = {'object_provides': WORKSPACE_INTERFACE, 'getId': user.getId()} brains = catalog.unrestrictedSearchResults(query) # Pick the first result. Ignore potential catalog problems if len(brains): portal_path = api.portal.get().getPhysicalPath() brain = brains[0] ws_obj = brain._unrestrictedGetObject() properties['title'] = safe_unicode(brain.Title) properties['description'] = safe_unicode(brain.Description) path = '/' + '/'.join(ws_obj.getPhysicalPath()[len(portal_path):]) properties['workspace_path'] = path properties['state'] = api.content.get_state(ws_obj) properties['uid'] = ws_obj.UID() properties['type'] = 'workspace' properties['portal_type'] = ws_obj.portal_type # We need to explicitly cast the type to a string type, since # the property sheet pukes on zope.i18nmessageid.message.Message typ = safe_unicode(ws_obj.Type()).encode('utf-8') properties['workspace_type'] = typ return MutablePropertySheet(self.context.getId(), **properties)
def getPropertiesForUser(self, user, request=None): """Get property values for a user or group. Returns a dictionary of values or a PropertySheet. """ #print "--- getPropertiesForUser ---" try: username = user.getUserName() except: username = user #print "username : %s" % username if request and request.SESSION.get("sheetJalon%s" % username): #print "session" return request.SESSION.get("sheetJalon%s" % username) #print "pas de session" data = {} portal = self.portal_url.getPortalObject() portal_jalon_bdd = portal.portal_jalon_bdd individu = portal_jalon_bdd.getIndividuLITE(username) #print "APPEL BDD" if individu is not None: #print "creation session" data["fullname"] = "%s %s" % (individu["LIB_PR1_IND"], individu["LIB_NOM_PAT_IND"]) data["email"] = individu["EMAIL_ETU"] data["role"] = individu["TYPE_IND"] sheet = MutablePropertySheet(username, **data) if request: request.SESSION.set("sheetJalon%s" % username, sheet) return sheet return None
def getPropertiesForUser(self, user, request=None): '''Get properties for this group. ''' properties = { 'id': self.canonical, 'title': self.title.encode('utf8'), 'description': (self.description or u'').encode('utf8'), 'email': (self.mail or u'').encode('utf8'), 'canonical': self.canonical.encode('utf8'), 'object_id': self.id, } return MutablePropertySheet(**properties)
def testUpdateZapsCache(self): self.plugin.getPropertiesForUser(self.user) info = { 'fullname': u'Jane Doe', } sheet = MutablePropertySheet("memberdata", **info) self.plugin.setPropertiesForUser(self.user, sheet) view_name = createViewName('getPropertiesForUser', self.username) user = self.plugin.ZCacheable_get(view_name=view_name, keywords=dict(auth=False), default=_marker) self.failUnless(user is _marker)
def getPropertiesForUser(self, user, request=None): illegal_ids = ['id'] properties = {} schemata = self.context.Schemata() for ups in self.context.getUserPropertySchemata(): schema = schemata.get(ups, None) if schema is not None: for field in schema.fields(): if field.getName() not in illegal_ids: value = field.get(self.context) properties[field.getName()] = \ value is not None and value or '' return MutablePropertySheet(self.context.getId(), **properties)
def testEnumerateNoAscii(self): info = { 'fullname': u'J\xfcrgen Schmoe', } sheet = MutablePropertySheet("memberdata", **info) self.plugin.setPropertiesForUser(self.user, sheet) props = self.plugin.getPropertiesForUser(self.user) self.assertEqual(props.getProperty('fullname'), u'J\xfcrgen Schmoe') ret = self.plugin.enumerateUsers(fullname='Schmoe') self.assertEqual(len(ret), 1) ret = self.plugin.enumerateUsers(fullname=u'J\xfcrgen') self.assertEqual(len(ret), 1) ret = self.plugin.enumerateUsers(fullname='Not There') self.assertEqual(len(ret), 0)
def getPropertiesForUser(self, user, request=None): """Get property values for a user or group. Returns a dictionary of values or a PropertySheet. """ view_name = createViewName('getPropertiesForUser', user.getUserName()) cached_info = self.ZCacheable_get(view_name=view_name) if cached_info is not None: return MutablePropertySheet(self.id, **cached_info) data = None session = Session() if user.isGroup(): data = {'name': user.getId()} else: user = session.query( model.User).filter_by(name=user.getUserName()).first() if user is not None: d = user.__dict__.copy() # remove system attributes d.pop('password') d.pop('name') d.pop('groups', None) # convert dates for name, value in d.items(): if isinstance(value, datetime.datetime): d[name] = DateTime(str(value)) data = dict((name, value) for (name, value) in d.items() if not name.startswith('_') and value is not None) if data: self.ZCacheable_set(data, view_name=view_name) data.pop('id', None) sheet = MutablePropertySheet(self.id, **data) return sheet
def testSetPropertiesForUser(self): props = self.source_properties.getPropertiesForUser(self.user) self.assertEqual(props.getProperty('fullname'), u'') self.assertEqual(props.getProperty('email'), u'') # The plugin should (at least in plone 4) return what it is given - # this is the behaviour of the PlonePAS property plugin. If it is # unicode, it will later be converted to utf-8. (In # PlonePAS/plugins/ufactory.py(220)getProperty()) info = { 'fullname': u'J\xfcrgen Schmoe', 'email': '*****@*****.**' } sheet = MutablePropertySheet("memberdata", **info) self.source_properties.setPropertiesForUser(self.user, sheet) props = self.source_properties.getPropertiesForUser(self.user) for name, value in info.items(): self.assertTrue(name in props.propertyIds()) self.assertEqual(props.getProperty(name), value)
def getPropertiesForUser(self, user, request=None): """Retorna as propriedades de uma pessoa. """ api = getUtility(ISPDOAPI) pessoa = api.getPessoaByEmail(user.getId()) if pessoa is None: return {} keys = Pessoa.__mapper__.columns.keys() remove_keys = ['id', 'nome', 'senha', 'version', 'version_date'] keys = [k for k in keys if k not in remove_keys] data = { 'fullname': pessoa.nome, } for k in keys: value = getattr(pessoa, k) if isinstance(value, unicode): data[k] = value.encode('utf-8') elif value is not None: data[k] = value return MutablePropertySheet(self.id, **data)
def getPropertiesForUser(self, user, request=None): """Get properties for this user. Find the fields of the user schema that make sense as a user property in @@personal-information. Note: this method gets called a crazy amount of times... Also, it looks like we can ignore the user argument and just check self.context. """ properties = dict(fullname=self.fullname, ) for prop_name, field_name in self.property_map.items(): value = getattr(self.context, field_name, None) if value is None: # Would give an error like this: # ValueError: Property home_page: unknown type value = u'' properties[prop_name] = value return MutablePropertySheet(self.context.getId(), **properties)
def getPropertiesForUser(self, user, request=None): """ Retrieve all the IMembraneUserProperties property providers and delegate to them. """ properties = {} prop_providers = self._getPropertyProviders(user) for mem_props in prop_providers: psheet = mem_props.getPropertiesForUser(user, request) if psheet: if IPropertySheet.providedBy(psheet): items = psheet.propertyItems() else: items = psheet.items() for prop, value in items: properties[prop] = value if 'id' in properties: # When instantiating sheet(id, **props) is used - two ids is bad del properties['id'] return MutablePropertySheet(self.id, **properties)
def getPropertiesForUser(self, user, request=None): """ Find the fields that have true value for 'user_property' and return the values, using user_property value as the property name if it is a string. """ properties = {} schema = self.context.Schema() for field in schema.filterFields(self._isPropertyField): # use the accessor if available: accessor = field.getAccessor(self.context) if accessor is not None: value = accessor() else: value = field.get(self.context) user_prop = field.user_property prop_name = (isinstance(user_prop, str) and user_prop) or \ field.getName() if value is None: value = '' properties[prop_name] = value return MutablePropertySheet(self.context.getId(), **properties)
def getPropertiesForUser(self, user, request=None): """Get property values for a user or group. Returns a dictionary of values or a PropertySheet. This implementation will always return a MutablePropertySheet. NOTE: Must always return something, or else the property sheet won't get created and this will screw up portal_memberdata. """ isGroup = getattr(user, 'isGroup', lambda: None)() data = self._storage.get(user.getId()) defaults = self._getDefaultValues(isGroup) # provide default values where missing if not data: data = {} for key, val in list(defaults.items()): if key not in data: data[key] = val return MutablePropertySheet(self.id, schema=self._getSchema(isGroup), **data)
def getPropertiesForUser(self, user, request=None): """ user -> {} o User will implement IPropertiedUser. o Plugin should return a dictionary or an object providing IPropertiesPlugin. o Plugin may scribble on the user, if needed (but must still return a mapping, even if empty). o May assign properties based on values in the REQUEST object, if present """ if isinstance(user, basestring): user_id = user else: user_id = user.getId() properties = {'fullname': '', 'email': ''} return MutablePropertySheet(self.id, **properties)
def getPropertiesForUser(self, user, request=None): """Get property values for a user or group. Returns a dictionary of values or a PropertySheet. """ #print "--- getPropertiesForUser ---" #print request.SESSION #print request.SESSION if request and "__cas_assertion" in str(request.SESSION): return None try: username = user.getUserName() except: username = user if request and request.SESSION.get("sheetSygefor%s" % username): print "session" return request.SESSION.get("sheetSygefor%s" % username) print "pas de session" #view_name = createViewName('getPropertiesForUser', username) #cached_info = self.ZCacheable_get(view_name=view_name) #if cached_info is not None: # return MutablePropertySheet(self.id, **cached_info) #print "Pas en cache" data = None session = self.Session() login = username #if login.startswith("0syg0"): login = login[5:] #user = session.query(models.User).join(models.UserInfos, models.User.idTiers==models.UserInfos.idTiers).filter(models.User.loginStagiaire==user.getUserName()).options(contains_eager(models.User)).first() userSyg = session.query( models.User).filter(models.User.loginStagiaire == login).first() #user = session.query(models.User.idTiers, models.UserInfos.idTiers).filter(rdb.and_(models.User.idTiers==models.UserInfos.idTiers, models.User.loginStagiaire==user.getUserName())).first() if userSyg is not None: d = userSyg.__dict__.copy() #print d # remove system attributes d.pop('loginStagiaire') d.pop('passwordStagiaire') # convert dates for name, value in d.items(): if isinstance(value, datetime.datetime): d[name] = DateTime(str(value)) data = dict((name, value) for (name, value) in d.items() if not name.startswith('_') and value is not None) user_infos = session.query(models.UserInfos).filter( models.UserInfos.idTiers == int(data["idTiers"])).first() if user_infos: dico = user_infos.__dict__.copy() data["fullname"] = "%s %s" % (dico["nomTiers"], dico["prenomTiers"]) data["email"] = dico["mailTiers"] #data["fullname"] = "%s %s" % (data["lastname"], data["firstname"]) #print data session.close() #self.ZCacheable_set(data, view_name=view_name) if data: #self.ZCacheable_set(data, view_name=view_name) idSyg = data.pop('id', None) sheet = MutablePropertySheet(idSyg, **data) if request: request.SESSION.set("sheetSygefor%s" % username, sheet) return sheet
def testPropertyLoadedFromSQL(self): value = 'snakes in a train' self.source_properties.setPropertiesForUser( self.user, MutablePropertySheet("memberdata", fullname=value)) props = self.source_properties.getPropertiesForUser(self.user) self.assertEqual(props.getProperty("fullname"), value)