Skip to content

Anjan50/GitHub_Contribution_Analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“Œ Students' Pre-class GitHub Contribution Research

This project investigates students' pre-class GitHub contributions and their impact on in-class performance. It involves refactoring the GraphQL API endpoints for contribution metrics, integrating them into a Python Flask framework, and making these queries accessible via URL-based API endpoints.

πŸ”— Wiki Documentation: Expertiza Wiki

πŸ“Ί Watch the video here: GraphQL API Overview

πŸš€ Project Overview

πŸ”Ή G2401 - Refactor GraphQL API Endpoint for Contribution Metrics

This project refactors the GraphQL API endpoints in an existing codebase that gathers user GitHub contribution data, ensuring improved modularity and maintainability.

πŸ”Ή Key Objectives

βœ… API Endpoint Development - Integrate existing GraphQL queries into Flask as API endpoints. βœ… Code Refactoring - Replace hard-coded strings with reusable constants for better maintainability. βœ… Testing & Validation - Conduct unit and integration tests to validate functionality. βœ… Documentation - Provide usage details for each endpoint.

πŸ— API Refactoring Overview

πŸ”Ή Queries Refactored

πŸ”Έ /comments

  • user_commit_comments
  • user_gist_comments
  • user_issue_comments
  • user_repository_discussion_comments

πŸ”Έ /contributions

  • user_gists
  • user_issues
  • user_pull_requests

πŸ”Έ /time_range_contributions

  • user_contributions_collection

πŸ”Ή Constants

πŸ”Ή Field Constants - Frequently referenced fields in GraphQL queries. πŸ”Ή Node Constants - Standardized query node names. πŸ”Ή Argument Constants - Common argument names for GraphQL queries.

🌐 Flask API Endpoints

  • /comments - Fetch user comments data.
  • /contributions - Retrieve user contributions (gists, issues, pull requests).
  • /profiles - Get user profile statistics.
  • /time_range_contributions - Fetch contributions within a specified time range.

πŸ§ͺ Testing

Each endpoint was tested extensively for:

  • Accuracy of responses
  • Pagination handling
  • Error management

πŸ–₯ Python Version & Setup

βš™οΈ Prerequisites

πŸ”Ή GitHub Personal Access Token (PAT) - Stored in a .env file. πŸ”Ή Python Version - Ensure Python 3.8+ is installed.

πŸ“₯ Installation

1️⃣ Clone the repository:

cd path/to/your/project/directory
git clone <repo_url>

2️⃣ Set up a virtual environment:

python -m venv venv

3️⃣ Activate the virtual environment:

  • On macOS/Linux:
source venv/bin/activate
  • On Windows (Command Prompt):
.\venv\Scripts\activate
  • On Windows (PowerShell):
.\venv\Scripts\Activate.ps1

4️⃣ Install dependencies:

pip install -r requirements.txt

πŸš€ Running the Project

TBD

πŸ” Authentication

GitHub API requires authentication.

  • Set up a .env file:
GITHUB_TOKEN='yourGitHubPAT'
  • The API uses dotenv to manage environment variables.

πŸ›  Project Structure

πŸ“ github_graphql/authentication.py - Handles GitHub API authentication. πŸ“ github_graphql/query.py - Constructs GraphQL queries using Python classes. πŸ“ github_graphql/client.py - Manages API requests and rate limits. πŸ“ queries/ - Contains predefined GraphQL queries for contributions, profiles, commits, and more.

πŸ“Š GraphQL Queries Implemented

πŸ“Œ User Information Queries

  • UserLoginViewer - Fetch authenticated user's login info.
  • UserProfileStats - Get detailed GitHub profile statistics.

πŸ“Œ Contribution Queries

  • UserContributions - Fetch user contributions like issues and PRs.
  • UserComments - Retrieve user comments on repositories.
  • UserCommits - Fetch commit-related contributions within a time range.

Python Version

We provide a convenient tool to query a user's GitHub metrics.

IN ORDER TO USE THIS TOOL, YOU NEED TO PROVIDE YOUR OWN .env FILE. Because we use the dotenv package to load environment variable. YOU ALSO NEED TO PROVIDE YOUR GITHUB PERSONAL ACCESS TOKEN(PAT) IN YOUR .env FILE i.e. GITHUB_TOKEN = 'yourGitHubPAT'

Installation

We recommend using virtual environment.

cd path/to/your/project/directory
python -m venv venv

On macOS and Linux:

source venv/bin/activate

On Windows (Command Prompt):

.\venv\Scripts\activate

On Windows (PowerShell):

.\venv\Scripts\Activate.ps1

then you can

pip -r requirements.txt

Execution

TBD

authentication β€” Basic authenticator class

Source code: github_graphql/authentication.py

This module provides the basic authentication mechanism. User needs to provide a valid GitHub PAT with correct scope to run queries. A PersonalAccessTokenAuthenticator object will be created with the PAT that user provided. get_authorization_header method will return an authentication header that will be used when send request to GitHub GraphQL server.

Authenticator Objects

Parent class of PersonalAccessTokenAuthenticator. Serve as base class of any authenticators.

PersonalAccessTokenAuthenticator Objects

Handles personal access token authentication method for GitHub clients.

class PersonalAccessTokenAuthenticator(token)

  • The token argument is required. This is the user's GitHub personal access token with the necessary scope to execute the queries that the user required.

Instance methods:

get_authorization_header()

  • Returns the authentication header as a dictionary i.e. {"Authorization": "your_access_token"}.

πŸ“Œ Repository Queries

  • UserRepositories - Fetch user-owned or contributed repositories.
  • RepositoryContributors - Fetch contributors for a repository.
  • RepositoryCommits - Retrieve commits from a repository's default branch.

πŸ“Œ API Rate Limit Query

  • RateLimit - Fetch remaining API request limits.

πŸ’‘ Future Enhancements

πŸ“Œ Expand the API with more contribution-related metrics. πŸ“Œ Optimize GraphQL query performance. πŸ“Œ Add front-end visualization for contribution tracking.


πŸ“’ Developed by: Anjan Diyora πŸ‘¨β€πŸ’»

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published