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
32 changes: 16 additions & 16 deletions DEVELOP.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,50 +3,50 @@
Clone repository (fork and clone your own repo for contributions) and install project with [Poetry](https://python-poetry.org/docs/)

```bash
$ git clone git@github.com:bmwant/leak.git
$ cd leak
$ poetry install
git clone git@github.com:bmwant/leak.git
cd leak
poetry install
```

Set `LEAK_DEBUG` environment variable for the extra internal logging while developing

```bash
$ export LEAK_DEBUG=1
$ poetry run leak requests
export LEAK_DEBUG=1
poetry run leak requests
```

### Testing

Unittests are written using [pytest](https://docs.pytest.org/en/latest/).

```bash
$ poetry run pytest -sv tests
poetry run pytest -sv tests
# or
$ make tests
make tests
```

or to test on all possible environments

```bash
$ poetry run tox
poetry run tox
```

### Releasing

Bump a version with features you want to include and build a package

```bash
$ poetry version patch # patch version update
$ poetry version minor
$ poetry version major # choose one based on semver rules
$ poetry build # just builds a package
$ make release # clean + build + publish
poetry version patch # patch version update
poetry version minor
poetry version major # choose one based on semver rules
poetry build # just builds a package
make release # clean + build + publish
```

Upload package to GitHub and PyPI

```bash
$ git tag -a 1.3.0 -m "Version 1.3.0"
$ git push --tags
$ poetry publish # only uploads package to PyPI
git tag -a 1.3.0 -m "Version 1.3.0"
git push --tags
poetry publish # only uploads package to PyPI
```
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
The MIT License (MIT)

Copyright (c) 202 Misha Behersky
Copyright (c) 2025 Misha Behersky

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
5 changes: 2 additions & 3 deletions leak/main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import sys
from contextlib import contextmanager
from typing import Dict

import requests

Expand All @@ -12,7 +11,7 @@ def dummy_context(*args, **kwargs):
yield


def get_package_data(package_name: str) -> Dict:
def get_package_data(package_name: str) -> dict:
url = f"https://pypi.org/pypi/{package_name}/json"
resp = requests.get(url)
if resp.status_code != 200:
Expand All @@ -22,7 +21,7 @@ def get_package_data(package_name: str) -> Dict:
return data


def get_downloads_data(package_name: str) -> Dict:
def get_downloads_data(package_name: str) -> dict:
url = f"https://api.pepy.tech/api/v2/projects/{package_name}"
resp = requests.get(url)
if resp.status_code != 200:
Expand Down
15 changes: 6 additions & 9 deletions leak/parser.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import datetime
from typing import Dict, List
from datetime import datetime

from leak import config, logger


def versions_split(version_str, type_applyer=int):
def versions_split(version_str, type_applyer=int) -> list[int]:
dots_count = version_str.count(".")
if dots_count == 0:
major, minor, patch = version_str, 0, 0
Expand All @@ -24,27 +23,25 @@ def versions_split(version_str, type_applyer=int):
return list(map(type_applyer, (major, minor, patch)))


def get_max_downloads_for_release(release: List[Dict]) -> int:
def get_max_downloads_for_release(release: list[dict]) -> int:
max_downloads = 0
for release_record in release:
if release_record["downloads"] > max_downloads:
max_downloads = release_record["downloads"]
return max_downloads


def get_latest_time_for_release(release: List[Dict]) -> str:
def get_latest_time_for_release(release: list[dict]) -> datetime:
latest_time = config.EPOCH_BEGIN
date_format = "%Y-%m-%dT%H:%M:%S"
for release_record in release:
upload_time = datetime.datetime.strptime(
release_record["upload_time"], date_format
)
upload_time = datetime.strptime(release_record["upload_time"], date_format)
if upload_time > latest_time:
latest_time = upload_time
return latest_time


def get_downloads_for_version(version: str, downloads_data: Dict) -> int:
def get_downloads_for_version(version: str, downloads_data: dict) -> int:
downloads = 0
for date, data in downloads_data.items():
downloads += data.get(version, 0)
Expand Down
5 changes: 1 addition & 4 deletions leak/ui.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import functools
from typing import Dict, Optional

from packaging.version import parse as parse_version
from rich import box
Expand Down Expand Up @@ -52,9 +51,7 @@ def show_package_info(data):
rprint(panel)


def show_package_versions(
releases, downloads: Optional[Dict] = None, showall: bool = False
):
def show_package_versions(releases, downloads: dict, showall: bool = False):
most_popular_count = 0 # noqa
most_popular_release = None # noqa
most_recent_release = None
Expand Down