Skip to content

Commit 5350cb8

Browse files
Add functionality to query notebook apps and count them in the get apps endpoint (#545)
1 parent 714bc85 commit 5350cb8

File tree

3 files changed

+20
-38
lines changed

3 files changed

+20
-38
lines changed

api_docs.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3203,6 +3203,10 @@ paths:
32033203
name: disabled
32043204
type: boolean
32053205
description: Returns disabled applications
3206+
- in: query
3207+
name: is_notebook
3208+
type: boolean
3209+
description: Returns applications with is_notebook set to true
32063210
- in: query
32073211
name: active
32083212
type: boolean

app/controllers/app.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ def get(self):
129129
per_page = request.args.get('per_page', 10, type=int)
130130
series = request.args.get('series', False)
131131
disabled = request.args.get('disabled', None)
132+
is_notebook = request.args.get('is_notebook', None)
132133

133134
if isinstance(series, str):
134135
series = series.lower() == 'true'
@@ -139,6 +140,7 @@ def get(self):
139140
# since it is a one to one
140141
metadata = {
141142
'disabled': App.query.filter_by(disabled=True).count(),
143+
'is_notebook': App.query.filter_by(is_notebook=True).count(),
142144
'total_apps': App.query.count(),
143145
'failing_apps': AppState.query.filter_by(status="failed").count(),
144146
'running_apps': AppState.query.filter_by(status="running").count(),
@@ -149,6 +151,9 @@ def get(self):
149151
if disabled is not None:
150152
query = query.filter_by(disabled=disabled)
151153

154+
if is_notebook is not None:
155+
query = query.filter_by(is_notebook=is_notebook)
156+
152157
paginated_apps = query.paginate(
153158
page=page, per_page=per_page, error_out=False)
154159

app/controllers/project.py

Lines changed: 11 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import datetime
22
import json
33
from types import SimpleNamespace
4-
import uuid
54
from app.helpers.cost_modal import CostModal
65
from app.helpers.alias import create_alias
76
from app.helpers.admin import is_authorised_project_user, is_owner_or_admin, is_current_or_admin, is_admin
87
from app.helpers.role_search import has_role
98
from app.helpers.activity_logger import log_activity
109
from app.helpers.kube import create_kube_clients, delete_cluster_app, disable_project, enable_project, check_kube_error_code
11-
from app.helpers.tags import add_tags_to_project, create_tags, remove_tags_from_project
1210
from app.models.billing_invoice import BillingInvoice
1311
from app.models.project_users import ProjectUser
1412
from app.models.user import User
@@ -17,7 +15,6 @@
1715
from app.schemas import ProjectSchema, AppSchema, ProjectUserSchema, ClusterSchema
1816
from app.helpers.decorators import admin_required
1917
import datetime
20-
from app.schemas.tags import TagSchema
2118
from flask_restful import Resource, request
2219
from kubernetes import client
2320
from flask_jwt_extended import jwt_required, get_jwt_identity, get_jwt_claims
@@ -60,7 +57,6 @@ def post(self):
6057
message=f'''project with name {
6158
validated_project_data["name"]} already exists'''
6259
), 409
63-
6460
try:
6561
validated_project_data['alias'] =\
6662
create_alias(validated_project_data['name'])
@@ -74,11 +70,6 @@ def post(self):
7470
message=f'cluster {cluster_id} not found'
7571
), 404
7672

77-
tags = None
78-
if validated_project_data.get('tags_add'):
79-
tags = validated_project_data['tags_add']
80-
validated_project_data.pop('tags_add', None)
81-
8273
kube_host = cluster.host
8374
kube_token = cluster.token
8475

@@ -152,8 +143,6 @@ def post(self):
152143
kube_client.kube.delete_namespace(namespace_name)
153144

154145
return dict(status="fail", message="Internal Server Error"), 500
155-
if tags:
156-
add_tags_to_project(tags, project)
157146

158147
# create a billing invoice on project creation
159148
new_invoice = BillingInvoice(project_id=project.id)
@@ -189,7 +178,7 @@ def post(self):
189178
log_activity('Project', status='Success',
190179
operation='Create',
191180
description='Created project Successfully',
192-
a_project=project,
181+
a_project_id=project.id,
193182
a_cluster_id=cluster_id)
194183

195184
return dict(status='success', data=dict(project=new_project_data)), 201
@@ -202,13 +191,9 @@ def post(self):
202191
return dict(status='fail', message=str(e.body)), check_kube_error_code(e.status)
203192

