This is an automated email from the ASF dual-hosted git repository.
sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-release.git
The following commit(s) were added to refs/heads/main by this push:
new 3e755ed Fix imports to conform to project style
3e755ed is described below
commit 3e755ed9654db3ef7e1083269997baa3ae3f8800
Author: Sean B. Palmer <[email protected]>
AuthorDate: Tue Mar 25 17:19:37 2025 +0200
Fix imports to conform to project style
---
atr/blueprints/admin/admin.py | 14 ++++++--------
atr/blueprints/api/__init__.py | 4 ++--
atr/db/__init__.py | 26 ++++++++++++--------------
atr/metadata.py | 8 ++++----
atr/routes/__init__.py | 6 +++---
atr/routes/candidate.py | 1 +
atr/routes/projects.py | 5 ++---
atr/server.py | 10 +++++-----
atr/tasks/archive.py | 2 +-
atr/tasks/bulk.py | 6 ++----
atr/tasks/hashing.py | 2 +-
atr/tasks/license.py | 2 +-
atr/tasks/mailtest.py | 14 +++++++-------
atr/tasks/rat.py | 2 +-
atr/tasks/sbom.py | 2 +-
atr/tasks/task.py | 2 +-
atr/tasks/vote.py | 2 +-
atr/util.py | 4 ++--
atr/worker.py | 2 +-
19 files changed, 54 insertions(+), 60 deletions(-)
diff --git a/atr/blueprints/admin/admin.py b/atr/blueprints/admin/admin.py
index b9c4078..f6c501e 100644
--- a/atr/blueprints/admin/admin.py
+++ b/atr/blueprints/admin/admin.py
@@ -20,9 +20,10 @@ import logging
import pathlib
import statistics
from collections.abc import Callable, Mapping
-from typing import TYPE_CHECKING, Any
+from typing import Any
import aiofiles.os
+import asfquart
import asfquart.base as base
import asfquart.session as session
import httpx
@@ -35,18 +36,15 @@ import atr.db as db
import atr.db.models as models
import atr.util as util
-if TYPE_CHECKING:
- from atr.datasources.apache import LDAPProject
-
_LOGGER = logging.getLogger(__name__)
@admin.BLUEPRINT.route("/performance")
async def admin_performance() -> str:
"""Display performance statistics for all routes."""
- from asfquart import APP
+ app = asfquart.APP
- if APP is ...:
+ if app is ...:
raise base.ASFQuartException("APP is not set", errorcode=500)
# Read and parse the performance log file
@@ -78,7 +76,7 @@ async def admin_performance() -> str:
}
)
except (ValueError, IndexError):
- APP.logger.error("Error parsing line: %s", line)
+ app.logger.error("Error parsing line: %s", line)
continue
# Calculate summary statistics for each route
@@ -199,7 +197,7 @@ async def _update_committees() -> tuple[int, int]: # noqa:
C901
podlings_data = await apache.get_current_podlings_data()
committees = await apache.get_active_committee_data()
- ldap_projects_by_name: Mapping[str, LDAPProject] = {p.name: p for p in
ldap_projects.projects}
+ ldap_projects_by_name: Mapping[str, apache.LDAPProject] = {p.name: p for p
in ldap_projects.projects}
committees_by_name: Mapping[str, apache.Committee] = {c.name: c for c in
committees.committees}
added_count = 0
diff --git a/atr/blueprints/api/__init__.py b/atr/blueprints/api/__init__.py
index 13ba001..c3228fa 100644
--- a/atr/blueprints/api/__init__.py
+++ b/atr/blueprints/api/__init__.py
@@ -15,6 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-from quart import Blueprint
+import quart
-BLUEPRINT = Blueprint("api_blueprint", __name__, url_prefix="/api")
+BLUEPRINT = quart.Blueprint("api_blueprint", __name__, url_prefix="/api")
diff --git a/atr/db/__init__.py b/atr/db/__init__.py
index 3a220d3..150c771 100644
--- a/atr/db/__init__.py
+++ b/atr/db/__init__.py
@@ -34,13 +34,11 @@ import atr.db.models as models
import atr.util as util
if TYPE_CHECKING:
+ import datetime
from collections.abc import Sequence
- from datetime import datetime
import asfquart.base as base
- from atr.db.models import ReleasePhase, ReleaseStage, TaskStatus, VoteEntry
-
_LOGGER: Final = logging.getLogger(__name__)
_global_async_sessionmaker: sqlalchemy.ext.asyncio.async_sessionmaker | None =
None
@@ -168,7 +166,7 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
filename: Opt[str] = NotSet,
sha512: Opt[str] = NotSet,
signature_sha3: Opt[str | None] = NotSet,
- uploaded: Opt[datetime] = NotSet,
+ uploaded: Opt[datetime.datetime] = NotSet,
bytes_size: Opt[int] = NotSet,
release_name: Opt[str] = NotSet,
_release: bool = False,
@@ -252,8 +250,8 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
fingerprint: Opt[str] = NotSet,
algorithm: Opt[str] = NotSet,
length: Opt[int] = NotSet,
- created: Opt[datetime] = NotSet,
- expires: Opt[datetime | None] = NotSet,
+ created: Opt[datetime.datetime] = NotSet,
+ expires: Opt[datetime.datetime | None] = NotSet,
declared_uid: Opt[str | None] = NotSet,
apache_uid: Opt[str] = NotSet,
ascii_armored_key: Opt[str] = NotSet,
@@ -286,15 +284,15 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
def release(
self,
name: Opt[str] = NotSet,
- stage: Opt[ReleaseStage] = NotSet,
- phase: Opt[ReleasePhase] = NotSet,
- created: Opt[datetime] = NotSet,
+ stage: Opt[models.ReleaseStage] = NotSet,
+ phase: Opt[models.ReleasePhase] = NotSet,
+ created: Opt[datetime.datetime] = NotSet,
project_id: Opt[int] = NotSet,
package_managers: Opt[list[str]] = NotSet,
version: Opt[str] = NotSet,
sboms: Opt[list[str]] = NotSet,
vote_policy_id: Opt[int] = NotSet,
- votes: Opt[list[VoteEntry]] = NotSet,
+ votes: Opt[list[models.VoteEntry]] = NotSet,
_project: bool = False,
_packages: bool = False,
_vote_policy: bool = False,
@@ -357,13 +355,13 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
def task(
self,
id: Opt[int] = NotSet,
- status: Opt[TaskStatus] = NotSet,
+ status: Opt[models.TaskStatus] = NotSet,
task_type: Opt[str] = NotSet,
task_args: Opt[Any] = NotSet,
- added: Opt[datetime] = NotSet,
- started: Opt[datetime | None] = NotSet,
+ added: Opt[datetime.datetime] = NotSet,
+ started: Opt[datetime.datetime | None] = NotSet,
pid: Opt[int | None] = NotSet,
- completed: Opt[datetime | None] = NotSet,
+ completed: Opt[datetime.datetime | None] = NotSet,
result: Opt[Any | None] = NotSet,
error: Opt[str | None] = NotSet,
release_name: Opt[str | None] = NotSet,
diff --git a/atr/metadata.py b/atr/metadata.py
index 9c66303..a262ebf 100644
--- a/atr/metadata.py
+++ b/atr/metadata.py
@@ -20,7 +20,7 @@ def _get_version_from_git() -> tuple[str, str] | None:
"""Returns the version when within a development environment."""
try:
- from dunamai import Version
+ import dunamai
except ImportError:
# dunamai is not installed, so probably we are not in
# a development environment.
@@ -28,7 +28,7 @@ def _get_version_from_git() -> tuple[str, str] | None:
try:
# We start in state/, so we need to go up one level
- version = Version.from_git()
+ version = dunamai.Version.from_git()
if version.distance > 0:
dirty = "+dirty" if version.dirty else ""
# The development version number should reflect the next release
that is going to be cut,
@@ -55,9 +55,9 @@ def _get_version_from_version_module() -> tuple[str, str] |
None:
"""Returns the version from _version module if it exists."""
try:
- from atr._version import ATR_COMMIT, ATR_VERSION # pyright: ignore
[reportMissingImports]
+ import atr._version # pyright: ignore [reportMissingImports]
- return ATR_VERSION, ATR_COMMIT
+ return atr._version.ATR_VERSION, atr._version.ATR_COMMIT
except ImportError:
return None
diff --git a/atr/routes/__init__.py b/atr/routes/__init__.py
index d3f82ff..9872888 100644
--- a/atr/routes/__init__.py
+++ b/atr/routes/__init__.py
@@ -278,13 +278,13 @@ async def get_form(request: quart.Request) ->
datastructures.MultiDict:
# Which calls _write which calls tempfile, which is synchronous
# It's getting a tempfile back from some prior call
# We can't just make blockbuster ignore the call because then it ignores
it everywhere
- from asfquart import APP
+ app = asfquart.APP
- if APP is ...:
+ if app is ...:
raise RuntimeError("APP is not set")
# Or quart.current_app?
- blockbuster = APP.extensions.get("blockbuster")
+ blockbuster = app.extensions.get("blockbuster")
# Turn blockbuster off
if blockbuster is not None:
diff --git a/atr/routes/candidate.py b/atr/routes/candidate.py
index 63e810d..7637512 100644
--- a/atr/routes/candidate.py
+++ b/atr/routes/candidate.py
@@ -185,6 +185,7 @@ async def root_candidate_review() -> str:
releases = await data.release(
stage=models.ReleaseStage.CANDIDATE,
_committee=True,
+ _packages=True,
).all()
# Filter to only show releases for PMCs or PPMCs where the user is a
member or committer
diff --git a/atr/routes/projects.py b/atr/routes/projects.py
index 93f4b5a..6d89060 100644
--- a/atr/routes/projects.py
+++ b/atr/routes/projects.py
@@ -30,7 +30,6 @@ import atr.db.models as models
import atr.db.service as service
import atr.routes as routes
import atr.util as util
-from atr.util import get_asf_id_or_die
@routes.app_route("/projects")
@@ -81,7 +80,7 @@ class VotePolicyForm(util.QuartFormTyped):
@routes.app_route("/projects/<project_name>/voting-policy/add",
methods=["GET", "POST"])
async def root_projects_vote_policy_add(project_name: str) ->
response.Response | str:
- uid = await get_asf_id_or_die()
+ uid = await util.get_asf_id_or_die()
async with db.session() as data:
project = await data.project(name=project_name, _committee=True,
_vote_policy=True).demand(
@@ -115,7 +114,7 @@ async def root_projects_vote_policy_add(project_name: str)
-> response.Response
@routes.app_route("/projects/<project_name>/vote-policy/edit", methods=["GET",
"POST"])
@auth.require(auth.Requirements.committer)
async def root_projects_vote_policy_edit(project_name: str) ->
response.Response | str:
- uid = await get_asf_id_or_die()
+ uid = await util.get_asf_id_or_die()
async with db.session() as data:
project = await data.project(name=project_name, _committee=True,
_vote_policy=True).demand(
diff --git a/atr/server.py b/atr/server.py
index 6604c8d..c9e7b0a 100644
--- a/atr/server.py
+++ b/atr/server.py
@@ -153,15 +153,15 @@ def app_setup_context(app: base.QuartApp) -> None:
@app.context_processor
async def app_wide() -> dict[str, Any]:
import atr.db.service as service
- from atr.metadata import commit, version
- from atr.util import is_admin
+ import atr.metadata as metadata
+ import atr.util as util
return {
"current_user": await asfquart.session.read(),
- "is_admin_fn": is_admin,
+ "is_admin_fn": util.is_admin,
"is_project_lead_fn": service.is_project_lead,
- "commit": commit,
- "version": version,
+ "commit": metadata.commit,
+ "version": metadata.version,
}
diff --git a/atr/tasks/archive.py b/atr/tasks/archive.py
index 7628234..493d367 100644
--- a/atr/tasks/archive.py
+++ b/atr/tasks/archive.py
@@ -23,8 +23,8 @@ from typing import Any, Final
import pydantic
+import atr.db.models as models
import atr.tasks.task as task
-from atr.db import models
_LOGGER: Final = logging.getLogger(__name__)
diff --git a/atr/tasks/bulk.py b/atr/tasks/bulk.py
index c49d0f7..d2f9993 100644
--- a/atr/tasks/bulk.py
+++ b/atr/tasks/bulk.py
@@ -29,8 +29,8 @@ import aiohttp
import sqlalchemy
import sqlalchemy.ext.asyncio
+import atr.db.models as models
import atr.tasks.task as task
-from atr.db import models
# Configure detailed logging
_LOGGER: Final = logging.getLogger(__name__)
@@ -177,9 +177,7 @@ async def database_task_id_get() -> int | None:
return global_task_id
try:
- from os import getpid
-
- process_id = getpid()
+ process_id = os.getpid()
_LOGGER.debug(f"Current process ID: {process_id}")
task_id = await database_task_pid_lookup(process_id)
diff --git a/atr/tasks/hashing.py b/atr/tasks/hashing.py
index f445f33..2335111 100644
--- a/atr/tasks/hashing.py
+++ b/atr/tasks/hashing.py
@@ -23,8 +23,8 @@ from typing import Any, Final
import aiofiles
import pydantic
+import atr.db.models as models
import atr.tasks.task as task
-from atr.db import models
_LOGGER: Final = logging.getLogger(__name__)
diff --git a/atr/tasks/license.py b/atr/tasks/license.py
index 22ff67f..4699a10 100644
--- a/atr/tasks/license.py
+++ b/atr/tasks/license.py
@@ -21,9 +21,9 @@ import re
import tarfile
from typing import Any, Final
+import atr.db.models as models
import atr.tasks.archive as archive
import atr.tasks.task as task
-from atr.db import models
_LOGGER = logging.getLogger(__name__)
diff --git a/atr/tasks/mailtest.py b/atr/tasks/mailtest.py
index 65773e3..7394fee 100644
--- a/atr/tasks/mailtest.py
+++ b/atr/tasks/mailtest.py
@@ -20,8 +20,8 @@ import logging
import os
from typing import Any, Final
+import atr.db.models as models
import atr.tasks.task as task
-from atr.db import models
# Configure detailed logging
_LOGGER: Final = logging.getLogger(__name__)
@@ -103,8 +103,8 @@ def send_core(args_list: list[str]) ->
tuple[models.TaskStatus, str | None, tupl
"""Send a test email."""
import asyncio
- import atr.mail
- from atr.db.service import get_committee_by_name
+ import atr.db.service as service
+ import atr.mail as mail
_LOGGER.info("Starting send_core")
try:
@@ -137,7 +137,7 @@ def send_core(args_list: list[str]) ->
tuple[models.TaskStatus, str | None, tupl
# Must be a PMC member of tooling
# Since get_pmc_by_name is async, we need to run it in an event
loop
# TODO: We could make a sync version
- tooling_committee = asyncio.run(get_committee_by_name("tooling"))
+ tooling_committee =
asyncio.run(service.get_committee_by_name("tooling"))
if not tooling_committee:
error_msg = "Tooling committee not found in database"
@@ -163,19 +163,19 @@ def send_core(args_list: list[str]) ->
tuple[models.TaskStatus, str | None, tupl
with open(dkim_path) as f:
dkim_key = f.read()
- atr.mail.set_secret_key(dkim_key.strip())
+ mail.set_secret_key(dkim_key.strip())
_LOGGER.info("DKIM key loaded and set successfully")
except Exception as e:
error_msg = f"Failed to load DKIM key: {e}"
_LOGGER.error(error_msg)
return task.FAILED, error_msg, tuple()
- event = atr.mail.ArtifactEvent(
+ event = mail.ArtifactEvent(
artifact_name=args.artifact_name,
email_recipient=args.email_recipient,
token=args.token,
)
- atr.mail.send(event)
+ mail.send(event)
_LOGGER.info(f"Email sent successfully to {args.email_recipient}")
return task.COMPLETED, None, tuple()
diff --git a/atr/tasks/rat.py b/atr/tasks/rat.py
index 42c6ab4..87b73bd 100644
--- a/atr/tasks/rat.py
+++ b/atr/tasks/rat.py
@@ -23,10 +23,10 @@ import xml.etree.ElementTree as ElementTree
from typing import Any, Final
import atr.config as config
+import atr.db.models as models
import atr.tasks.archive as archive
import atr.tasks.sbom as sbom
import atr.tasks.task as task
-from atr.db import models
_CONFIG: Final = config.get()
_JAVA_MEMORY_ARGS: Final[list[str]] = []
diff --git a/atr/tasks/sbom.py b/atr/tasks/sbom.py
index a13504d..18a7d72 100644
--- a/atr/tasks/sbom.py
+++ b/atr/tasks/sbom.py
@@ -21,9 +21,9 @@ import tarfile
from typing import Any, Final
import atr.config as config
+import atr.db.models as models
import atr.tasks.archive as archive
import atr.tasks.task as task
-from atr.db import models
_CONFIG: Final = config.get()
_LOGGER: Final = logging.getLogger(__name__)
diff --git a/atr/tasks/task.py b/atr/tasks/task.py
index 0c2368a..78dbb74 100644
--- a/atr/tasks/task.py
+++ b/atr/tasks/task.py
@@ -17,7 +17,7 @@
from typing import Any, Final
-from atr.db import models
+import atr.db.models as models
QUEUED: Final = models.TaskStatus.QUEUED
ACTIVE: Final = models.TaskStatus.ACTIVE
diff --git a/atr/tasks/vote.py b/atr/tasks/vote.py
index 992f7fb..cc8578a 100644
--- a/atr/tasks/vote.py
+++ b/atr/tasks/vote.py
@@ -21,8 +21,8 @@ import logging
import os
from typing import Any, Final
+import atr.db.models as models
import atr.tasks.task as task
-from atr.db import models
# Configure detailed logging
_LOGGER: Final = logging.getLogger(__name__)
diff --git a/atr/util.py b/atr/util.py
index 24b3c68..5dbd6a6 100644
--- a/atr/util.py
+++ b/atr/util.py
@@ -217,14 +217,14 @@ def _get_dict_to_list_inner_type_adapter(source_type:
Any, key: str) -> pydantic
def _get_dict_to_list_validator(inner_adapter: pydantic.TypeAdapter[dict[Any,
Any]], key: str) -> Any:
def validator(val: Any) -> Any:
- from pydantic.fields import FieldInfo
+ import pydantic.fields as fields
if isinstance(val, dict):
validated = inner_adapter.validate_python(val)
# need to get the alias of the field in the nested model
# as this will be fed into the actual model class
- def get_alias(field_name: str, field_infos: Mapping[str,
FieldInfo]) -> Any:
+ def get_alias(field_name: str, field_infos: Mapping[str,
fields.FieldInfo]) -> Any:
field = field_infos[field_name]
return field.alias if field.alias else field_name
diff --git a/atr/worker.py b/atr/worker.py
index a1d9911..929ce9f 100644
--- a/atr/worker.py
+++ b/atr/worker.py
@@ -36,6 +36,7 @@ from typing import Any, Final
import sqlmodel
import atr.db as db
+import atr.db.models as models
import atr.tasks.archive as archive
import atr.tasks.bulk as bulk
import atr.tasks.hashing as hashing
@@ -47,7 +48,6 @@ import atr.tasks.sbom as sbom
import atr.tasks.signature as signature
import atr.tasks.task as task
import atr.tasks.vote as vote
-from atr.db import models
_LOGGER: Final = logging.getLogger(__name__)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]