def set(self, username, application, attribute, value=None): '''Retrieve configs for a user and application. Arguments: :username: owner of the configs we're searching for :application: program that the configs are for :attribute: name of the option we're setting :value: value to set in the db. If ths is None, we won't set anything ''' # Only tg controller methods are served via the web so we have to have # methods even if they could be functions. (R0201) # pylint: disable-msg=R0201 # Verify user is allowed to set this config target = People.by_username(username) if not can_edit_user(identity.current.user, target): flash(_('You cannot edit configs for %s') % username) if request_format() == 'json': return dict(exc='AuthorizationError') else: redirect('/') # Retrieve the data and reformat it as a dict keyed on attribute try: # pylint: disable-msg=E1101 config = Configs.query.filter_by( application=application, attribute=attribute).filter(People.username == username).one() config.value = value except InvalidRequestError: # There was no Config, create a new one config = Configs(application=application, attribute=attribute, value=value) # pylint: disable-msg=E1101 config.person = People.query.filter_by(username=username).one() try: # ScopedSession really does have a flush() method # pylint: disable-msg=E1101 session.flush() except SQLError, error: flash(_('Error saving the config to the database: %s' % (error))) return dict(exc='SQLError')
def set(self, username, application, attribute, value=None): '''Retrieve configs for a user and application. Arguments: :username: owner of the configs we're searching for :application: program that the configs are for :attribute: name of the option we're setting :value: value to set in the db. If ths is None, we won't set anything ''' # Only tg controller methods are served via the web so we have to have # methods even if they could be functions. (R0201) # pylint: disable-msg=R0201 # Verify user is allowed to set this config target = People.by_username(username) if not can_edit_user(identity.current.user, target): flash(_('You cannot edit configs for %s') % username) if request_format() == 'json': return dict(exc='AuthorizationError') else: redirect('/') # Retrieve the data and reformat it as a dict keyed on attribute try: # pylint: disable-msg=E1101 config = Configs.query.filter_by(application=application, attribute=attribute).filter(People.username==username).one() config.value = value except InvalidRequestError: # There was no Config, create a new one config = Configs(application=application, attribute=attribute, value=value) # pylint: disable-msg=E1101 config.person = People.query.filter_by(username=username).one() try: # ScopedSession really does have a flush() method # pylint: disable-msg=E1101 session.flush() except SQLError, error: flash(_('Error saving the config to the database: %s' % (error))) return dict(exc='SQLError')
def list(self, username, application, pattern=u'*'): '''Retrieve configs for a user and application. Arguments: :username: owner of the configs we're searching for :application: program that the configs are for :pattern: Limit the configs to ones which match this pattern. '*' is a wildcard character Returns: dict that maps the name of the config attribute to the config value. ''' # Only tg controller methods are served via the web so we have to have # methods even if they could be functions. (R0201) # pylint: disable-msg=R0201 # Verify user is allowed to view this config target = People.by_username(username) if not can_edit_user(identity.current.user, target): flash(_('You cannot look at configs for %s') % username) if request_format() == 'json': return dict(exc='AuthorizationError') else: redirect('/') # This only works if pattern is unicode. But it should be unicode # because of the validator. pattern = pattern.translate({ord(u'*'): ur'%'}).lower() # Retrieve the data and reformat it as a dict keyed on attribute # pylint: disable-msg=E1101 cfgs = Configs.query.filter_by(application=application).filter( and_(Configs.attribute.like(pattern), Configs.person_id == target.id)) # pylint: enable-msg=E1101 results = dict((cfg.attribute, cfg.value) for cfg in cfgs.all()) return dict(username=username, application=application, pattern=pattern, configs=results)
def list(self, username, application, pattern=u'*'): '''Retrieve configs for a user and application. Arguments: :username: owner of the configs we're searching for :application: program that the configs are for :pattern: Limit the configs to ones which match this pattern. '*' is a wildcard character Returns: dict that maps the name of the config attribute to the config value. ''' # Only tg controller methods are served via the web so we have to have # methods even if they could be functions. (R0201) # pylint: disable-msg=R0201 # Verify user is allowed to view this config target = People.by_username(username) if not can_edit_user(identity.current.user, target): flash(_('You cannot look at configs for %s') % username) if request_format() == 'json': return dict(exc='AuthorizationError') else: redirect('/') # This only works if pattern is unicode. But it should be unicode # because of the validator. pattern = pattern.translate({ord(u'*'): ur'%'}).lower() # Retrieve the data and reformat it as a dict keyed on attribute # pylint: disable-msg=E1101 cfgs = Configs.query.filter_by(application=application).filter( and_(Configs.attribute.like(pattern), People.username==username)) # pylint: enable-msg=E1101 results = dict((cfg.attribute, cfg.value) for cfg in cfgs.all()) return dict(username=username, application=application, pattern=pattern, configs=results)