1414from commoncode .fileutils import as_posixpath
1515
1616from packagedcode import HANDLER_BY_DATASOURCE_ID
17- from packagedcode import BINARY_HANDLERS_PRESENT
1817from packagedcode import BINARY_PACKAGE_DATAFILE_HANDLERS
1918from packagedcode import models
2019from packagedcode .cache import get_cache
@@ -47,6 +46,7 @@ def recognize_package_data(
4746 location ,
4847 application = True ,
4948 system = False ,
49+ binary = False ,
5050 package_only = False ,
5151):
5252 """
@@ -61,16 +61,18 @@ def recognize_package_data(
6161
6262 return list (_parse (
6363 location = location ,
64- package_only = package_only ,
6564 application = application ,
6665 system = system ,
66+ binary = binary ,
67+ package_only = package_only ,
6768 ))
6869
6970
7071def _parse (
7172 location ,
7273 application = True ,
7374 system = False ,
75+ binary = False ,
7476 package_only = False ,
7577):
7678 """
@@ -83,30 +85,39 @@ def _parse(
8385 package_path = as_posixpath (location )
8486 package_patterns = get_cache ()
8587
86- assert application or system or package_only
88+ has_patterns = application or system or package_only
89+ assert has_patterns or binary
8790 if package_only or (application and system ):
8891 package_matcher = package_patterns .all_package_matcher
8992 elif application :
9093 package_matcher = package_patterns .application_package_matcher
9194 elif system :
9295 package_matcher = package_patterns .system_package_matcher
9396
94- matched_patterns = package_matcher .match (package_path )
97+ matched_patterns = []
98+ if has_patterns :
99+ matched_patterns = package_matcher .match (package_path )
95100
96- datafile_handlers = []
101+ all_handler_ids = []
97102 for matched_pattern in matched_patterns :
98103 regex , _match = matched_pattern
99104 handler_ids = package_patterns .handler_by_regex .get (regex .pattern )
100105 if TRACE :
101106 logger_debug (f'_parse:.handler_ids: { handler_ids } ' )
102107
103- datafile_handlers .extend ([
104- HANDLER_BY_DATASOURCE_ID . get ( handler_id )
108+ all_handler_ids .extend ([
109+ handler_id
105110 for handler_id in handler_ids
111+ if handler_id not in all_handler_ids
106112 ])
107113
114+ datafile_handlers = [
115+ HANDLER_BY_DATASOURCE_ID .get (handler_id )
116+ for handler_id in all_handler_ids
117+ ]
118+
108119 if not datafile_handlers :
109- if BINARY_HANDLERS_PRESENT :
120+ if binary :
110121 datafile_handlers .extend (BINARY_PACKAGE_DATAFILE_HANDLERS )
111122 elif TRACE :
112123 logger_debug (f'_parse: no package datafile detected at { package_path } ' )
0 commit comments