Skip to content
This repository was archived by the owner on Sep 5, 2023. It is now read-only.

Commit

Permalink
fix: Updates routes to fix error where the JupyterHub rolling update …
Browse files Browse the repository at this point in the history
…was not initiated (#546)
  • Loading branch information
jgwerner authored Apr 15, 2021
1 parent 88e905f commit ecf4e8c
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 32 deletions.
12 changes: 11 additions & 1 deletion src/graderservice/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,17 @@ Microservice used to setup new shared grader notebooks.

Install in editable mode:

pip install -r requirements.txt
pip install -e .

## Run Application

Run application locally with debug mode enabled:

```bash
export FLASK_APP=src/graderservice/graderservice
export FLASK_ENV=development
flask run
```

## Update Dependencies

Expand Down
9 changes: 5 additions & 4 deletions src/graderservice/graderservice/__init__.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import os

from flask import Flask
from graderservice.models import db
from graderservice.routes import routes_blueprint

from .models import db
from .routes import grader_setup_bp

project_dir = os.path.dirname(os.path.abspath(__file__))
database_file = "sqlite:///{}".format(
os.path.join(project_dir, "graderervice.db.sqlite3")
os.path.join(project_dir, "graderservice.db.sqlite3")
)


Expand All @@ -17,7 +18,7 @@ def create_app():
flask_app: the Flask application object
"""
app = Flask(__name__)
app.register_blueprint(routes_blueprint)
app.register_blueprint(grader_setup_bp)
app.config["SQLALCHEMY_DATABASE_URI"] = database_file
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.app_context().push()
Expand Down
62 changes: 35 additions & 27 deletions src/graderservice/graderservice/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,22 @@

from flask import Blueprint
from flask import jsonify
from graderservice.graderservice import NB_GID
from graderservice.graderservice import NB_UID
from graderservice.graderservice import GraderServiceLauncher
from graderservice.models import GraderService
from graderservice.models import db

from .graderservice import NB_GID
from .graderservice import NB_UID
from .graderservice import GraderServiceLauncher
from .models import GraderService
from .models import db

log_file_path = path.join(path.dirname(path.abspath(__file__)), "logging_config.ini")
logging.config.fileConfig(log_file_path)
logger = logging.getLogger()


routes_blueprint = Blueprint("routes", __name__)
grader_setup_bp = Blueprint("grader_setup_bp", __name__)


@routes_blueprint.route("/services/<org_name>/<course_id>", methods=["POST"])
@grader_setup_bp.route("/services/<org_name>/<course_id>", methods=["POST"])
def launch(org_name: str, course_id: str):
"""
Creates a new grader-notebook pod if not exists
Expand Down Expand Up @@ -48,19 +49,21 @@ def launch(org_name: str, course_id: str):
% (org_name, course_id)
)
# Register the new service to local database
with routes_blueprint.app_context():
new_service = GraderService(
name=course_id,
course_id=course_id,
url=f"http://{launcher.grader_name}:8888",
api_token=launcher.grader_token,
)
db.session.add(new_service)
db.session.commit()
new_service = GraderService(
name=course_id,
course_id=course_id,
url=f"http://{launcher.grader_name}:8888",
api_token=launcher.grader_token,
)
db.session.add(new_service)
db.session.commit()
# then do patch for jhub deployment
# with this the jhub pod will be restarted and get/load new services
launcher.update_jhub_deployment()
return jsonify(success=True)
return jsonify(
success=True,
message=f"Created new grader service for: {course_id}",
)

except Exception as e:
logger.error("Exception when calling create_grader_deployment() %s" % e)
Expand All @@ -76,7 +79,7 @@ def launch(org_name: str, course_id: str):
)


@routes_blueprint.route("/services", methods=["GET"])
@grader_setup_bp.route("/services", methods=["GET"])
def services():
"""
Returns the grader-notebook list used as services defined in the JupyterHub config.
Expand Down Expand Up @@ -116,7 +119,7 @@ def services():
return jsonify(services=services_resp, groups=groups_resp)


@routes_blueprint.route("/services/<org_name>/<course_id>", methods=["DELETE"])
@grader_setup_bp.route("/services/<org_name>/<course_id>", methods=["DELETE"])
def services_deletion(org_name: str, course_id: str):
"""Deletes the grader setup service
Expand All @@ -132,17 +135,19 @@ def services_deletion(org_name: str, course_id: str):
launcher.delete_grader_deployment()
service_saved = GraderService.query.filter_by(course_id=course_id).first()
if service_saved:
with routes_blueprint.app_context():
db.session.delete(service_saved)
db.session.commit()
logger.info("Deleting grader service for course %s:" % course_id)
return jsonify(success=True)
db.session.delete(service_saved)
db.session.commit()
logger.info("Deleted grader service for course %s:" % course_id)
return jsonify(
success=True,
message=f"Deleted grader service for course: {course_id}",
)
except Exception as e:
logger.error("Exception when calling delete_grader_deployment(): %s" % e)
return jsonify(success=False, error=str(e)), 500


@routes_blueprint.route(
@grader_setup_bp.route(
"/courses/<org_name>/<course_id>/<assignment_name>", methods=["POST"]
)
def assignment_dir_creation(org_name: str, course_id: str, assignment_name: str):
Expand Down Expand Up @@ -179,10 +184,13 @@ def assignment_dir_creation(org_name: str, course_id: str, assignment_name: str)
except Exception as e:
logger.error(f"Exception when updating assignment directory permissions: {e}")
logger.info("Creating new assignment directory %s OK" % assignment_dir)
return jsonify(success=True)
return jsonify(
success=True,
message=f"Created new assignment directory: {assignment_dir}",
)


@routes_blueprint.route("/healthcheck")
@grader_setup_bp.route("/healthcheck")
def healthcheck():
"""Healtheck endpoint
Expand Down

0 comments on commit ecf4e8c

Please sign in to comment.