204193
except Exception as err:
205-
try:
206-
err = err.body
207-
except:
208-
err = str(err)
209194
log_activity('Project', status='Failed',
210195
operation='Create',
211-
description=err,
196+
description=err.body,
212197
a_cluster_id=cluster_id)
213198
return dict(status='fail', message=str(err)), 500
214199

@@ -338,7 +323,7 @@ def get(self):
338323
user.save()
339324
# ADD a logger for when user.save does not work
340325

341-
# If series is requested, include graph data based on filtered dates
326+
# If series is requested, include graph data based on filtered dates
342327
if series:
343328
validated_query_data, errors = ProjectGraphSchema().load(graph_filter_data)
344329
if errors:
@@ -349,15 +334,13 @@ def get(self):
349334
set_by = validated_query_data['set_by']
350335

351336
# Get graph data from Project model
352-
graph_data = Project.graph_data(
353-
start=start, end=end, set_by=set_by)
337+
graph_data = Project.graph_data(start=start, end=end, set_by=set_by)
354338

355339
return dict(
356340
status='success',
357341
data=dict(
358342
metadata=project_metadata,
359343
pagination=pagination_data,
360-
# projects=json.loads(project_data),
361344
graph_data=graph_data
362345
)
363346
), 200
@@ -371,7 +354,6 @@ def get(self):
371354
)
372355
), 200
373356

374-
375357
class ProjectDetailView(Resource):
376358

377359
@jwt_required
@@ -483,7 +465,7 @@ def delete(self, project_id):
483465
log_activity('Project', status='Success',
484466
operation='Delete',
485467
description='Deleted project Successfully',
486-
a_project=project,
468+
a_project_id=project.id,
487469
a_cluster_id=project.cluster_id)
488470
return dict(
489471
status='success',
@@ -508,7 +490,7 @@ def delete(self, project_id):
508490
log_activity('Project', status='Success',
509491
operation='Delete',
510492
description='Deleted project Successfully',
511-
a_project=project,
493+
a_project_id=project.id,
512494
a_cluster_id=project.cluster_id)
513495
return dict(
514496
status='success',
@@ -539,7 +521,7 @@ def patch(self, project_id):
539521
current_user_roles = get_jwt_claims()['roles']
540522

541523
project_schema = ProjectSchema(
542-
only=("name", "description", "organisation", "project_type", "is_public", "tags_add", "tags_remove"), partial=True)
524+
only=("name", "description", "organisation", "project_type"), partial=True)
543525

544526
project_data = request.get_json()
545527

@@ -571,30 +553,21 @@ def patch(self, project_id):
571553
if not is_authorised_project_user(project, current_user_id, 'admin'):
572554
return dict(status='fail', message='unauthorised'), 403
573555

574-
if validate_project_data.get('tags_add'):
575-
add_tags_to_project(
576-
validate_project_data['tags_add'], project)
577-
validate_project_data.pop('tags_add', None)
578-
if validate_project_data.get('tags_remove'):
579-
remove_tags_from_project(
580-
validate_project_data['tags_remove'], project)
581-
validate_project_data.pop('tags_remove', None)
582-
583556
updated = Project.update(project, **validate_project_data)
584557

585558
if not updated:
586559
log_activity('Project', status='Failed',
587560
operation='Update',
588561
description='Internal Server Error',
589-
a_project=project,
562+
a_project_id=project.id,
590563
a_cluster_id=project.cluster_id
591564
)
592565
return dict(status='fail', message='internal server error'), 500
593566

594567
log_activity('Project', status='Success',
595568
operation='Update',
596569
description='Updated project Successfully',
597-
a_project=project,
570+
a_project_id=project.id,
598571
a_cluster_id=project.cluster_id)
599572
return dict(
600573
status='success',
@@ -634,7 +607,7 @@ def get(self, user_id):
634607
).all()
635608

636609
pagination_meta_data, projects = paginate(
637-
user.projects[::-1], per_page, page)
610+
user.projects, per_page, page)
638611

639612
user_projects, errors = project_schema.dumps(
640613
projects)
@@ -648,7 +621,7 @@ def get(self, user_id):
648621
status='success',
649622
data=dict(
650623
pagination={**pagination_meta_data,
651-
'pinned_count': len(json.loads(pinned_projects))},
624+
'pinned_count': len(pinned_projects)},
652625
pinned=json.loads(pinned_projects),
653626
projects=json.loads(user_projects),
654627
)

0 commit comments

Comments
 (0)