Skip to content

Commit

Permalink
refactor: update code
Browse files Browse the repository at this point in the history
docs: add codecov
  • Loading branch information
Nicconike committed Aug 3, 2024
1 parent a6b608d commit 4b4d404
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 40 deletions.
19 changes: 10 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
[![Release](https://github.com/Nicconike/Wakatime-Leaderboards/actions/workflows/release.yml/badge.svg)](https://github.com/Nicconike/Wakatime-Leaderboards/actions/workflows/release.yml)
[![Bandit](https://github.com/Nicconike/Wakatime-Leaderboards/actions/workflows/bandit.yml/badge.svg)](https://github.com/Nicconike/Wakatime-Leaderboards/actions/workflows/bandit.yml)
[![CodeQL & Pylint](https://github.com/Nicconike/Wakatime-Leaderboards/actions/workflows/codeql.yml/badge.svg)](https://github.com/Nicconike/Wakatime-Leaderboards/actions/workflows/codeql.yml)
[![codecov](https://codecov.io/gh/Nicconike/Wakatime-Leaderboards/graph/badge.svg?token=CX701AOW5Y)](https://codecov.io/gh/Nicconike/Wakatime-Leaderboards)
![Docker Image Size](https://img.shields.io/docker/image-size/nicconike/wakatime-leaderboards?logo=docker&label=Docker%20Image)
![Docker Pulls](https://img.shields.io/docker/pulls/nicconike/wakatime-leaderboards?logo=docker&label=Docker%20Pulls)
![Python Version from PEP 621 TOML](https://img.shields.io/python/required-version-toml?tomlFilePath=https%3A%2F%2Fgithub.com%2FNicconike%2FWakatime-Leaderboards%2Fblob%2Fmaster%2Fpyproject.toml%3Fraw%3Dtrue)
Expand All @@ -24,21 +25,21 @@

### Public Leaderboards (Weekly)

| Ranked | Hours Coded | Daily Avg |
| ------ | ----------- | --------- |
| - | 11 hrs 36 mins | 1 hrs 39 mins |
| Ranked | Hours Coded | Daily Avg |
| ------ | -------------- | ------------- |
| - | 11 hrs 36 mins | 1 hrs 39 mins |

### Country Leaderboard (Unknown)

| Ranked | Hours Coded | Daily Avg |
| ------ | ----------- | --------- |
| - | 11 hrs 36 mins | 1 hrs 39 mins |
| Ranked | Hours Coded | Daily Avg |
| ------ | -------------- | ------------- |
| - | 11 hrs 36 mins | 1 hrs 39 mins |

### Top Language (Python)

| Ranked | Hours Coded | Daily Avg |
| ------ | ----------- | --------- |
| 4173 | 2 hrs 45 mins | 23 mins |
| Ranked | Hours Coded | Daily Avg |
| ------ | ------------- | --------- |
| 4173 | 2 hrs 45 mins | 23 mins |


<!-- Wakatime-End -->
Expand Down
62 changes: 31 additions & 31 deletions api/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def get_wakatime_stats(api_key):
headers = {"Authorization": auth_string}
response = requests.get(url, headers=headers, timeout=REQUEST_TIMEOUT)
if response.status_code == 200:
return response.json().get('data', {})
return response.json().get("data", {})
raise ValueError("Failed to fetch user stats: " +
str(response.status_code))

Expand All @@ -49,84 +49,84 @@ def get_leaderboards(api_key):
headers = {"Authorization": auth_string}

stats = get_wakatime_stats(api_key)
country_code = stats.get('country_code')
languages = stats.get('languages', [])
top_language = languages[0]['name'] if languages else None
total_coding_time = stats.get('total_seconds', 0)
country_code = stats.get("country_code")
languages = stats.get("languages", [])
top_language = languages[0]["name"] if languages else None
total_coding_time = stats.get("total_seconds", 0)

leaderboards = {
'total_coding_time': total_coding_time,
'top_language': top_language,
'language_times': {lang['name']: lang['total_seconds'] for lang in languages}
"total_coding_time": total_coding_time,
"top_language": top_language,
"language_times": {lang["name"]: lang["total_seconds"] for lang in languages}
}

# Global leaderboard
response = requests.get(url, headers=headers, timeout=REQUEST_TIMEOUT)
if response.status_code == 200:
leaderboards['global'] = response.json().get('current_user')
leaderboards["global"] = response.json().get("current_user")

# Country leaderboard
if country_code:
country_url = url + "?country_code=" + country_code
response = requests.get(
country_url, headers=headers, timeout=REQUEST_TIMEOUT)
if response.status_code == 200:
leaderboards['country'] = response.json().get('current_user')
leaderboards["country"] = response.json().get("current_user")

# Language leaderboard
if top_language:
language_url = url + "?language=" + top_language
response = requests.get(
language_url, headers=headers, timeout=REQUEST_TIMEOUT)
if response.status_code == 200:
leaderboards['language'] = response.json().get('current_user')
leaderboards["language"] = response.json().get("current_user")

return leaderboards


def format_leaderboard_data(leaderboards):
"""Format Leaderboard Stats Data"""
markdown = "## Wakatime Leaderboards (Worldwide)\n\n"
markdown = "### Wakatime Leaderboards (Worldwide)\n\n"

# Helper function to create table
def create_table(title, data):
table = "### " + title + "\n\n"
table = "#### " + title + "\n\n"
table += "| Ranked | Hours Coded | Daily Avg |\n"
table += "| ------ | ----------- | --------- |\n"
table += "| " + data['rank'] + " | " + \
data['hours'] + " | " + data['daily_avg'] + " |\n\n"
table += "| " + data["rank"] + " | " + \
data["hours"] + " | " + data["daily_avg"] + " |\n\n"
return table

total_seconds = leaderboards['total_coding_time']
total_seconds = leaderboards["total_coding_time"]

# Public Leaderboards (Weekly)
global_data = leaderboards.get('global', {})
global_data = leaderboards.get("global", {})
public_data = {
'rank': str(global_data.get('rank')) if global_data.get('rank') is not None else '-',
'hours': format_time(total_seconds),
'daily_avg': format_time(total_seconds / 7)
"rank": str(global_data.get("rank")) if global_data.get("rank") is not None else "-",
"hours": format_time(total_seconds),
"daily_avg": format_time(total_seconds / 7)
}
markdown += create_table("Public Leaderboards (Weekly)", public_data)

# Country Leaderboard
country_data = leaderboards.get('country', {})
country_name = country_data.get('country', 'Unknown')
country_data = leaderboards.get("country", {})
country_name = country_data.get("country", "Unknown")
country_leaderboard_data = {
'rank': str(country_data.get('rank')) if country_data.get('rank') is not None else '-',
'hours': format_time(total_seconds),
'daily_avg': format_time(total_seconds / 7)
"rank": str(country_data.get("rank")) if country_data.get("rank") is not None else "-",
"hours": format_time(total_seconds),
"daily_avg": format_time(total_seconds / 7)
}
markdown += create_table("Country Leaderboard (" +
country_name + ")", country_leaderboard_data)

# Top Language
language_data = leaderboards.get('language', {})
top_language = leaderboards.get('top_language', 'Unknown')
language_seconds = leaderboards['language_times'].get(top_language, 0)
language_data = leaderboards.get("language", {})
top_language = leaderboards.get("top_language", "Unknown")
language_seconds = leaderboards["language_times"].get(top_language, 0)
language_leaderboard_data = {
'rank': str(language_data.get('rank')) if language_data.get('rank') is not None else '-',
'hours': format_time(language_seconds),
'daily_avg': format_time(language_seconds / 7)
"rank": str(language_data.get("rank")) if language_data.get("rank") is not None else "-",
"hours": format_time(language_seconds),
"daily_avg": format_time(language_seconds / 7)
}
markdown += create_table("Top Language (" +
top_language + ")", language_leaderboard_data)
Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ Homepage = "https://github.com/nicconike/wakatime-leaderboards"

[tool.semantic_release]
version_variables = ["api/main.py:__version__"]
tag_format = "v{version}"
commit_version_number = true
commit_message = "chore: Version Release {version}"
upload_to_pypi = false
Expand Down
Binary file modified requirements.txt
Binary file not shown.

0 comments on commit 4b4d404

Please sign in to comment.