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

Commit

Permalink
Merge pull request #181 from scaleoutsystems/develop
Browse files Browse the repository at this point in the history
STACKn v0.4.0
  • Loading branch information
dstoyanova committed Jan 22, 2021
2 parents 8c6a86a + a3bea52 commit 00a65a1
Show file tree
Hide file tree
Showing 8 changed files with 384 additions and 144 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -137,3 +137,5 @@ media/visualisers/

tele_settings.py
tele_settings_worker.py

.vscode/
2 changes: 1 addition & 1 deletion components/chart-controller/controller/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def deploy(self, options, action='install'):
try:
args.append('--set')
# If list, don't escape ,
if options[key][0] == '{' and options[key][-1] == '}':
if len(options[key]) > 0 and options[key][0] == '{' and options[key][-1] == '}':
args.append(key+"="+options[key])
# And if not list, we should escape ,
else:
Expand Down
2 changes: 1 addition & 1 deletion components/studio/models/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@


def index(request):
models = Model.objects.filter(access='PU')
models = Model.objects.filter(access='PU', project__isnull=False)

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

Expand Down
35 changes: 31 additions & 4 deletions components/studio/projects/templates/settings.html
Original file line number Diff line number Diff line change
Expand Up @@ -131,22 +131,49 @@ <h6>Settings for sharing and collaboration</h6>
{% if user_permissions.add_member %}
<div class="container-fluid" style="padding: 15px;">
<h5>Grant access</h5>
<p>For granting access to this project, select one or more users from the list below.</p>
<p>For granting/revoking access to this project, select one or more users from the list below.</p>
<p>Hold <b>ctrl</b> or <b>shift</b> (or drag with the mouse) to select more than one.</p>
{% if platform_users|length == project.authorized.all|length %}
<div class="get-started-header">
<p>All users have already been added as members to this project.</p>
</div>
{% else %}
<form method="POST" action="{% url 'projects:grant_access' request.user project.slug %}">
{% csrf_token %}

<div class="form-group">
<select name="selected_users" required="" multiple="" class="form-control" id="id_selected_users">
{% for user in platform_users %}
<option value="{{ user.pk }}"
{% if user in project.authorized.all %} style="background-color: #D5F5E3;" {% endif %}>
{% if user not in project.authorized.all %}
<option value="{{ user.pk }}">
{{ user.username }}
</option>
{% endif %}
{% endfor %}
</select>
</div>
<button type="submit" class="btn btn-primary">Save</button>
<button type="submit" class="btn btn-primary">Grant</button>
</form>
{% endif %}
</div>
{% endif %}

{% if user_permissions.add_member and project.authorized.all %}
<div class="container-fluid" style="padding: 15px;">
<h5>Revoke access</h5>
<form method="POST" action="{% url 'projects:revoke_access' request.user project.slug %}">
{% csrf_token %}

<div class="form-group">
<select name="selected_users" required="" multiple="" class="form-control" id="id_selected_users">
{% for user in project.authorized.all %}
<option value="{{ user.pk }}">
{{ user.username }}
</option>
{% endfor %}
</select>
</div>
<button type="submit" class="btn btn-danger">Revoke</button>
</form>
</div>
{% endif %}
Expand Down
1 change: 1 addition & 0 deletions components/studio/projects/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
path('<user>/<project_slug>/details/change', views.change_description, name='change_description'),
path('<user>/<project_slug>/project/publish', views.publish_project, name='publish_project'),
path('<user>/<project_slug>/project/access/grant', views.grant_access_to_project, name='grant_access'),
path('<user>/<project_slug>/project/access/revoke', views.revoke_access_to_project, name='revoke_access'),
path('<user>/<project_slug>/logs', views.load_project_activity, name='project_activity'),
]
74 changes: 50 additions & 24 deletions components/studio/projects/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,21 +89,12 @@ def change_description(request, user, project_slug):

@login_required
def grant_access_to_project(request, user, project_slug):
project = Project.objects.filter(slug=project_slug).first()

if request.method == 'POST':
project = Project.objects.get(slug=project_slug)

print(request.POST)
# if form.is_valid():
# print('Form valid:')
# print(form.is_valid())
if request.method == 'POST':

selected_users = request.POST.getlist('selected_users') #form.cleaned_data.get('selected_users')
print('Selected users:')
print(request.POST.getlist('selected_users'))
print('....')
project.authorized.set(selected_users)
project.save()
selected_users = request.POST.getlist('selected_users')

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

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

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

@login_required
def revoke_access_to_project(request, user, project_slug):

project = Project.objects.get(slug=project_slug)

if request.method == 'POST':

selected_users = request.POST.getlist('selected_users')

l = ProjectLog(project=project, module='PR', headline='Removed Project members',
description='{number} of members have been removed from the Project'.format(
number=len(selected_users)))
l.save()

if len(selected_users) == 1:
selected_users = list(selected_users)

for selected_user in selected_users:
user_tmp = User.objects.get(pk=selected_user)
project.authorized.remove(user_tmp)
username_tmp = user_tmp.username
logger.info('Trying to add user {} to project.'.format(username_tmp))
kc.keycloak_remove_role_from_user(project.slug, username_tmp, 'member')

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

@login_required
def create(request):
template = 'index_projects.html'
Expand Down Expand Up @@ -206,8 +225,6 @@ def details(request, user, project_slug):
except Exception as e:
logger.error("Failed to get response from {} with error: {}".format(url, e))

project_logs = ProjectLog.objects.filter(project=project).order_by('-created_at')

return render(request, template, locals())


Expand Down Expand Up @@ -281,16 +298,25 @@ def publish_project(request, user, project_slug):
def load_project_activity(request, user, project_slug):
template = 'project_activity.html'

time_period = request.GET.get('period')
if time_period == 'week':
last_week = datetime.today() - timedelta(days=7)
project_logs = ProjectLog.objects.filter(created_at__gte=last_week).order_by('-created_at')
elif time_period == 'month':
last_month = datetime.today() - timedelta(days=30)
project_logs = ProjectLog.objects.filter(created_at__gte=last_month).order_by('-created_at')
member = None
project = None
try:
member = User.objects.get(username=user)
project = Project.objects.get(Q(slug=project_slug), Q(owner=member) | Q(authorized=member))
except Exception as e:
print(e)

if member and project:
time_period = request.GET.get('period')
if time_period == 'week':
last_week = datetime.today() - timedelta(days=7)
project_logs = ProjectLog.objects.filter(project=project, created_at__gte=last_week).order_by('-created_at')
elif time_period == 'month':
last_month = datetime.today() - timedelta(days=30)
project_logs = ProjectLog.objects.filter(project=project, created_at__gte=last_month).order_by('-created_at')
else:
project_logs = ProjectLog.objects.filter(project=project).order_by('-created_at')
else:
project_logs = ProjectLog.objects.all().order_by('-created_at')
project_logs = ProjectLog.objects.none()

return render(request, template, {'project_logs': project_logs})


0 comments on commit 00a65a1

Please sign in to comment.