Skip to content
This repository was archived by the owner on Mar 17, 2024. It is now read-only.

Commit 00a65a1

Browse files
authored
Merge pull request #181 from scaleoutsystems/develop
STACKn v0.4.0
2 parents 8c6a86a + a3bea52 commit 00a65a1

File tree

8 files changed

+384
-144
lines changed

8 files changed

+384
-144
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,3 +137,5 @@ media/visualisers/
137137

138138
tele_settings.py
139139
tele_settings_worker.py
140+
141+
.vscode/

components/chart-controller/controller/controller.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def deploy(self, options, action='install'):
5252
try:
5353
args.append('--set')
5454
# If list, don't escape ,
55-
if options[key][0] == '{' and options[key][-1] == '}':
55+
if len(options[key]) > 0 and options[key][0] == '{' and options[key][-1] == '}':
5656
args.append(key+"="+options[key])
5757
# And if not list, we should escape ,
5858
else:

components/studio/models/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121

2222
def index(request):
23-
models = Model.objects.filter(access='PU')
23+
models = Model.objects.filter(access='PU', project__isnull=False)
2424

2525
return render(request, 'models_cards.html', locals())
2626

components/studio/projects/templates/settings.html

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,22 +131,49 @@ <h6>Settings for sharing and collaboration</h6>
131131
{% if user_permissions.add_member %}
132132
<div class="container-fluid" style="padding: 15px;">
133133
<h5>Grant access</h5>
134-
<p>For granting access to this project, select one or more users from the list below.</p>
134+
<p>For granting/revoking access to this project, select one or more users from the list below.</p>
135135
<p>Hold <b>ctrl</b> or <b>shift</b> (or drag with the mouse) to select more than one.</p>
136+
{% if platform_users|length == project.authorized.all|length %}
137+
<div class="get-started-header">
138+
<p>All users have already been added as members to this project.</p>
139+
</div>
140+
{% else %}
136141
<form method="POST" action="{% url 'projects:grant_access' request.user project.slug %}">
137142
{% csrf_token %}
138143

139144
<div class="form-group">
140145
<select name="selected_users" required="" multiple="" class="form-control" id="id_selected_users">
141146
{% for user in platform_users %}
142-
<option value="{{ user.pk }}"
143-
{% if user in project.authorized.all %} style="background-color: #D5F5E3;" {% endif %}>
147+
{% if user not in project.authorized.all %}
148+
<option value="{{ user.pk }}">
144149
{{ user.username }}
145150
</option>
151+
{% endif %}
146152
{% endfor %}
147153
</select>
148154
</div>
149-
<button type="submit" class="btn btn-primary">Save</button>
155+
<button type="submit" class="btn btn-primary">Grant</button>
156+
</form>
157+
{% endif %}
158+
</div>
159+
{% endif %}
160+
161+
{% if user_permissions.add_member and project.authorized.all %}
162+
<div class="container-fluid" style="padding: 15px;">
163+
<h5>Revoke access</h5>
164+
<form method="POST" action="{% url 'projects:revoke_access' request.user project.slug %}">
165+
{% csrf_token %}
166+
167+
<div class="form-group">
168+
<select name="selected_users" required="" multiple="" class="form-control" id="id_selected_users">
169+
{% for user in project.authorized.all %}
170+
<option value="{{ user.pk }}">
171+
{{ user.username }}
172+
</option>
173+
{% endfor %}
174+
</select>
175+
</div>
176+
<button type="submit" class="btn btn-danger">Revoke</button>
150177
</form>
151178
</div>
152179
{% endif %}

components/studio/projects/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@
1212
path('<user>/<project_slug>/details/change', views.change_description, name='change_description'),
1313
path('<user>/<project_slug>/project/publish', views.publish_project, name='publish_project'),
1414
path('<user>/<project_slug>/project/access/grant', views.grant_access_to_project, name='grant_access'),
15+
path('<user>/<project_slug>/project/access/revoke', views.revoke_access_to_project, name='revoke_access'),
1516
path('<user>/<project_slug>/logs', views.load_project_activity, name='project_activity'),
1617
]

components/studio/projects/views.py

Lines changed: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -89,21 +89,12 @@ def change_description(request, user, project_slug):
8989

9090
@login_required
9191
def grant_access_to_project(request, user, project_slug):
92-
project = Project.objects.filter(slug=project_slug).first()
9392

94-
if request.method == 'POST':
93+
project = Project.objects.get(slug=project_slug)
9594

