# HG changeset patch # User Jan Heylen # Date 2015-04-30 07:05:18 # Node ID b5e399286ce50f2daf791b154653a536431a0205 # Parent 34f2da0a2969a1e5ba72e92e00366cb1b1f5ce18 ChangesetCommentsModel: refactor duplicate code Comments are now always ordered by creation date ... but that should not make any difference. diff --git a/kallithea/model/comment.py b/kallithea/model/comment.py --- a/kallithea/model/comment.py +++ b/kallithea/model/comment.py @@ -236,19 +236,8 @@ class ChangesetCommentsModel(BaseModel): Returns a list, ordered by creation date. """ - q = ChangesetComment.query()\ - .filter(ChangesetComment.repo_id == repo_id)\ - .filter(ChangesetComment.line_no == None)\ - .filter(ChangesetComment.f_path == None) - if revision: - q = q.filter(ChangesetComment.revision == revision) - elif pull_request: - pull_request = self.__get_pull_request(pull_request) - q = q.filter(ChangesetComment.pull_request == pull_request) - else: - raise Exception('Please specify revision or pull_request') - q = q.order_by(ChangesetComment.created_on) - return q.all() + return self._get_comments(repo_id, revision=revision, pull_request=pull_request, + inline=False) def get_inline_comments(self, repo_id, revision=None, pull_request=None): """ @@ -256,11 +245,27 @@ class ChangesetCommentsModel(BaseModel): Returns a list of tuples with file path and list of comments per line number. """ + comments = self._get_comments(repo_id, revision=revision, pull_request=pull_request, + inline=True) + + paths = defaultdict(lambda: defaultdict(list)) + for co in comments: + paths[co.f_path][co.line_no].append(co) + return paths.items() + + def _get_comments(self, repo_id, revision=None, pull_request=None, inline=False): + """ + Gets comments for either revision or pull_request_id, either inline or general. + """ q = Session().query(ChangesetComment)\ - .filter(ChangesetComment.repo_id == repo_id)\ - .filter(ChangesetComment.line_no != None)\ - .filter(ChangesetComment.f_path != None)\ - .order_by(ChangesetComment.comment_id.asc())\ + .filter(ChangesetComment.repo_id == repo_id) + + if inline: + q = q.filter(ChangesetComment.line_no != None)\ + .filter(ChangesetComment.f_path != None) + else: + q = q.filter(ChangesetComment.line_no == None)\ + .filter(ChangesetComment.f_path == None) if revision: q = q.filter(ChangesetComment.revision == revision) @@ -268,12 +273,6 @@ class ChangesetCommentsModel(BaseModel): pull_request = self.__get_pull_request(pull_request) q = q.filter(ChangesetComment.pull_request == pull_request) else: - raise Exception('Please specify revision or pull_request_id') - - comments = q.all() + raise Exception('Please specify either revision or pull_request') - paths = defaultdict(lambda: defaultdict(list)) - - for co in comments: - paths[co.f_path][co.line_no].append(co) - return paths.items() + return q.order_by(ChangesetComment.created_on).all()