Commit 1efa7b87c6463e9e647beb29ec3799d7a4b98a1e
1 parent
d19c324f
Exists in
master
and in
29 other branches
Splitted gitlab imports to allow async workers
Signed-off-by: Sergio Oliveira <sergio@tracy.com.br>
Showing
2 changed files
with
25 additions
and
10 deletions
Show diff stats
colab/plugins/gitlab/data_api.py
| @@ -5,23 +5,22 @@ import logging | @@ -5,23 +5,22 @@ import logging | ||
| 5 | 5 | ||
| 6 | from dateutil.parser import parse | 6 | from dateutil.parser import parse |
| 7 | 7 | ||
| 8 | -from django.conf import settings | ||
| 9 | from django.db.models.fields import DateTimeField | 8 | from django.db.models.fields import DateTimeField |
| 10 | 9 | ||
| 11 | from colab.plugins.gitlab.models import (GitlabProject, GitlabMergeRequest, | 10 | from colab.plugins.gitlab.models import (GitlabProject, GitlabMergeRequest, |
| 12 | GitlabComment, GitlabIssue) | 11 | GitlabComment, GitlabIssue) |
| 13 | from colab.plugins.utils.proxy_data_api import ProxyDataAPI | 12 | from colab.plugins.utils.proxy_data_api import ProxyDataAPI |
| 14 | 13 | ||
| 14 | + | ||
| 15 | LOGGER = logging.getLogger('colab.plugin.gitlab') | 15 | LOGGER = logging.getLogger('colab.plugin.gitlab') |
| 16 | 16 | ||
| 17 | 17 | ||
| 18 | -class GitlabDataAPI(ProxyDataAPI): | 18 | +class GitlabDataImporter(ProxyDataAPI): |
| 19 | + app_label = 'gitlab' | ||
| 19 | 20 | ||
| 20 | def get_request_url(self, path, **kwargs): | 21 | def get_request_url(self, path, **kwargs): |
| 21 | - proxy_config = settings.COLAB_APPS.get(self.app_label, {}) | ||
| 22 | - | ||
| 23 | - upstream = proxy_config.get('upstream') | ||
| 24 | - kwargs['private_token'] = proxy_config.get('private_token') | 22 | + upstream = self.config.get('upstream') |
| 23 | + kwargs['private_token'] = self.config.get('private_token') | ||
| 25 | params = urllib.urlencode(kwargs) | 24 | params = urllib.urlencode(kwargs) |
| 26 | 25 | ||
| 27 | if upstream[-1] == '/': | 26 | if upstream[-1] == '/': |
| @@ -179,27 +178,38 @@ class GitlabDataAPI(ProxyDataAPI): | @@ -179,27 +178,38 @@ class GitlabDataAPI(ProxyDataAPI): | ||
| 179 | 178 | ||
| 180 | return all_comments | 179 | return all_comments |
| 181 | 180 | ||
| 181 | + | ||
| 182 | +class GitlabProjectImporter(GitlabDataImporter): | ||
| 183 | + | ||
| 182 | def fetch_data(self): | 184 | def fetch_data(self): |
| 183 | LOGGER.info("Importing Projects") | 185 | LOGGER.info("Importing Projects") |
| 184 | projects = self.fetch_projects() | 186 | projects = self.fetch_projects() |
| 185 | for datum in projects: | 187 | for datum in projects: |
| 186 | datum.save() | 188 | datum.save() |
| 187 | 189 | ||
| 190 | + | ||
| 191 | +class GitlabMergeRequestImporter(GitlabDataImporter): | ||
| 192 | + | ||
| 193 | + def fetch_data(self): | ||
| 188 | LOGGER.info("Importing Merge Requests") | 194 | LOGGER.info("Importing Merge Requests") |
| 189 | merge_request_list = self.fetch_merge_request(projects) | 195 | merge_request_list = self.fetch_merge_request(projects) |
| 190 | for datum in merge_request_list: | 196 | for datum in merge_request_list: |
| 191 | datum.save() | 197 | datum.save() |
| 192 | 198 | ||
| 199 | + | ||
| 200 | +class GitlabIssueImporter(GitlabDataImporter): | ||
| 201 | + | ||
| 202 | + def fetch_data(self): | ||
| 193 | LOGGER.info("Importing Issues") | 203 | LOGGER.info("Importing Issues") |
| 194 | issue_list = self.fetch_issue(projects) | 204 | issue_list = self.fetch_issue(projects) |
| 195 | for datum in issue_list: | 205 | for datum in issue_list: |
| 196 | datum.save() | 206 | datum.save() |
| 197 | 207 | ||
| 208 | + | ||
| 209 | +class GitlabCommentImporter(GitlabDataImporter): | ||
| 210 | + | ||
| 211 | + def fetch_data(self): | ||
| 198 | LOGGER.info("Importing Comments") | 212 | LOGGER.info("Importing Comments") |
| 199 | comments_list = self.fetch_comments() | 213 | comments_list = self.fetch_comments() |
| 200 | for datum in comments_list: | 214 | for datum in comments_list: |
| 201 | datum.save() | 215 | datum.save() |
| 202 | - | ||
| 203 | - @property | ||
| 204 | - def app_label(self): | ||
| 205 | - return 'gitlab' |
colab/plugins/utils/proxy_data_api.py
| 1 | 1 | ||
| 2 | import abc | 2 | import abc |
| 3 | 3 | ||
| 4 | +from django.conf import settings | ||
| 5 | + | ||
| 4 | 6 | ||
| 5 | class ProxyDataAPI(object): | 7 | class ProxyDataAPI(object): |
| 6 | 8 | ||
| 9 | + def __init__(self): | ||
| 10 | + self.config = settings.COLAB_APPS.get(self.app_label, {}) | ||
| 11 | + | ||
| 7 | @abc.abstractmethod | 12 | @abc.abstractmethod |
| 8 | def fetch_data(self): | 13 | def fetch_data(self): |
| 9 | raise NotImplementedError('fetchData not yet implemented') | 14 | raise NotImplementedError('fetchData not yet implemented') |