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 | 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 | ... | ... |
-
mentioned in commit 745a6c130da9eece452b88b687c4c4d7fd146a41