Introduction
This dummy project outlines the requirements for a Python Flask based web application to interact with the GitHub API. The app should serve as a simple GitHub profile and repository management tool for the authenticated user.
More information with an overview and clear objectives here.
Skills Used
- Python
- Flask
- ONS Design System
- GitHub REST API
- Linters and Formaters ONS Python Template
- pytest
- Poetry
- MkDocs
Tech Stack
- Python
- Flask
Objectives
Project Setup
- Make use of poetry to manage both dev and production dependencies.
- Make use of a Makefile to make commonly executed commands easier to run.
- Implement and use the linters and formatters used by the ONS Python Template (Black, Ruff, Pylint, Mypy).
- Make use of a /docs folder and MkDocs to add documentation to the project.
- Insert all GitHub Usage Policy requirements (i.e PIRR.md, CODEOWNERS, README, .gitignore, etc.). More information available within Software Engineering Policies.
Core Functionality
- Authenticate with the GitHub API using a fine grained personal access token. This should be passed through the environment
- Within a terminal use:
export PAT=<access_token>
- In python use:
token = os.getenv("PAT")
- Within a terminal use:
- Display a range of information about the authenticated user (i.e username, avatar, follower, etc.)
- Ability to update the authenticated user's profile information (i.e update profile bio)
- Display a list of repositories for the authenticated user
- Ability to archive repositories *This functionality is just a suggestion on what you can do with the REST API. Feel free to include more functionality or even try the GraphQL API.
User Interface
- All UI within the tool should use the ONS Design System.
Testing
- The code used within the project should have a coverage greater than 70%.
Documentation
- The project should be documented using MkDocs and Material for MkDocs.
- The MkDocs site should be built and deployed in GitHub pages.
- Feel free to use any of the GitHub Tooling repos as an example.