🏷️ Tighten up types

Enable --strict and a few others
This commit is contained in:
Nikolai Røed Kristiansen
2023-06-14 09:05:26 +02:00
committed by Nikolai Røed Kristiansen
parent d849143b65
commit 994e5b605b
7 changed files with 103 additions and 20 deletions

1
.gitignore vendored
View File

@@ -7,3 +7,4 @@ __pycache__
.coverage
coverage.xml
.vscode/
htmlcov/

View File

@@ -10,8 +10,12 @@ repos:
rev: v0.0.270
hooks:
- id: ruff
- repo: https://github.com/pre-commit/mirrors-mypy
rev: 'v1.3.0'
- repo: local
hooks:
- id: mypy
additional_dependencies: [types-requests==2.31.0.1]
name: mypy
entry: pipenv run mypy
language: python
require_serial: true
types: [python]
verbose: true

View File

@@ -9,6 +9,9 @@ pytest = "*"
pre-commit = "*"
ruff = "==0.0.272"
pytest-cov = "*"
mypy = "*"
types-requests = "==2.31.0.1"
types-beautifulsoup4 = "==4.12.0.5"
[packages]
requests = "*"

84
Pipfile.lock generated
View File

@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
"sha256": "7c2d664e62557bfe624328940bb455eee52bdfdae4b64d38ace6e0319de00f42"
"sha256": "539826acff99cfa91ce7260ba75b88a6dfd6b819c100c099e18fcd6567801cdf"
},
"pipfile-spec": 6,
"requires": {
@@ -344,11 +344,11 @@
},
"filelock": {
"hashes": [
"sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9",
"sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718"
"sha256:42f1e4ff2b497311213d61ad7aac5fed9050608e5309573f101eefa94143134a",
"sha256:82b1f7da46f0ae42abf1bc78e548667f484ac59d2bcec38c713cee7e2eb51e83"
],
"markers": "python_version >= '3.7'",
"version": "==3.12.0"
"version": "==3.12.1"
},
"identify": {
"hashes": [
@@ -366,6 +366,38 @@
"markers": "python_version >= '3.7'",
"version": "==2.0.0"
},
"mypy": {
"hashes": [
"sha256:1c4c42c60a8103ead4c1c060ac3cdd3ff01e18fddce6f1016e08939647a0e703",
"sha256:44797d031a41516fcf5cbfa652265bb994e53e51994c1bd649ffcd0c3a7eccbf",
"sha256:473117e310febe632ddf10e745a355714e771ffe534f06db40702775056614c4",
"sha256:4c99c3ecf223cf2952638da9cd82793d8f3c0c5fa8b6ae2b2d9ed1e1ff51ba85",
"sha256:550a8b3a19bb6589679a7c3c31f64312e7ff482a816c96e0cecec9ad3a7564dd",
"sha256:658fe7b674769a0770d4b26cb4d6f005e88a442fe82446f020be8e5f5efb2fae",
"sha256:6e33bb8b2613614a33dff70565f4c803f889ebd2f859466e42b46e1df76018dd",
"sha256:6e42d29e324cdda61daaec2336c42512e59c7c375340bd202efa1fe0f7b8f8ca",
"sha256:74bc9b6e0e79808bf8678d7678b2ae3736ea72d56eede3820bd3849823e7f305",
"sha256:76ec771e2342f1b558c36d49900dfe81d140361dd0d2df6cd71b3db1be155409",
"sha256:7d23370d2a6b7a71dc65d1266f9a34e4cde9e8e21511322415db4b26f46f6b8c",
"sha256:87df44954c31d86df96c8bd6e80dfcd773473e877ac6176a8e29898bfb3501cb",
"sha256:8c5979d0deb27e0f4479bee18ea0f83732a893e81b78e62e2dda3e7e518c92ee",
"sha256:95d8d31a7713510685b05fbb18d6ac287a56c8f6554d88c19e73f724a445448a",
"sha256:a22435632710a4fcf8acf86cbd0d69f68ac389a3892cb23fbad176d1cddaf228",
"sha256:a8763e72d5d9574d45ce5881962bc8e9046bf7b375b0abf031f3e6811732a897",
"sha256:c1eb485cea53f4f5284e5baf92902cd0088b24984f4209e25981cc359d64448d",
"sha256:c5d2cc54175bab47011b09688b418db71403aefad07cbcd62d44010543fc143f",
"sha256:cbc07246253b9e3d7d74c9ff948cd0fd7a71afcc2b77c7f0a59c26e9395cb152",
"sha256:d0b6c62206e04061e27009481cb0ec966f7d6172b5b936f3ead3d74f29fe3dcf",
"sha256:ddae0f39ca146972ff6bb4399f3b2943884a774b8771ea0a8f50e971f5ea5ba8",
"sha256:e1f4d16e296f5135624b34e8fb741eb0eadedca90862405b1f1fde2040b9bd11",
"sha256:e86c2c6852f62f8f2b24cb7a613ebe8e0c7dc1402c61d36a609174f63e0ff017",
"sha256:ebc95f8386314272bbc817026f8ce8f4f0d2ef7ae44f947c4664efac9adec929",
"sha256:f9dca1e257d4cc129517779226753dbefb4f2266c4eaad610fc15c6a7e14283e",
"sha256:faff86aa10c1aa4a10e1a301de160f3d8fc8703b88c7e98de46b531ff1276a9a"
],
"index": "pypi",
"version": "==1.3.0"
},
"mypy-extensions": {
"hashes": [
"sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d",
@@ -400,11 +432,11 @@
},
"platformdirs": {
"hashes": [
"sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f",
"sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5"
"sha256:0ade98a4895e87dc51d47151f7d2ec290365a585151d97b4d8d6312ed6132fed",
"sha256:e48fabd87db8f3a7df7150a4a5ea22c546ee8bc39bc2473244730d4b56d2cc4e"
],
"markers": "python_version >= '3.7'",
"version": "==3.5.1"
"version": "==3.5.3"
},
"pluggy": {
"hashes": [
@@ -515,6 +547,44 @@
"markers": "python_version >= '3.7'",
"version": "==67.8.0"
},
"types-beautifulsoup4": {
"hashes": [
"sha256:718364c8e6787884501c700b1d22b6c0a8711bf9d6c9bf96e1fba81495bc46a8",
"sha256:d9be456416a62a5b9740559592e1063a69d4b0a1b83911d878558c8ae8e07074"
],
"index": "pypi",
"version": "==4.12.0.5"
},
"types-html5lib": {
"hashes": [
"sha256:091e9e74e0ee37c93fd789a164e99b2af80ecf5a314280450c6a763d027ea209",
"sha256:758c1a27f3b63363a346f3646be9f8b1f25df4fc1f96f88af6d1d831f24ad675"
],
"version": "==1.1.11.14"
},
"types-requests": {
"hashes": [
"sha256:3de667cffa123ce698591de0ad7db034a5317457a596eb0b4944e5a9d9e8d1ac",
"sha256:afb06ef8f25ba83d59a1d424bd7a5a939082f94b94e90ab5e6116bd2559deaa3"
],
"index": "pypi",
"version": "==2.31.0.1"
},
"types-urllib3": {
"hashes": [
"sha256:3300538c9dc11dad32eae4827ac313f5d986b8b21494801f1bf97a1ac6c03ae5",
"sha256:5dbd1d2bef14efee43f5318b5d36d805a489f6600252bb53626d4bfafd95e27c"
],
"version": "==1.26.25.13"
},
"typing-extensions": {
"hashes": [
"sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26",
"sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"
],
"markers": "python_version >= '3.7'",
"version": "==4.6.3"
},
"virtualenv": {
"hashes": [
"sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e",

View File

@@ -1,7 +1,9 @@
import dataclasses
import json
import logging
from collections.abc import Mapping
from datetime import datetime
from typing import Any
from jinja2 import Environment, FileSystemLoader, select_autoescape
@@ -13,7 +15,7 @@ logger = logging.getLogger("dpn")
env = Environment(loader=FileSystemLoader("./templates"), autoescape=select_autoescape())
def _render_template(template_name: str, context: dict) -> str:
def _render_template(template_name: str, context: Mapping[str, Any]) -> str:
template = env.get_template(template_name)
return template.render(context)

View File

@@ -4,17 +4,15 @@ import logging
import re
from dataclasses import dataclass
from datetime import datetime
from functools import cmp_to_key
import requests
import semver
from bs4 import BeautifulSoup
from semver.version import Version
from build_versions.settings import DEFAULT_DISTRO, DEFAULT_PLATFORMS, DISTROS, VERSIONS_PATH
todays_date = datetime.utcnow().date().isoformat()
by_semver_key = cmp_to_key(semver.compare)
logger = logging.getLogger("dpn")
@@ -76,9 +74,9 @@ def _fetch_tags(package: str, page: int = 1) -> list[str]:
return tags + _fetch_tags(package, page=page + 1)
def _latest_patch(tags: list[str], ver: str, patch_pattern: re.Pattern, distro: str) -> str | None:
def _latest_patch(tags: list[str], ver: str, patch_pattern: re.Pattern[str], distro: str) -> str | None:
tags = [tag for tag in tags if tag.startswith(ver) and tag.endswith(f"-{distro}") and patch_pattern.match(tag)]
return sorted(tags, key=by_semver_key, reverse=True)[0] if tags else None
return sorted(tags, key=Version.parse, reverse=True)[0] if tags else None
def scrape_supported_python_versions() -> list[SupportedVersion]:
@@ -138,7 +136,7 @@ def decide_python_versions(distros: list[str], supported_versions: list[Supporte
),
)
return sorted(versions, key=lambda v: by_semver_key(v.canonical_version), reverse=True)
return sorted(versions, key=lambda v: Version.parse(v.canonical_version), reverse=True)
def decide_nodejs_versions(supported_versions: list[SupportedVersion]) -> list[NodeJsVersion]:
@@ -158,7 +156,7 @@ def decide_nodejs_versions(supported_versions: list[SupportedVersion]) -> list[N
versions.append(NodeJsVersion(canonical_version=canonical_image.replace(f"-{DEFAULT_DISTRO}", ""), key=ver))
return sorted(versions, key=lambda v: by_semver_key(v.canonical_version), reverse=True)
return sorted(versions, key=lambda v: Version.parse(v.canonical_version), reverse=True)
def version_combinations(
@@ -190,8 +188,8 @@ def version_combinations(
)
versions = sorted(versions, key=lambda v: DISTROS.index(v.distro))
versions = sorted(versions, key=lambda v: by_semver_key(v.nodejs_canonical), reverse=True)
versions = sorted(versions, key=lambda v: by_semver_key(v.python_canonical), reverse=True)
versions = sorted(versions, key=lambda v: Version.parse(v.nodejs_canonical), reverse=True)
versions = sorted(versions, key=lambda v: Version.parse(v.python_canonical), reverse=True)
return versions

View File

@@ -17,3 +17,8 @@ ignore = [
[tool.black]
line-length = 120
target-version = ['py311']
[tool.mypy]
strict = true
disallow_any_unimported = true
no_implicit_optional = true