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 1 from django.apps import AppConfig
2 2 from colab.signals.signals import connect_signal, register_signal
3 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 6 logger = get_task_logger(__name__)
7 7  
... ... @@ -19,4 +19,5 @@ class SpbAppConfig(AppConfig):
19 19 register_signal(self.short_name, self.signals_list)
20 20  
21 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 6 from celery.utils.log import get_task_logger
7 7 from colab.accounts.utils.mailman import create_list
8 8 from colab.celery import app
9   -from colab.signals.signals import send
10 9 from colab_gitlab.models import GitlabGroup
11 10  
12 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 26 def create_group_from_community(noosfero_community):
16 27 """ Create a group into Gitlab from a Noosfero's Community"""
17 28  
  29 + group_name = normalize_name(noosfero_community.name)
  30 +
18 31 # If project already exist
19   - group = GitlabGroup.objects.filter(name=noosfero_community.name)
  32 + group = GitlabGroup.objects.filter(name=group_name)
20 33 if group:
21 34 return group[0].id
22 35  
... ... @@ -30,7 +43,7 @@ def create_group_from_community(noosfero_community):
30 43 users_endpoint = '{}/api/v3/groups'.format(upstream)
31 44  
32 45 params = {
33   - 'name': noosfero_community.name,
  46 + 'name': group_name,
34 47 'path': noosfero_community.identifier,
35 48 'private_token': private_token
36 49 }
... ... @@ -40,18 +53,18 @@ def create_group_from_community(noosfero_community):
40 53 verify=verify_ssl)
41 54 except Exception as excpt:
42 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 57 return
45 58  
46 59 if response.status_code != 201:
47 60 if response.status_code is 404:
48 61 pass # TODO: should request the existing group id if error 404
49 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 64 return
52 65 else:
53 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 69 return group_id
57 70  
... ... @@ -99,6 +112,9 @@ def include_members_into_group(admins, group_id):
99 112  
100 113 def create_project(project_name, group_id):
101 114 """ Create a project into Gitlab group """
  115 +
  116 + project_name = normalize_name(project_name)
  117 +
102 118 app_config = settings.COLAB_APPS.get('colab_gitlab', {})
103 119 private_token = app_config.get('private_token')
104 120 upstream = app_config.get('upstream', '').rstrip('/')
... ... @@ -124,24 +140,20 @@ def create_project(project_name, group_id):
124 140  
125 141  
126 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 144 logger.info('Community created: {0}'.format(''.join(kwargs)))
132 145  
133   - send('create_repo', 'spb')
134   - send('create_mail_list', 'spb')
135   -
136 146 noosfero_community = kwargs['community']
137 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 153 group_id = create_group_from_community(noosfero_community)
140 154 include_members_into_group(admins, group_id)
141 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 157 create_list(listname, admins[0])
146 158  
147 159 return 0
... ...