96-
print(request.POST)
97-
# if form.is_valid():
98-
# print('Form valid:')
99-
# print(form.is_valid())
95+
if request.method == 'POST':
10096

101-
selected_users = request.POST.getlist('selected_users') #form.cleaned_data.get('selected_users')
102-
print('Selected users:')
103-
print(request.POST.getlist('selected_users'))
104-
print('....')
105-
project.authorized.set(selected_users)
106-
project.save()
97+
selected_users = request.POST.getlist('selected_users')
10798

10899
l = ProjectLog(project=project, module='PR', headline='New members',
109100
description='{number} new members have been added to the Project'.format(
@@ -115,13 +106,41 @@ def grant_access_to_project(request, user, project_slug):
115106

116107
for selected_user in selected_users:
117108
user_tmp = User.objects.get(pk=selected_user)
109+
project.authorized.add(user_tmp)
118110
username_tmp = user_tmp.username
119111
logger.info('Trying to add user {} to project.'.format(username_tmp))
120112
kc.keycloak_add_role_to_user(project.slug, username_tmp, 'member')
121113

122114
return HttpResponseRedirect(
123115
reverse('projects:settings', kwargs={'user': user, 'project_slug': project.slug}))
124116

117+
@login_required
118+
def revoke_access_to_project(request, user, project_slug):
119+
120+
project = Project.objects.get(slug=project_slug)
121+
122+
if request.method == 'POST':
123+
124+
selected_users = request.POST.getlist('selected_users')
125+
126+
l = ProjectLog(project=project, module='PR', headline='Removed Project members',
127+
description='{number} of members have been removed from the Project'.format(
128+
number=len(selected_users)))
129+
l.save()
130+
131+
if len(selected_users) == 1:
132+
selected_users = list(selected_users)
133+
134+
for selected_user in selected_users:
135+
user_tmp = User.objects.get(pk=selected_user)
136+
project.authorized.remove(user_tmp)
137+
username_tmp = user_tmp.username
138+
logger.info('Trying to add user {} to project.'.format(username_tmp))
139+
kc.keycloak_remove_role_from_user(project.slug, username_tmp, 'member')
140+
141+
return HttpResponseRedirect(
142+
reverse('projects:settings', kwargs={'user': user, 'project_slug': project.slug}))
143+
125144
@login_required
126145
def create(request):
127146
template = 'index_projects.html'
@@ -206,8 +225,6 @@ def details(request, user, project_slug):
206225
except Exception as e:
207226
logger.error("Failed to get response from {} with error: {}".format(url, e))
208227

209-
project_logs = ProjectLog.objects.filter(project=project).order_by('-created_at')
210-
211228
return render(request, template, locals())
212229

213230

@@ -281,16 +298,25 @@ def publish_project(request, user, project_slug):
281298
def load_project_activity(request, user, project_slug):
282299
template = 'project_activity.html'
283300

284-
time_period = request.GET.get('period')
285-
if time_period == 'week':
286-
last_week = datetime.today() - timedelta(days=7)
287-
project_logs = ProjectLog.objects.filter(created_at__gte=last_week).order_by('-created_at')
288-
elif time_period == 'month':
289-
last_month = datetime.today() - timedelta(days=30)
290-
project_logs = ProjectLog.objects.filter(created_at__gte=last_month).order_by('-created_at')
301+
member = None
302+
project = None
303+
try:
304+
member = User.objects.get(username=user)
305+
project = Project.objects.get(Q(slug=project_slug), Q(owner=member) | Q(authorized=member))
306+
except Exception as e:
307+
print(e)
308+
309+
if member and project:
310+
time_period = request.GET.get('period')
311+
if time_period == 'week':
312+
last_week = datetime.today() - timedelta(days=7)
313+
project_logs = ProjectLog.objects.filter(project=project, created_at__gte=last_week).order_by('-created_at')
314+
elif time_period == 'month':
315+
last_month = datetime.today() - timedelta(days=30)
316+
project_logs = ProjectLog.objects.filter(project=project, created_at__gte=last_month).order_by('-created_at')
317+
else:
318+
project_logs = ProjectLog.objects.filter(project=project).order_by('-created_at')
291319
else:
292-
project_logs = ProjectLog.objects.all().order_by('-created_at')
320+
project_logs = ProjectLog.objects.none()
293321

294322
return render(request, template, {'project_logs': project_logs})
295-
296-

0 commit comments

Comments
 (0)