def action_logger(user, action, repo, ipaddr='', sa=None, commit=False): """ Action logger for various actions made by users :param user: user that made this action, can be a unique username string or object containing user_id attribute :param action: action to log, should be on of predefined unique actions for easy translations :param repo: string name of repository or object containing repo_id, that action was made on :param ipaddr: optional ip address from what the action was made :param sa: optional sqlalchemy session """ if not sa: sa = meta.Session try: if hasattr(user, 'user_id'): user_obj = user elif isinstance(user, basestring): user_obj = User.get_by_username(user) else: raise Exception('You have to provide user object or username') if hasattr(repo, 'repo_id'): repo_obj = Repository.get(repo.repo_id) repo_name = repo_obj.repo_name elif isinstance(repo, basestring): repo_name = repo.lstrip('/') repo_obj = Repository.get_by_repo_name(repo_name) else: raise Exception('You have to provide repository to action logger') user_log = UserLog() user_log.user_id = user_obj.user_id user_log.action = safe_unicode(action) user_log.repository_id = repo_obj.repo_id user_log.repository_name = repo_name user_log.action_date = datetime.datetime.now() user_log.user_ip = ipaddr sa.add(user_log) log.info( 'Adding user %s, action %s on %s' % (user_obj, action, safe_unicode(repo)) ) if commit: sa.commit() except: log.error(traceback.format_exc()) raise
def action_logger(user, action, repo, ipaddr="", sa=None): """ Action logger for various actions made by users :param user: user that made this action, can be a unique username string or object containing user_id attribute :param action: action to log, should be on of predefined unique actions for easy translations :param repo: string name of repository or object containing repo_id, that action was made on :param ipaddr: optional ip address from what the action was made :param sa: optional sqlalchemy session """ if not sa: sa = meta.Session() try: if hasattr(user, "user_id"): user_obj = user elif isinstance(user, basestring): user_obj = User.get_by_username(user) else: raise Exception("You have to provide user object or username") rm = RepoModel() if hasattr(repo, "repo_id"): repo_obj = rm.get(repo.repo_id, cache=False) repo_name = repo_obj.repo_name elif isinstance(repo, basestring): repo_name = repo.lstrip("/") repo_obj = rm.get_by_repo_name(repo_name, cache=False) else: raise Exception("You have to provide repository to action logger") user_log = UserLog() user_log.user_id = user_obj.user_id user_log.action = action user_log.repository_id = repo_obj.repo_id user_log.repository_name = repo_name user_log.action_date = datetime.datetime.now() user_log.user_ip = ipaddr sa.add(user_log) sa.commit() log.info("Adding user %s, action %s on %s", user_obj, action, repo) except: log.error(traceback.format_exc()) sa.rollback()