Skip to content

Commit

Permalink
Shortening alws.crud.build.remove_build_job()
Browse files Browse the repository at this point in the history
Added remove_build_data(), remove_repos_from_pulp()
  • Loading branch information
bklvsky committed May 17, 2024
1 parent 529a4bf commit 7da3fa7
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 34 deletions.
91 changes: 57 additions & 34 deletions alws/crud/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

from alws import models
from alws.config import settings
from alws.crud.repository import remove_repos_from_pulp
from alws.dramatiq import start_build
from alws.errors import BuildError, DataNotFoundError, PermissionDenied
from alws.perms import actions
Expand Down Expand Up @@ -267,40 +268,14 @@ async def get_module_preview(
)


async def remove_build_job(db: AsyncSession, build_id: int):
query_bj = (
select(models.Build)
.where(models.Build.id == build_id)
.options(
selectinload(models.Build.tasks).selectinload(
models.BuildTask.artifacts
),
selectinload(models.Build.repos),
selectinload(models.Build.products),
selectinload(models.Build.tasks)
.selectinload(models.BuildTask.test_tasks)
.selectinload(models.TestTask.artifacts),
)
)
def get_task_data_from_build(build: models.Build):
repos = []
repo_ids = []
build_task_ids = []
build_task_artifact_ids = []
build_task_ref_ids = []
test_task_ids = []
test_task_artifact_ids = []
build = await db.execute(query_bj)
build = build.scalars().first()
if build is None:
raise DataNotFoundError(f'Build with {build_id} not found')
if build.products:
product_names = "\n".join((product.name for product in build.products))
raise BuildError(
f"Cannot delete Build={build_id}, "
f"build contains in following products:\n{product_names}"
)
if build.released:
raise BuildError(f"Build with {build_id} is released")
for bt in build.tasks:
build_task_ids.append(bt.id)
build_task_ref_ids.append(bt.ref_id)
Expand All @@ -314,9 +289,28 @@ async def remove_build_job(db: AsyncSession, build_id: int):
for br in build.repos:
repos.append(br.pulp_href)
repo_ids.append(br.id)
pulp_client = PulpClient(
settings.pulp_host, settings.pulp_user, settings.pulp_password
return (
repos,
repo_ids,
build_task_ids,
build_task_artifact_ids,
build_task_ref_ids,
test_task_ids,
test_task_artifact_ids,
)


async def remove_build_data(db: AsyncSession, build: models.Build):
(
repos,
repo_ids,
build_task_ids,
build_task_artifact_ids,
build_task_ref_ids,
test_task_ids,
test_task_artifact_ids,
) = get_task_data_from_build(build)
build_id = build.id
await db.execute(
delete(models.BuildRepo).where(models.BuildRepo.c.build_id == build_id)
)
Expand Down Expand Up @@ -393,8 +387,37 @@ async def remove_build_job(db: AsyncSession, build_id: int):
# "Remove Artifact only if it is not associated with any Content."
# for artifact in artifacts:
# await pulp_client.remove_artifact(artifact)
for repo in repos:
try:
await pulp_client.delete_by_href(repo, wait_for_result=True)
except Exception as err:
logging.exception("Cannot delete repo from pulp: %s", err)
try:
await remove_repos_from_pulp(repos)
except Exception as err:
logging.exception("Cannot delete repo from pulp: %s", err)


async def remove_build_job(db: AsyncSession, build_id: int):
query_bj = (
select(models.Build)
.where(models.Build.id == build_id)
.options(
selectinload(models.Build.tasks).selectinload(
models.BuildTask.artifacts
),
selectinload(models.Build.repos),
selectinload(models.Build.products),
selectinload(models.Build.tasks)
.selectinload(models.BuildTask.test_tasks)
.selectinload(models.TestTask.artifacts),
)
)
build = await db.execute(query_bj)
build = build.scalars().first()
if build is None:
raise DataNotFoundError(f'Build with {build_id} not found')
if build.products:
product_names = "\n".join((product.name for product in build.products))
raise BuildError(
f"Cannot delete Build={build_id}, "
f"build contains in following products:\n{product_names}"
)
if build.released:
raise BuildError(f"Build with {build_id} is released")
await remove_build_data(db, build)
8 changes: 8 additions & 0 deletions alws/crud/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,3 +287,11 @@ async def sync_repo_from_remote(
sync_policy=payload.sync_policy,
wait_for_result=wait_for_result,
)


async def remove_repos_from_pulp(repos: typing.List):
pulp_client = PulpClient(
settings.pulp_host, settings.pulp_user, settings.pulp_password
)
for repo in repos:
await pulp_client.delete_by_href(repo, wait_for_result=True)

0 comments on commit 7da3fa7

Please sign in to comment.