Esempio n. 1
0
File: sql.py Progetto: dtgit/dtedu
 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()
Esempio n. 2
0
    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
Esempio n. 3
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)

        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