@@ -1097,12 +1097,20 @@ def get_next_run(self):
10971097 return self .runs .not_started ().earliest ("created_date" )
10981098
10991099 def add_message (
1100- self , severity , description = "" , model = "" , details = None , exception = None
1100+ self ,
1101+ severity ,
1102+ description = "" ,
1103+ model = "" ,
1104+ details = None ,
1105+ exception = None ,
1106+ resource = None ,
11011107 ):
11021108 """
11031109 Create a ProjectMessage record for this Project.
11041110
11051111 The ``model`` attribute can be provided as a string or as a Model class.
1112+ A ``resource`` can be provided to keep track of the codebase resource that was
1113+ analyzed when the error occurred.
11061114 """
11071115 if inspect .isclass (model ):
11081116 model = model .__name__
@@ -1114,29 +1122,61 @@ def add_message(
11141122 if exception and not description :
11151123 description = str (exception )
11161124
1125+ details = details or {}
1126+ if resource :
1127+ # Do not change this field name as it has special behavior in templates.
1128+ details ["resource_path" ] = resource .path
1129+
11171130 return ProjectMessage .objects .create (
11181131 project = self ,
11191132 severity = severity ,
11201133 description = description ,
11211134 model = model ,
1122- details = details or {} ,
1135+ details = details ,
11231136 traceback = traceback ,
11241137 )
11251138
1126- def add_info (self , description = "" , model = "" , details = None , exception = None ):
1139+ def add_info (
1140+ self ,
1141+ description = "" ,
1142+ model = "" ,
1143+ details = None ,
1144+ exception = None ,
1145+ resource = None ,
1146+ ):
11271147 """Create an INFO ProjectMessage record for this project."""
11281148 severity = ProjectMessage .Severity .INFO
1129- return self .add_message (severity , description , model , details , exception )
1149+ return self .add_message (
1150+ severity , description , model , details , exception , resource
1151+ )
11301152
1131- def add_warning (self , description = "" , model = "" , details = None , exception = None ):
1153+ def add_warning (
1154+ self ,
1155+ description = "" ,
1156+ model = "" ,
1157+ details = None ,
1158+ exception = None ,
1159+ resource = None ,
1160+ ):
11321161 """Create a WARNING ProjectMessage record for this project."""
11331162 severity = ProjectMessage .Severity .WARNING
1134- return self .add_message (severity , description , model , details , exception )
1163+ return self .add_message (
1164+ severity , description , model , details , exception , resource
1165+ )
11351166
1136- def add_error (self , description = "" , model = "" , details = None , exception = None ):
1167+ def add_error (
1168+ self ,
1169+ description = "" ,
1170+ model = "" ,
1171+ details = None ,
1172+ exception = None ,
1173+ resource = None ,
1174+ ):
11371175 """Create an ERROR ProjectMessage record using for this project."""
11381176 severity = ProjectMessage .Severity .ERROR
1139- return self .add_message (severity , description , model , details , exception )
1177+ return self .add_message (
1178+ severity , description , model , details , exception , resource
1179+ )
11401180
11411181 def get_absolute_url (self ):
11421182 """Return this project's details URL."""
@@ -1409,10 +1449,15 @@ def add_error(self, exception):
14091449 Create a ProjectMessage record using the provided ``exception`` Exception
14101450 instance.
14111451 """
1452+ resource = None
1453+ if isinstance (self , CodebaseResource ):
1454+ resource = self
1455+
14121456 return self .project .add_error (
14131457 model = self .__class__ ,
14141458 details = model_to_dict (self ),
14151459 exception = exception ,
1460+ resource = resource ,
14161461 )
14171462
14181463 def add_errors (self , exceptions ):
@@ -2538,12 +2583,9 @@ def create_and_add_package(self, package_data):
25382583 except Exception as exception :
25392584 self .project .add_warning (
25402585 model = DiscoveredPackage ,
2541- details = {
2542- "codebase_resource_path" : self .path ,
2543- "codebase_resource_pk" : self .pk ,
2544- ** package_data ,
2545- },
2586+ details = package_data ,
25462587 exception = exception ,
2588+ resource = self ,
25472589 )
25482590 else :
25492591 self .add_package (package )
0 commit comments