|
62 | 62 | ] |
63 | 63 |
|
64 | 64 |
|
65 | | -log = logging.getLogger(__name__) |
| 65 | +_logger = logging.getLogger(__name__) |
66 | 66 |
|
67 | 67 | CopyFileCoro: TypeAlias = Coroutine[Any, Any, None] |
68 | 68 | CopyProjectNodesCoro: TypeAlias = Coroutine[Any, Any, dict[NodeID, ProjectNodeCreate]] |
@@ -285,6 +285,13 @@ async def create_project( # pylint: disable=too-many-arguments,too-many-branche |
285 | 285 |
|
286 | 286 | """ |
287 | 287 | assert request.app # nosec |
| 288 | + _logger.info( |
| 289 | + "create_project for '%s' with %s %s %s", |
| 290 | + f"{user_id=}", |
| 291 | + f"{predefined_project=}", |
| 292 | + f"{product_name=}", |
| 293 | + f"{from_study=}", |
| 294 | + ) |
288 | 295 |
|
289 | 296 | _projects_repository = ProjectDBAPI.get_from_app_context(request.app) |
290 | 297 |
|
@@ -459,6 +466,17 @@ async def create_project( # pylint: disable=too-many-arguments,too-many-branche |
459 | 466 | for gid, access in workspace.access_rights.items() |
460 | 467 | } |
461 | 468 |
|
| 469 | + _project_product_name = await _projects_repository.get_project_product( |
| 470 | + project_uuid=new_project["uuid"] |
| 471 | + ) |
| 472 | + assert ( |
| 473 | + _project_product_name == product_name # nosec |
| 474 | + ), "Project product name mismatch" |
| 475 | + if _project_product_name != product_name: |
| 476 | + raise web.HTTPBadRequest( |
| 477 | + text=f"Project product name mismatch {product_name=} {_project_product_name=}" |
| 478 | + ) |
| 479 | + |
462 | 480 | data = ProjectGet.from_domain_model(new_project).model_dump( |
463 | 481 | **RESPONSE_MODEL_POLICY |
464 | 482 | ) |
@@ -488,7 +506,7 @@ async def create_project( # pylint: disable=too-many-arguments,too-many-branche |
488 | 506 | raise web.HTTPNotFound(text=f"{exc}") from exc |
489 | 507 |
|
490 | 508 | except asyncio.CancelledError: |
491 | | - log.warning( |
| 509 | + _logger.warning( |
492 | 510 | "cancelled create_project for '%s'. Cleaning up", |
493 | 511 | f"{user_id=}", |
494 | 512 | ) |
|
0 commit comments