Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
name: Pylint

name: Linting and format
on:
push:
pull_request:
Expand Down Expand Up @@ -51,3 +50,6 @@ jobs:

- name: Run Pylint
run: poetry run pylint byteguide/

- name: Run Black
run: poetry run black --check byteguide/
8 changes: 5 additions & 3 deletions byteguide/libs/fs.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ def _delete_all_versions(self, project: str) -> t.Tuple[bool, str]:
if version_dir.is_dir():
try:
shutil.rmtree(version_dir)
except Exception as e: # pylint: disable=broad-except
except Exception as e: # pylint: disable=broad-except
log.error(e)
return False, f"Unknown error when deleting version {version_dir}: {str(e)}"

Expand Down Expand Up @@ -166,7 +166,9 @@ def upload(self, filename: FileStorage, uniq_key: str, reupload: bool = False) -

return status

def delete(self, project: str, unique_key: str, version: t.Optional[str] = None) -> t.Tuple[bool, str]: # pylint: disable=too-many-return-statements
def delete( # pylint: disable=too-many-return-statements
self, project: str, unique_key: str, version: t.Optional[str] = None
) -> t.Tuple[bool, str]:
"""
Delete a version from the project.

Expand Down Expand Up @@ -197,7 +199,7 @@ def delete(self, project: str, unique_key: str, version: t.Optional[str] = None)

try:
shutil.rmtree(self.docs_dir / project)
except Exception as e: # pylint: disable=broad-except
except Exception as e: # pylint: disable=broad-except
log.error(e)
return False, f"Unknown error when deleting project {project}: {str(e)}"
return True, f"Project {project} deleted successfully!"
Expand Down
10 changes: 4 additions & 6 deletions byteguide/libs/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,16 +90,14 @@ def validate_register_project(data: t.Dict) -> t.List[str]:

if not data.get("name"):
errors.append("Project 'name' is required!")

if not data.get("description"):
errors.append("Project 'description' is required!")

# Check that name does not contain any special characters or whitespace
if not Validators.is_valid_name(data.get("name")):
elif not Validators.is_valid_name(data.get("name")):
errors.append(
"Project 'name' must be alphanumeric separated by dash or underscore and cannot contain whitespaces!"
)

if not data.get("description"):
errors.append("Project 'description' is required!")

if "tags" in data and not isinstance(data["tags"], list): # optional
errors.append("Project 'tags' must be a list!")

Expand Down
20 changes: 20 additions & 0 deletions byteguide/routes/display.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,3 +123,23 @@ def changelog(project):
text = f"< '{project_changelog}' missing! >"

return render_template("changelog.html", content=text)


@display_routes.route("/metadata/<project>", methods=["GET"])
def metadata(project):
"""
View the metadata of a project.

Args:
project (str): name of the project whose metadata is to be fetched.

Example:
GET /browse/metadata/<project>
"""
log.debug(f"Requested metadata for project {project}")
handler = MetaDataHandler(project)

if handler.metadata:
return jsonify(handler.metadata), 200

return jsonify({"status": "failed", "message": f"Project {project} not found"}), 404
3 changes: 2 additions & 1 deletion byteguide/routes/manage.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ def register():
errors = util.validate_register_project(register_project)

if errors:
return jsonify({"message": "failed to register project", "errors": errors}), 400
error_message = ", ".join(errors)
return jsonify({"message": f"Failed to register project: {error_message}", "status": "failed"}), 400

docfiles_dir = Path(config.docfiles_dir)

Expand Down
Loading