def __call__(self, *args, **kwargs): try: return self.query(*args, **kwargs) except ConflictError: raise except: logEx("Something went wrong while trying to run the query:\n%r.\n" "Double check the %r plugin properties." % (self.absolute_url(), self.aq_parent.getId())) return self.Void()
def getUserInfo(self, user_id, auth=False): view_name = createViewName('getUserInfo', user_id) keywords = dict(auth=auth) if config.CACHE_PASSWORDS or not auth: cached_info = self.ZCacheable_get(view_name=view_name, keywords=keywords, default=_marker) if cached_info is not _marker: return cached_info try: if auth: res = self.sqlAuthUser(username=user_id) else: res = self.sqlLoadUser(username=user_id) except ConflictError: raise except: logEx("Error while trying to query user") tuples = res.tuples() if len(tuples) > 1: raise plugin_exceptions.UnexpectedResultsException \ ("The username column is not unique, found multiple " \ "records for user '%s'" % user_id) if tuples: record = tuples[0] data = { 'id': record[0], 'login': record[0], 'pluginid': self.getId(), } if auth: data['password'] = record[1] else: data = None if config.CACHE_PASSWORDS or not auth: self.ZCacheable_set(data, view_name=view_name, keywords=keywords) return data
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) isGroup = getattr(user, 'isGroup', lambda: None)() try: res = self.sqlLoadProperties(username=user.getUserName()) all = res.dictionaries() if len(all) > 0: data = all[0] del data[self.getProperty('users_col_username')] del data[self.getProperty('users_col_password')] # Remove 'id' column if it exists in database result set if data.get('id', None): del data['id'] elif self.only_for_matches: return None else: data = {} except ConflictError: raise except: data = {} logEx("Error while trying to load properties for user") items = data.items() for key, value in items: _type = type(value) if value is None: value = '' data[key] = value elif str(_type).lower().startswith("<type 'date"): value = DateTime(str(value)) data[key] = value data = self.remapKeys(data) defaults = self._getDefaultValues(isGroup) # Convert from the generic db representation to the correct type for name, property_type in self._getSchema(isGroup) or (): if name in data.keys(): if property_type == 'string' or property_type == 'text': continue elif property_type == 'int': data[name] = int(data[name]) elif property_type == 'float': data[name] = float(data[name]) elif property_type == 'long': data[name] = long(data[name]) elif property_type == 'boolean': if data[name] == '1': data[name] = 1 else: data[name] = 0 elif property_type == 'date': data[name] = DateTime(data[name]) elif property_type == 'lines': data[name] = tuple(data[name]) else: raise ValueError, 'Property %s: unknown type' % property_type # Provide default values where missing if not data: data = {} for key, val in defaults.items(): if not data.has_key(key): data[key] = val self.ZCacheable_set(data, view_name=view_name) sheet = MutablePropertySheet(self.id, **data) return sheet