Commit 2b5c46045986ac969b7ac87ad3defae09fd702f6

Authored by Sergio Oliveira
Committed by Gust
1 parent 16da24cf

Refactored gitlab data_api

colab/management/initconfig.py
... ... @@ -70,7 +70,7 @@ ROBOTS_NOINDEX: false
70 70 # PROXIED_APPS:
71 71 # gitlab:
72 72 # upstream: 'http://localhost:8090/gitlab/'
73   -# auth_token: ''
  73 +# private_token: ''
74 74 # trac:
75 75 # upstream: 'http://localhost:5000/trac/'
76 76  
... ...
colab/proxy/gitlab/data_api.py
1   -from colab.proxy.gitlab.models import *
2   -from colab.proxy.proxybase.proxy_data_api import ProxyDataAPI
3   -from django.db.models.fields import DateTimeField
4   -from dateutil.parser import parse
5   -import urllib2
  1 +
6 2 import json
  3 +import urllib
  4 +import urllib2
  5 +import urlparse
  6 +
  7 +from dateutil.parser import parse
  8 +
7 9 from django.conf import settings
  10 +from django.db.models.fields import DateTimeField
  11 +
  12 +from colab.proxy.gitlab.models import GitlabProject
  13 +from colab.proxy.proxybase.proxy_data_api import ProxyDataAPI
  14 +
8 15  
9 16 class GitlabDataAPI(ProxyDataAPI):
10 17  
  18 + def get_request_url(self, path, **kwargs):
  19 + proxy_config = settings.PROXIED_APPS.get(self.app_label, {})
11 20  
12   - def fetchProjects(self):
13   - page = 1
14   - projects = []
  21 + upstream = proxy_config.get('upstream')
  22 + kwargs['private_token'] = proxy_config.get('private_token')
  23 + params = urllib.urlencode(kwargs)
15 24  
16   - proxy_config = settings.PROXIED_APPS.get(self.app_label, {})
17   - admin_token = proxy_config.get('auth_token')
  25 + url = u'{}?{}'.format(path, params)
  26 + return urlparse.urljoin(upstream, url)
18 27  
19   - # Iterates throughout all projects pages
20   - while(True):
21   - data = urllib2.urlopen(proxy_config.get('upstream')+'api/v3/projects/all?private_token={}&per_page=100&page={}'.format(admin_token, page))
22   - json_data = json.load(data)
  28 + def fetchProjects(self):
  29 + page = 1
  30 + projects = []
23 31  
24   - if len(json_data) == 0:
25   - break
  32 + # Iterates throughout all projects pages
  33 + while(True):
  34 + url = self.get_request_url('/api/v3/projects/all',
  35 + per_page=100,
  36 + page=page)
  37 + data = urllib2.urlopen(url)
  38 + json_data = json.load(data)
26 39  
27   - page = page + 1
  40 + if len(json_data) == 0:
  41 + break
28 42  
29   - for element in json_data:
30   - project = GitlabProject()
  43 + page = page + 1
31 44  
32   - for field in GitlabProject._meta.fields:
33   - value = element[field.name]
34   - value = parse(element[field.name]) if isinstance(field, DateTimeField) else value
35   - setattr(project, field.name, value)
  45 + for element in json_data:
  46 + project = GitlabProject()
36 47  
37   - projects.append(project)
  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]
38 53  
39   - return projects
  54 + setattr(project, field.name, value)
40 55  
  56 + projects.append(project)
41 57  
42   - def fetchData(self):
43   - data = self.fetchProjects()
  58 + return projects
44 59  
45   - for datum in data:
46   - datum.save()
  60 + def fetchData(self):
  61 + data = self.fetchProjects()
47 62  
48   - @property
49   - def app_label(self):
50   - return 'gitlab'
  63 + for datum in data:
  64 + datum.save()
51 65  
  66 + @property
  67 + def app_label(self):
  68 + return 'gitlab'
... ...
colab/proxy/proxybase/proxy_data_api.py
1 1  
2   -class ProxyDataAPI():
3 2  
  3 +class ProxyDataAPI(object):
4 4  
5   - def fetchData(self):
6   - raise NotImplementedError('fetchData not yet implemented')
7 5 \ No newline at end of file
  6 + def fetchData(self):
  7 + raise NotImplementedError('fetchData not yet implemented')
... ...