aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar momothereal <[email protected]>2018-06-23 11:54:34 -0400
committerGravatar momothereal <[email protected]>2018-06-23 11:54:34 -0400
commit83ac4e09560943937e03567d9d4a789a46deb9bc (patch)
tree18a123bebf20d32d2b11917b2081aa748af135ec
parentSome improvements (diff)
Show more helpful error messages when editing team repo
-rw-r--r--pysite/views/main/jams/team_edit_repo.py36
-rw-r--r--templates/main/jams/team_view.html5
2 files changed, 29 insertions, 12 deletions
diff --git a/pysite/views/main/jams/team_edit_repo.py b/pysite/views/main/jams/team_edit_repo.py
index 8830f799..3aa37ba6 100644
--- a/pysite/views/main/jams/team_edit_repo.py
+++ b/pysite/views/main/jams/team_edit_repo.py
@@ -8,15 +8,15 @@ from rethinkdb import ReqlNonExistenceError
from urllib3.util import parse_url
from werkzeug.exceptions import BadRequest, NotFound, Unauthorized
-from pysite.base_route import RouteView
-from pysite.constants import GITLAB_ACCESS_TOKEN
+from pysite.base_route import APIView
+from pysite.constants import GITLAB_ACCESS_TOKEN, ErrorCodes
from pysite.decorators import csrf
from pysite.mixins import DBMixin, OAuthMixin
log = logging.getLogger(__name__)
-class JamsTeamEditRepo(RouteView, DBMixin, OAuthMixin):
+class JamsTeamEditRepo(APIView, DBMixin, OAuthMixin):
path = "/jams/teams/<string:team_id>/edit_repo"
name = "jams.team.edit_repo"
@@ -58,16 +58,23 @@ class JamsTeamEditRepo(RouteView, DBMixin, OAuthMixin):
project_path = url.path.strip("/")
if len(project_path.split("/")) < 2:
- raise BadRequest()
+ return self.error(
+ ErrorCodes.incorrect_parameters,
+ "Not a valid repository."
+ )
word_regex = re.compile("^[\-\w]+$")
for segment in project_path.split("/"):
if not word_regex.fullmatch(segment):
- raise BadRequest()
+ return self.error(
+ ErrorCodes.incorrect_parameters,
+ "Not a valid repository."
+ )
project_path_encoded = quote(project_path, safe='')
- if not self.validate_project(team, project_path_encoded):
- return
+ validation = self.validate_project(team, project_path_encoded)
+ if validation is not True:
+ return validation
team_obj = self.db.get(self.table_name, team_id)
team_obj["repo"] = project_path
@@ -84,7 +91,10 @@ class JamsTeamEditRepo(RouteView, DBMixin, OAuthMixin):
query_response = self.request_project(project_path)
if query_response.status_code != 200:
- raise BadRequest()
+ return self.error(
+ ErrorCodes.incorrect_parameters,
+ "Not a valid repository."
+ )
if "repo" not in team["jam"]:
return True
@@ -92,7 +102,10 @@ class JamsTeamEditRepo(RouteView, DBMixin, OAuthMixin):
project_data = query_response.json()
if "forked_from_project" not in project_data:
- raise BadRequest()
+ return self.error(
+ ErrorCodes.incorrect_parameters,
+ "This repository is not a fork of the jam's repository."
+ )
# check if it's a fork for the right repo
forked_from_project = project_data["forked_from_project"]
@@ -105,7 +118,10 @@ class JamsTeamEditRepo(RouteView, DBMixin, OAuthMixin):
jam_repo_data = jam_repo_response.json()
if jam_repo_data["id"] != forked_from_project["id"]:
- raise BadRequest()
+ return self.error(
+ ErrorCodes.incorrect_parameters,
+ "This repository is not a fork of the jam's repository."
+ )
return True
diff --git a/templates/main/jams/team_view.html b/templates/main/jams/team_view.html
index 860a8854..95cbb0b1 100644
--- a/templates/main/jams/team_view.html
+++ b/templates/main/jams/team_view.html
@@ -171,7 +171,7 @@
}
return callback(true, data);
- }).fail(() => callback(false));
+ }).fail((xhr) => callback(false, xhr["responseJSON"]));
}
repo_submit.onclick = () => {
@@ -190,8 +190,9 @@
resetGitLabActivity();
} else {
console.log(data);
+ let message = (data && "error_message" in data) ? `Failed: ${data["error_message"]}` : "Failed to edit repository.";
UIkit.notification({
- "message": "Failed to edit repository",
+ "message": message,
"status": "danger",
"pos": "bottom-center",
"timeout": 5000