Commit 957dc282770e3dc4cbf328ba520f9bfbab0908d6
1 parent
985a505a
Exists in
master
and in
20 other branches
Refactored community creation
Signed-off-by: Matheus Fernandes <matheus.souza.fernandes@gmail.com> Signed-off-by: Matheus Faria <matheus.sousa.faria@gmail.com>
Showing
2 changed files
with
31 additions
and
18 deletions
Show diff stats
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 |
-
mentioned in commit 745a6c130da9eece452b88b687c4c4d7fd146a41