22
33import logging
44from datetime import UTC , datetime , timedelta
5+ from enum import Enum , auto
6+ from pprint import pformat
57
68from aiohttp import web
79from models_library .api_schemas_webserver .licensed_items import (
3739_logger = logging .getLogger (__name__ )
3840
3941
42+ class RegistrationState (Enum ):
43+ ALREADY_REGISTERED = auto ()
44+ DIFFERENT_RESOURCE = auto ()
45+ NEWLY_REGISTERED = auto ()
46+
47+
4048def _compute_difference (old_data : dict , new_data : dict ):
4149 differences = {
4250 k : {"old" : old_data [k ], "new" : new_data [k ]}
@@ -49,44 +57,45 @@ def _compute_difference(old_data: dict, new_data: dict):
4957 return differences
5058
5159
52- async def register_licensed_item_from_resource (
60+ async def register_resource_as_licensed_item (
5361 app : web .Application ,
5462 * ,
5563 licensed_resource_name : str ,
5664 licensed_resource_type : LicensedResourceType ,
5765 licensed_resource_data : BaseModel ,
5866 license_key : str | None ,
59- ) -> LicensedItemDB :
60-
67+ ) -> tuple [LicensedItemDB , RegistrationState ]:
6168 try :
62- license_item = await _licensed_items_repository .get_by_resource_identifier (
69+ licensed_item = await _licensed_items_repository .get_by_resource_identifier (
6370 app ,
6471 licensed_resource_name = licensed_resource_name ,
6572 licensed_resource_type = licensed_resource_type ,
6673 )
6774
68- if license_item .licensed_resource_data != licensed_resource_data .model_dump (
75+ if licensed_item .licensed_resource_data != licensed_resource_data .model_dump (
6976 mode = "json" , exclude_unset = True
7077 ):
7178 differences = _compute_difference (
72- license_item .licensed_resource_data or {},
79+ licensed_item .licensed_resource_data or {},
7380 licensed_resource_data .model_dump (mode = "json" , exclude_unset = True ),
7481 )
7582 _logger .warning (
76- "CHANGES: NEEDED for %s, %s: Resource differs from the one registered: %s" ,
77- licensed_resource_name ,
78- licensed_resource_type ,
79- differences ,
80- )
81- else :
82- _logger .info (
83- "Resource %s, %s already registered" ,
83+ "DIFFERENT_RESOURCE: %s, %s. Difference: %s" ,
8484 licensed_resource_name ,
8585 licensed_resource_type ,
86+ pformat (differences ),
8687 )
88+ return licensed_item , RegistrationState .DIFFERENT_RESOURCE
89+
90+ _logger .info (
91+ "ALREADY_REGISTERED: %s, %s" ,
92+ licensed_resource_name ,
93+ licensed_resource_type ,
94+ )
95+ return licensed_item , RegistrationState .ALREADY_REGISTERED
8796
8897 except LicensedItemNotFoundError :
89- license_item = await _licensed_items_repository .create_if_not_exists (
98+ licensed_item = await _licensed_items_repository .create_if_not_exists (
9099 app ,
91100 licensed_resource_name = licensed_resource_name ,
92101 licensed_resource_type = licensed_resource_type ,
@@ -99,12 +108,11 @@ async def register_licensed_item_from_resource(
99108 )
100109
101110 _logger .info (
102- "NEW license with resource %s, %s already registered " ,
111+ "NEWLY_REGISTERED: %s, %s" ,
103112 licensed_resource_name ,
104113 licensed_resource_type ,
105114 )
106-
107- return license_item
115+ return licensed_item , RegistrationState .NEWLY_REGISTERED
108116
109117
110118async def get_licensed_item (
0 commit comments