init repository

This commit is contained in:
rmanach 2024-12-17 09:33:44 +01:00
parent 202924df8a
commit 3f4557e547
9 changed files with 163 additions and 0 deletions

0
.env.example Normal file
View File

11
.gitignore vendored Normal file
View File

@ -0,0 +1,11 @@
.mypy_cache
.ruff_cache
.pypirc
__pycache__
dist
.env
venv

25
Makefile Normal file
View File

@ -0,0 +1,25 @@
ROOT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
PYTHON := $(ROOT_DIR)venv/bin/python
install:
python3 -m venv venv
$(PYTHON) -m pip install -r requirements.txt
$(PYTHON) -m pip install -r requirements-dev.txt
lint:
$(PYTHON) -m ruff check src --fix
format:
$(PYTHON) -m ruff format src
check-type:
$(PYTHON) -m mypy main.py src
check: format lint check-type
build: check
$(PYTHON) build-deps.py
$(PYTHON) -m hatch -v build -t wheel
publish: build
$(PYTHON) -m twine upload --repository gitea dist/*.whl

51
build-deps.py Normal file
View File

@ -0,0 +1,51 @@
import argparse
import os
import re
DEPS_REGEX = "dependencies = \[[^\]]*\]"
PYPROJECT_FILENAME = "pyproject.toml"
if __name__ == "__main__":
"""
build-deps retrieves all mandatory requirements in `requirements.txt`
and copies them in `pyproject.toml` dependencies list.
"""
parser = argparse.ArgumentParser()
parser.add_argument("-d", "--dry-run", action="store_true")
args = parser.parse_args()
# read and store requirements
requirements: list[str] = []
with open("requirements.txt", "r") as f:
for d in f.readlines():
d = d.replace("\n", "")
if "#" in d:
d = d.split("#")[0].strip()
if "gdal" in d.lower():
print("gdal specific system version")
continue
requirements.append(f'"{d}"')
# format requirements for pryproject.toml
deps: str = "dependencies = [\n"
for dep in requirements:
deps += f"\t{dep},\n"
deps += "]"
# get and replace the pyproject.toml content
content: str = ""
with open(PYPROJECT_FILENAME, "r") as f:
content = f.read()
content = re.sub(DEPS_REGEX, deps, content, 1)
# write the new content in a temp file
with open(f"{PYPROJECT_FILENAME}.tmp", "w") as f:
f.write(content)
# if not dry run, override the original pyproject.toml
if not args.dry_run:
try:
os.rename(f"{PYPROJECT_FILENAME}.tmp", PYPROJECT_FILENAME)
except Exception as e:
print(f"error occurred while overriding pyproject file: {e}")
os.remove(f"{PYPROJECT_FILENAME}.tmp")

16
main.py Normal file
View File

@ -0,0 +1,16 @@
import logging
import sys
from src import VERSION
stdout_handler = logging.StreamHandler(stream=sys.stdout)
logging.basicConfig(
format="[%(levelname)s] - %(asctime)s - %(message)s",
level=logging.INFO,
handlers=(stdout_handler,),
)
if __name__ == "__main__":
logging.info(f"WhereIs client v{VERSION}")

52
pyproject.toml Normal file
View File

@ -0,0 +1,52 @@
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "whereis-client"
dynamic = ["version"]
description = "WhereIs API client library"
dependencies = [
"requests==2.32.3",
]
[tool.hatch.version]
path = "src/__init__.py"
[tool.hatch.build.targets.wheel]
packages = ["src"]
[tool.hatch.build.targets.sdist]
only-include = ["src"]
[tool.hatch.build.targets.wheel.sources]
"src" = "whereis-client"
[tool.ruff]
select = ["E", "F", "I"]
ignore = []
exclude = [
".git",
".ruff_cache",
"venv",
]
line-length = 88
target-version = "py310"
[tool.ruff.mccabe]
max-complexity = 10
[tool.mypy]
exclude = [
"venv",
"dist",
"twine-trusted.py"
]
ignore_missing_imports = true
[tool.isort]
extend_skip = ["venv"]
profile = "black"

5
requirements-dev.txt Normal file
View File

@ -0,0 +1,5 @@
mypy===1.13.0
ruff==0.8.3
twine==6.0.1
types-requests==2.32.0.20241016
hatch==1.14.0

2
requirements.txt Normal file
View File

@ -0,0 +1,2 @@
requests==2.32.3
python-dotenv==1.0.1

1
src/__init__.py Normal file
View File

@ -0,0 +1 @@
VERSION = "0.1.0"