Commit 957dc282770e3dc4cbf328ba520f9bfbab0908d6

Authored by Matheus Fernandes
1 parent 985a505a

Refactored community creation

Signed-off-by: Matheus Fernandes <matheus.souza.fernandes@gmail.com>
Signed-off-by: Matheus Faria <matheus.sousa.faria@gmail.com>
src/colab-spb-plugin/src/colab_spb/apps.py
1 from django.apps import AppConfig 1 from django.apps import AppConfig
2 from colab.signals.signals import connect_signal, register_signal 2 from colab.signals.signals import connect_signal, register_signal
3 from celery.utils.log import get_task_logger 3 from celery.utils.log import get_task_logger
4 -from colab_spb.tasks import community_creation 4 +from colab_spb.tasks import list_group_and_repository_creation
5 5
6 logger = get_task_logger(__name__) 6 logger = get_task_logger(__name__)
7 7
@@ -19,4 +19,5 @@ class SpbAppConfig(AppConfig): @@ -19,4 +19,5 @@ class SpbAppConfig(AppConfig):
19 register_signal(self.short_name, self.signals_list) 19 register_signal(self.short_name, self.signals_list)
20 20
21 def connect_signal(self): 21 def connect_signal(self):
22 - connect_signal('community_creation', 'noosfero', community_creation) 22 + connect_signal('community_creation', 'noosfero',
  23 + list_group_and_repository_creation)
src/colab-spb-plugin/src/colab_spb/tasks.py
@@ -6,17 +6,30 @@ from django.conf import settings @@ -6,17 +6,30 @@ from django.conf import settings
6 from celery.utils.log import get_task_logger 6 from celery.utils.log import get_task_logger
7 from colab.accounts.utils.mailman import create_list 7 from colab.accounts.utils.mailman import create_list
8 from colab.celery import app 8 from colab.celery import app
9 -from colab.signals.signals import send  
10 from colab_gitlab.models import GitlabGroup 9 from colab_gitlab.models import GitlabGroup
11 10
12 logger = get_task_logger(__name__) 11 logger = get_task_logger(__name__)
13 12
14 13
  14 +def normalize_name(name):
  15 + """
  16 + Removes letters' accents, replaces whitespaces for dash (-), and lowercases
  17 + all letters
  18 + """
  19 + name = name.replace(' ', '-')
  20 + name = ''.join(c for c in unicodedata.normalize('NFD', unicode(
  21 + name, 'utf-8')) if unicodedata.category(c) != 'Mn')
  22 + name = name.lower()
  23 + return name
  24 +
  25 +
15 def create_group_from_community(noosfero_community): 26 def create_group_from_community(noosfero_community):
16 """ Create a group into Gitlab from a Noosfero's Community""" 27 """ Create a group into Gitlab from a Noosfero's Community"""
17 28
  29 + group_name = normalize_name(noosfero_community.name)
  30 +
18 # If project already exist 31 # If project already exist
19 - group = GitlabGroup.objects.filter(name=noosfero_community.name) 32 + group = GitlabGroup.objects.filter(name=group_name)
20 if group: 33 if group:
21 return group[0].id 34 return group[0].id
22 35
@@ -30,7 +43,7 @@ def create_group_from_community(noosfero_community): @@ -30,7 +43,7 @@ def create_group_from_community(noosfero_community):
30 users_endpoint = '{}/api/v3/groups'.format(upstream) 43 users_endpoint = '{}/api/v3/groups'.format(upstream)
31 44
32 params = { 45 params = {
33 - 'name': noosfero_community.name, 46 + 'name': group_name,
34 'path': noosfero_community.identifier, 47 'path': noosfero_community.identifier,
35 'private_token': private_token 48 'private_token': private_token
36 } 49 }
@@ -40,18 +53,18 @@ def create_group_from_community(noosfero_community): @@ -40,18 +53,18 @@ def create_group_from_community(noosfero_community):
40 verify=verify_ssl) 53 verify=verify_ssl)
41 except Exception as excpt: 54 except Exception as excpt:
42 reason = 'Request to API failed ({})'.format(excpt) 55 reason = 'Request to API failed ({})'.format(excpt)
43 - logger.error(error_msg, noosfero_community.name, reason) 56 + logger.error(error_msg, group_name, reason)
44 return 57 return
45 58
46 if response.status_code != 201: 59 if response.status_code != 201:
47 if response.status_code is 404: 60 if response.status_code is 404:
48 pass # TODO: should request the existing group id if error 404 61 pass # TODO: should request the existing group id if error 404
49 reason = 'Unknown [{}].'.format(response.status_code) 62 reason = 'Unknown [{}].'.format(response.status_code)
50 - logger.error(error_msg, noosfero_community.name, reason) 63 + logger.error(error_msg, group_name, reason)
51 return 64 return
52 else: 65 else:
53 group_id = response.json().get('id') 66 group_id = response.json().get('id')
54 - logger.info('Group {0} created'.format(noosfero_community.name)) 67 + logger.info('Group {0} created'.format(group_name))
55 68
56 return group_id 69 return group_id
57 70
@@ -99,6 +112,9 @@ def include_members_into_group(admins, group_id): @@ -99,6 +112,9 @@ def include_members_into_group(admins, group_id):
99 112
100 def create_project(project_name, group_id): 113 def create_project(project_name, group_id):
101 """ Create a project into Gitlab group """ 114 """ Create a project into Gitlab group """
  115 +
  116 + project_name = normalize_name(project_name)
  117 +
102 app_config = settings.COLAB_APPS.get('colab_gitlab', {}) 118 app_config = settings.COLAB_APPS.get('colab_gitlab', {})
103 private_token = app_config.get('private_token') 119 private_token = app_config.get('private_token')
104 upstream = app_config.get('upstream', '').rstrip('/') 120 upstream = app_config.get('upstream', '').rstrip('/')
@@ -124,24 +140,20 @@ def create_project(project_name, group_id): @@ -124,24 +140,20 @@ def create_project(project_name, group_id):
124 140
125 141
126 @app.task(bind=True) 142 @app.task(bind=True)
127 -def community_creation(self, **kwargs):  
128 - f = open('/vagrant/community_creation', 'wb')  
129 - f.write(str(kwargs))  
130 - f.close() 143 +def list_group_and_repository_creation(self, **kwargs):
131 logger.info('Community created: {0}'.format(''.join(kwargs))) 144 logger.info('Community created: {0}'.format(''.join(kwargs)))
132 145
133 - send('create_repo', 'spb')  
134 - send('create_mail_list', 'spb')  
135 -  
136 noosfero_community = kwargs['community'] 146 noosfero_community = kwargs['community']
137 admins = noosfero_community.admins.all() 147 admins = noosfero_community.admins.all()
  148 + if not len(admins):
  149 + logger.error('Failed to create list, the software does not '
  150 + 'have an admin.')
  151 + return -1
138 152
139 group_id = create_group_from_community(noosfero_community) 153 group_id = create_group_from_community(noosfero_community)
140 include_members_into_group(admins, group_id) 154 include_members_into_group(admins, group_id)
141 create_project(noosfero_community.name, group_id) 155 create_project(noosfero_community.name, group_id)
142 - listname = noosfero_community.name.replace(' ', '-')  
143 - listname = ''.join(c for c in unicodedata.normalize('NFD', unicode(  
144 - listname, 'utf-8')) if unicodedata.category(c) != 'Mn') 156 + listname = normalize_name(noosfero_community.name)
145 create_list(listname, admins[0]) 157 create_list(listname, admins[0])
146 158
147 return 0 159 return 0