Commit 8825336b337a2186f5ef61c64a774b7ddff7ce9c
Committed by
Sergio Oliveira
1 parent
15e644b6
Exists in
master
and in
39 other branches
Refactory
Sign-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
Showing
1 changed file
with
41 additions
and
78 deletions
Show diff stats
colab/proxy/gitlab/data_api.py
| ... | ... | @@ -25,34 +25,50 @@ class GitlabDataAPI(ProxyDataAPI): |
| 25 | 25 | |
| 26 | 26 | return u'{}{}?{}'.format(upstream, path, params) |
| 27 | 27 | |
| 28 | + def get_json_data(self, api_url, page=1, pages=1000): | |
| 29 | + url = self.get_request_url(api_url, per_page=pages, | |
| 30 | + page=page) | |
| 31 | + data = urllib2.urlopen(url) | |
| 32 | + json_data = json.load(data) | |
| 33 | + | |
| 34 | + return json_data | |
| 35 | + | |
| 36 | + def fill_object_data(self, element, _object): | |
| 37 | + for field in _object._meta.fields: | |
| 38 | + if field.name == "user": | |
| 39 | + _object.update_user( | |
| 40 | + element["author"]["username"]) | |
| 41 | + continue | |
| 42 | + if field.name == "project": | |
| 43 | + _object.project_id = \ | |
| 44 | + element["project_id"] | |
| 45 | + continue | |
| 46 | + | |
| 47 | + if isinstance(field, DateTimeField): | |
| 48 | + value = parse(element["created_at"]) | |
| 49 | + else: | |
| 50 | + value = element[field.name] | |
| 51 | + | |
| 52 | + setattr(_object, field.name, value) | |
| 53 | + | |
| 54 | + return _object | |
| 55 | + | |
| 28 | 56 | def fetch_projects(self): |
| 29 | 57 | page = 1 |
| 30 | 58 | projects = [] |
| 31 | 59 | |
| 32 | 60 | # Iterates throughout all projects pages |
| 33 | - while(True): | |
| 34 | - url = self.get_request_url('/api/v3/projects/all', | |
| 35 | - per_page=1000, | |
| 36 | - page=page) | |
| 37 | - data = urllib2.urlopen(url) | |
| 38 | - json_data = json.load(data) | |
| 39 | - | |
| 40 | - if len(json_data) == 0: | |
| 61 | + while True: | |
| 62 | + json_data = self.get_json_data('/api/v3/projects/all', page) | |
| 63 | + | |
| 64 | + if not len(json_data): | |
| 41 | 65 | break |
| 42 | 66 | |
| 43 | 67 | page = page + 1 |
| 44 | 68 | |
| 45 | 69 | for element in json_data: |
| 46 | 70 | project = GitlabProject() |
| 47 | - | |
| 48 | - for field in GitlabProject._meta.fields: | |
| 49 | - if isinstance(field, DateTimeField): | |
| 50 | - value = parse(element[field.name]) | |
| 51 | - else: | |
| 52 | - value = element[field.name] | |
| 53 | - | |
| 54 | - setattr(project, field.name, value) | |
| 55 | - | |
| 71 | + self.fill_object_data(element, project) | |
| 56 | 72 | projects.append(project) |
| 57 | 73 | |
| 58 | 74 | return projects |
| ... | ... | @@ -66,12 +82,7 @@ class GitlabDataAPI(ProxyDataAPI): |
| 66 | 82 | while(True): |
| 67 | 83 | merge_request_url = \ |
| 68 | 84 | '/api/v3/projects/{}/merge_requests'.format(project.id) |
| 69 | - url = self.get_request_url(merge_request_url, | |
| 70 | - per_page=1000, | |
| 71 | - page=page) | |
| 72 | - | |
| 73 | - data = urllib2.urlopen(url) | |
| 74 | - json_data_mr = json.load(data) | |
| 85 | + json_data_mr = self.get_json_data(merge_request_url, page) | |
| 75 | 86 | |
| 76 | 87 | if len(json_data_mr) == 0: |
| 77 | 88 | break |
| ... | ... | @@ -79,24 +90,7 @@ class GitlabDataAPI(ProxyDataAPI): |
| 79 | 90 | page = page + 1 |
| 80 | 91 | for element in json_data_mr: |
| 81 | 92 | single_merge_request = GitlabMergeRequest() |
| 82 | - | |
| 83 | - for field in GitlabMergeRequest._meta.fields: | |
| 84 | - if field.name == "user": | |
| 85 | - single_merge_request.update_user( | |
| 86 | - element["author"]["username"]) | |
| 87 | - continue | |
| 88 | - if field.name == "project": | |
| 89 | - single_merge_request.project_id = \ | |
| 90 | - element["project_id"] | |
| 91 | - continue | |
| 92 | - | |
| 93 | - if isinstance(field, DateTimeField): | |
| 94 | - value = parse(element["created_at"]) | |
| 95 | - else: | |
| 96 | - value = element[field.name] | |
| 97 | - | |
| 98 | - setattr(single_merge_request, field.name, value) | |
| 99 | - | |
| 93 | + self.fill_object_data(element, single_merge_request) | |
| 100 | 94 | all_merge_request.append(single_merge_request) |
| 101 | 95 | |
| 102 | 96 | return all_merge_request |
| ... | ... | @@ -111,11 +105,8 @@ class GitlabDataAPI(ProxyDataAPI): |
| 111 | 105 | while(True): |
| 112 | 106 | issue_url = \ |
| 113 | 107 | '/api/v3/projects/{}/issues'.format(project.id) |
| 114 | - url = self.get_request_url(issue_url, per_page=1000, | |
| 115 | - page=page) | |
| 116 | 108 | |
| 117 | - data = urllib2.urlopen(url) | |
| 118 | - json_data_issue = json.load(data) | |
| 109 | + json_data_issue = self.get_json_data(issue_url, page) | |
| 119 | 110 | |
| 120 | 111 | if len(json_data_issue) == 0: |
| 121 | 112 | break |
| ... | ... | @@ -123,30 +114,13 @@ class GitlabDataAPI(ProxyDataAPI): |
| 123 | 114 | page = page + 1 |
| 124 | 115 | for element in json_data_issue: |
| 125 | 116 | single_issue = GitlabIssue() |
| 126 | - | |
| 127 | - for field in GitlabIssue._meta.fields: | |
| 128 | - if field.name == "project": | |
| 129 | - single_issue.project_id = element["project_id"] | |
| 130 | - continue | |
| 131 | - if field.name == "user": | |
| 132 | - single_issue.update_user( | |
| 133 | - element["author"]["username"]) | |
| 134 | - continue | |
| 135 | - | |
| 136 | - if isinstance(field, DateTimeField): | |
| 137 | - value = parse(element["created_at"]) | |
| 138 | - else: | |
| 139 | - value = element[field.name] | |
| 140 | - | |
| 141 | - setattr(single_issue, field.name, value) | |
| 142 | - | |
| 117 | + self.fill_object_data(element, single_issue) | |
| 143 | 118 | all_issues.append(single_issue) |
| 144 | 119 | |
| 145 | 120 | return all_issues |
| 146 | 121 | |
| 147 | 122 | def fetch_comments(self): |
| 148 | 123 | all_comments = [] |
| 149 | - | |
| 150 | 124 | all_comments.extend(self.fetch_comments_MR()) |
| 151 | 125 | all_comments.extend(self.fetch_comments_issues()) |
| 152 | 126 | |
| ... | ... | @@ -160,15 +134,9 @@ class GitlabDataAPI(ProxyDataAPI): |
| 160 | 134 | page = 1 |
| 161 | 135 | # Iterate under all comments of MR inside project |
| 162 | 136 | while(True): |
| 163 | - merge_request_url = \ | |
| 164 | - '/api/v3/projects/{}/merge_requests/{}/notes' \ | |
| 165 | - .format(merge_request.project_id, merge_request.id) | |
| 166 | - url = self.get_request_url(merge_request_url, | |
| 167 | - per_page=1000, | |
| 168 | - page=page) | |
| 169 | - | |
| 170 | - data = urllib2.urlopen(url) | |
| 171 | - json_data_mr = json.load(data) | |
| 137 | + mr_url = '/api/v3/projects/{}/merge_requests/{}/notes'.format( | |
| 138 | + merge_request.project_id, merge_request.id) | |
| 139 | + json_data_mr = self.get_json_data(mr_url, page) | |
| 172 | 140 | |
| 173 | 141 | if len(json_data_mr) == 0: |
| 174 | 142 | break |
| ... | ... | @@ -217,12 +185,7 @@ class GitlabDataAPI(ProxyDataAPI): |
| 217 | 185 | issue_comments_request_url = \ |
| 218 | 186 | '/api/v3/projects/{}/issues/{}/notes' \ |
| 219 | 187 | .format(issue.project_id, issue.id) |
| 220 | - url = self.get_request_url(issue_comments_request_url, | |
| 221 | - per_page=1000, | |
| 222 | - page=page) | |
| 223 | - | |
| 224 | - data = urllib2.urlopen(url) | |
| 225 | - json_data_mr = json.load(data) | |
| 188 | + json_data_mr = self.get_json_data(issue_comments_request_url, page) | |
| 226 | 189 | |
| 227 | 190 | if len(json_data_mr) == 0: |
| 228 | 191 | break | ... | ... |