scanoss 1.40.1__py3-none-any.whl → 1.41.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -110,6 +110,19 @@ class ScannerHFH:
110
110
  self.min_accepted_score = min_accepted_score
111
111
  self.use_grpc = use_grpc
112
112
 
113
+ def _execute_grpc_scan(self, hfh_request: Dict) -> None:
114
+ """
115
+ Execute folder hash scan.
116
+
117
+ Args:
118
+ hfh_request: Request dictionary for the gRPC call
119
+ """
120
+ try:
121
+ self.scan_results = self.client.folder_hash_scan(hfh_request, self.use_grpc)
122
+ except Exception as e:
123
+ self.base.print_stderr(f'Error during folder hash scan: {e}')
124
+ self.scan_results = None
125
+
113
126
  def scan(self) -> Optional[Dict]:
114
127
  """
115
128
  Scan the provided directory using the folder hashing algorithm.
@@ -124,25 +137,17 @@ class ScannerHFH:
124
137
  'min_accepted_score': self.min_accepted_score,
125
138
  }
126
139
 
127
- spinner = Spinner('Scanning folder...')
128
- stop_spinner = False
140
+ spinner_ctx = Spinner('Scanning folder...')
141
+
142
+ with spinner_ctx as spinner:
143
+ grpc_thread = threading.Thread(target=self._execute_grpc_scan, args=(hfh_request,))
144
+ grpc_thread.start()
129
145
 
130
- def spin():
131
- while not stop_spinner:
146
+ while grpc_thread.is_alive():
132
147
  spinner.next()
133
148
  time.sleep(0.1)
134
149
 
135
- spinner_thread = threading.Thread(target=spin)
136
- spinner_thread.start()
137
-
138
- try:
139
- response = self.client.folder_hash_scan(hfh_request, self.use_grpc)
140
- if response:
141
- self.scan_results = response
142
- finally:
143
- stop_spinner = True
144
- spinner_thread.join()
145
- spinner.finish()
150
+ grpc_thread.join()
146
151
 
147
152
  return self.scan_results
148
153
 
@@ -22,6 +22,7 @@ SPDX-License-Identifier: MIT
22
22
  THE SOFTWARE.
23
23
  """
24
24
 
25
+ import atexit
25
26
  import os
26
27
  import queue
27
28
  import sys
@@ -77,6 +78,8 @@ class ThreadedScanning(ScanossBase):
77
78
  if nb_threads > MAX_ALLOWED_THREADS:
78
79
  self.print_msg(f'Warning: Requested threads too large: {nb_threads}. Reducing to {MAX_ALLOWED_THREADS}')
79
80
  self.nb_threads = MAX_ALLOWED_THREADS
81
+ # Register cleanup to ensure progress bar is finished on exit
82
+ atexit.register(self.complete_bar)
80
83
 
81
84
  @staticmethod
82
85
  def __count_files_in_wfp(wfp: str):
@@ -101,6 +104,13 @@ class ThreadedScanning(ScanossBase):
101
104
  if self.bar:
102
105
  self.bar.finish()
103
106
 
107
+ def __del__(self):
108
+ """Ensure progress bar is cleaned up when object is destroyed"""
109
+ try:
110
+ self.complete_bar()
111
+ except Exception:
112
+ pass # Ignore errors during cleanup
113
+
104
114
  def set_bar(self, bar: Bar) -> None:
105
115
  """
106
116
  Set the Progress Bar to display progress while scanning
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scanoss
3
- Version: 1.40.1
3
+ Version: 1.41.0
4
4
  Summary: Simple Python library to leverage the SCANOSS APIs
5
5
  Home-page: https://scanoss.com
6
6
  Author: SCANOSS
@@ -6,20 +6,21 @@ protoc_gen_swagger/options/annotations_pb2_grpc.py,sha256=KZOW9Ciio-f9iL42FuLFnS
6
6
  protoc_gen_swagger/options/openapiv2_pb2.py,sha256=w0xDs63uyrWGgzRaQZXfJpfI7Jpyvh-i9ay_uzOR-aM,16475
7
7
  protoc_gen_swagger/options/openapiv2_pb2.pyi,sha256=hYOV6uQ2yqhP89042_V3GuAsvoBBiXf5CGuYmnFnfv4,54665
8
8
  protoc_gen_swagger/options/openapiv2_pb2_grpc.py,sha256=sje9Nh3yE7CHCUWZwtjTgwsKB4GvyGz5vOrGTnRXJfc,917
9
- scanoss/__init__.py,sha256=L1J5vnLoMlbihOfQRzq6JZhDU_GCyPSqF1uO7gM1vhI,1146
10
- scanoss/cli.py,sha256=RbhaH1qkeIAj6ZA7JCLN9NFbfgk51nIaKdP9ppw1ogk,103328
9
+ scanoss/__init__.py,sha256=gwiLnpxvm3FTkfCt7CRIdD8To8AjOpOG_5oXLMvgpOk,1146
10
+ scanoss/cli.py,sha256=YAE9ihA2LswSLHBRHnpyqM-e2tcE7lPd8-ghABbnyU8,103984
11
11
  scanoss/components.py,sha256=NFyt_w3aoMotr_ZaFU-ng00_89sruc0kgY7ERnJXkmM,15891
12
- scanoss/constants.py,sha256=GHLTaLNVxXdTXRj7ngRK4u4S653pHzM8qFy4JFLa0wQ,450
12
+ scanoss/constants.py,sha256=vurzLNIfP_dnRMwOdZsUWvr5XAVuGoj98XZ0yjXNOjQ,632
13
13
  scanoss/cryptography.py,sha256=lOoD_dW16ARQxYiYyb5R8S7gx0FqWIsnGkKfsB0nGaU,10627
14
14
  scanoss/csvoutput.py,sha256=3wdXPeIqZG84bCtXFh8fMZO3XodekeSx6RZXoOhZMFc,10551
15
15
  scanoss/cyclonedx.py,sha256=mHeX66yQCk41N3YCIzKy_fI7fLqQnetYPFRIzUKy_M4,18416
16
16
  scanoss/delta.py,sha256=slmgnD7SsUOmfSE2zb0zdRAGo-JcjPJAtxyzuCSzO3I,9455
17
17
  scanoss/file_filters.py,sha256=QcLqunaBKQIafjNZ9_Snh9quBX5_-fsTusVmxwjC1q8,18511
18
- scanoss/filecount.py,sha256=RZjKQ6M5P_RQg0_PMD2tsRe5Z8f98ke0sxYVjPDN8iQ,6538
18
+ scanoss/filecount.py,sha256=icWaKN_xapMrH3ZZ-D3nldx7hWiguIOjoKg4gCeKDOM,6678
19
19
  scanoss/gitlabqualityreport.py,sha256=_VG0Xoh8wYF3lsXGJvjoj-Ty58OS_-H1Domiq9OpQEo,8830
20
+ scanoss/osadl.py,sha256=VWalcHpshWxtRDGje2cK32SfFeSBAO62knfSW9pyYqc,4558
20
21
  scanoss/results.py,sha256=47ZXXuU2sDjYa5vhtbWTmikit9jHhA0rsYKwkvZFI5w,9252
21
22
  scanoss/scancodedeps.py,sha256=JbpoGW1POtPMmowzfwa4oh8sSBeeQCqaW9onvc4UFYM,11517
22
- scanoss/scanner.py,sha256=-RCxLX0EepUebK8jQKvlMxFEQrCc8SwEjxznoWjadkg,45510
23
+ scanoss/scanner.py,sha256=P2gswXapSVYC-tH6_oY763DYpe9Awi2g9xW1U9WGgQI,46374
23
24
  scanoss/scanoss_settings.py,sha256=W8uFQ6uRIqtE-DXXA56bO8I4GsbJ-aA1c84hQ_qBel4,12161
24
25
  scanoss/scanossapi.py,sha256=U3IytJXA0mQHYsylzjwCuFakuhD_dJhstY37NmyvtB8,13243
25
26
  scanoss/scanossbase.py,sha256=Dkpwxa8NH8XN1iRl03NM_Mkvby0JQ4qfvCiiUrJ5ul0,3163
@@ -28,7 +29,7 @@ scanoss/scanpostprocessor.py,sha256=-JsThlxrU70r92GHykTMERnicdd-6jmwNsE4PH0MN2o,
28
29
  scanoss/scantype.py,sha256=gFmyVmKQpHWogN2iCmMj032e_sZo4T92xS3_EH5B3Tc,1310
29
30
  scanoss/spdxlite.py,sha256=4JMxmyNmvcL6fjScihk8toWfSuQ-Pj1gzaT3SIn1fXA,29425
30
31
  scanoss/threadeddependencies.py,sha256=aN8E43iKS1pWJLJP3xCle5ewlfR5DE2-ljUzI_29Xwk,9851
31
- scanoss/threadedscanning.py,sha256=38ryN_kZGpzmrd_hkuiY9Sb3tOG248canGCDQDmGEwI,9317
32
+ scanoss/threadedscanning.py,sha256=Y-OYamD3xJvFiqwCn5y_4QD5gk_rJ5xs2jI1DxNtJlc,9661
32
33
  scanoss/winnowing.py,sha256=RsR9jRTR3TzS1pEeKQ2RuYlIG8Q7RnUQFfgPLog6B-A,21679
33
34
  scanoss/api/__init__.py,sha256=hx-P78xbDsh6WQIigewkJ7Y7y1fqc_eYnyHC5IZTKmo,1122
34
35
  scanoss/api/common/__init__.py,sha256=hx-P78xbDsh6WQIigewkJ7Y7y1fqc_eYnyHC5IZTKmo,1122
@@ -65,7 +66,8 @@ scanoss/api/vulnerabilities/__init__.py,sha256=IFrDk_DTJgKSZmmU-nuLXuq_s8sQZlrSC
65
66
  scanoss/api/vulnerabilities/v2/__init__.py,sha256=IFrDk_DTJgKSZmmU-nuLXuq_s8sQZlrSCHhIDMJT4r0,1122
66
67
  scanoss/api/vulnerabilities/v2/scanoss_vulnerabilities_pb2.py,sha256=pmm0MSiXkdf8e4rCIIDRcsNRixR2vGvD1Xak4l-wdwI,16550
67
68
  scanoss/api/vulnerabilities/v2/scanoss_vulnerabilities_pb2_grpc.py,sha256=BNxT5kUKQ-mgtOt5QYBM1Qrg5LNDqSpWKpfEZquIlsM,19127
68
- scanoss/data/build_date.txt,sha256=AZUMMETLX1EWk-JNSGm9CsOJOMQ-GeE5y7XrTKZJC0w,40
69
+ scanoss/data/build_date.txt,sha256=9AXzlvNjRrd9YhQ9pyrxQftmN0vVNptg1mAwlPWlkuY,40
70
+ scanoss/data/osadl-copyleft.json,sha256=O9b2XAfpjQY0TL0fYzO6kwMcp5IwQbF6f_YWbB10MhQ,4761
69
71
  scanoss/data/scanoss-settings-schema.json,sha256=ClkRYAkjAN0Sk704G8BE_Ok006oQ6YnIGmX84CF8h9w,8798
70
72
  scanoss/data/spdx-exceptions.json,sha256=s7UTYxC7jqQXr11YBlIWYCNwN6lRDFTR33Y8rpN_dA4,17953
71
73
  scanoss/data/spdx-licenses.json,sha256=A6Z0q82gaTLtnopBfzeIVZjJFxkdRW1g2TuumQc-lII,228794
@@ -77,21 +79,21 @@ scanoss/inspection/policy_check/policy_check.py,sha256=nMb5ogRDntYMebm3xrIBde2Gq
77
79
  scanoss/inspection/policy_check/dependency_track/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
80
  scanoss/inspection/policy_check/dependency_track/project_violation.py,sha256=elc35kWffWxOoF8YMi50hK_obtc1Xa8E3dwUnz7WXcA,20713
79
81
  scanoss/inspection/policy_check/scanoss/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- scanoss/inspection/policy_check/scanoss/copyleft.py,sha256=rfw_kEZnVbia72j5T7nX_1hTKHMOJLjegmQv_AGoeks,9375
82
+ scanoss/inspection/policy_check/scanoss/copyleft.py,sha256=ykTU4ZfK0V3iIboE8D5boJ4PlqQz6aqJoc4pvbEsVhQ,9659
81
83
  scanoss/inspection/policy_check/scanoss/undeclared_component.py,sha256=ZkqPbfFzUHNEde-iVRWUSpkNKMTW_rOZQqG0y94MtUU,11673
82
84
  scanoss/inspection/summary/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
85
  scanoss/inspection/summary/component_summary.py,sha256=ZaQzvZBQDFtow43UC9bij5NCTHjY_QAEqIUyRp3KtWk,7308
84
86
  scanoss/inspection/summary/license_summary.py,sha256=BC_REu2e4PkMHp0ttvSdf6yRW3MvFc623fT6_Ze_TQA,7958
85
87
  scanoss/inspection/summary/match_summary.py,sha256=GdjIV7ws7fanQTVdBigYGx3683KPL6e6HO4wuXTKq9g,13812
86
88
  scanoss/inspection/utils/file_utils.py,sha256=b-xTH6FSyPpl3EPZ9WzK0c4734yE9mAexT1_YLLqymE,1641
87
- scanoss/inspection/utils/license_utils.py,sha256=Zb6QLmVJb86lKCwZyBsmwakyAtY1SXa54kUyyKmWMqA,5093
89
+ scanoss/inspection/utils/license_utils.py,sha256=7jjtNcQPL_QNHY22drQqh7D7Pskq_AvAY1rLHAJWAhI,4809
88
90
  scanoss/inspection/utils/markdown_utils.py,sha256=zkFs48TM-NR6nUHYOyQmHCwV82_fUsks5UB4BmyGifU,2446
89
- scanoss/inspection/utils/scan_result_processor.py,sha256=z2kST2v5rw9XkRdgYejjMN9UHBmgyN5ZPYAPmJY3nOU,17326
91
+ scanoss/inspection/utils/scan_result_processor.py,sha256=zSPSWDBTqwRrF-pE6YaXi7tTYS4t1Qw_YIqw3hWvkW8,17736
90
92
  scanoss/scanners/__init__.py,sha256=D4C0lWLuNp8k_BjQZEc07WZcUgAvriVwQWOk063b0ZU,1122
91
93
  scanoss/scanners/container_scanner.py,sha256=fOrb64owrstX7LnTuxiIan059YgLeKXeBS6g2QaCyq0,16346
92
- scanoss/scanners/folder_hasher.py,sha256=PD1tghOrra3KtfsZJUbqKOmIBF-0Tg14FcBCKkqGUis,12873
94
+ scanoss/scanners/folder_hasher.py,sha256=UzOmtYTLMqeL3Jf4CpvT-L4qaPNCy9-7xV0BwYhAuRc,12973
93
95
  scanoss/scanners/scanner_config.py,sha256=egG7cw3S2akU-D9M1aLE5jLrfz_c8e7_DIotMnnpM84,2601
94
- scanoss/scanners/scanner_hfh.py,sha256=xrWxRB0SOq5FJbil3lXnBk6z_on7jxr2itPBj2kb0RA,9270
96
+ scanoss/scanners/scanner_hfh.py,sha256=8CAYZ0FGFSW8Dcp6ci0ZV6bxphR9D_WxMY17fvalICk,9507
95
97
  scanoss/services/dependency_track_service.py,sha256=JIpqev4I-x_ZajMxD5W2Y3OAUvEJ_4nstzAPV90vfP8,5070
96
98
  scanoss/utils/__init__.py,sha256=0hjb5ktavp7utJzFhGMPImPaZiHWgilM2HwvTp5lXJE,1122
97
99
  scanoss/utils/abstract_presenter.py,sha256=teiDTxBj5jBMCk2T8i4l1BJPf_u4zBLWrtCTFHSSECM,3148
@@ -99,9 +101,9 @@ scanoss/utils/crc64.py,sha256=TMrwQimSdE6imhFOUL7oAG6Kxu-8qMpGWMuMg8QpSVs,3169
99
101
  scanoss/utils/file.py,sha256=62cA9a17TU9ZvfA3FY5HY4-QOajJeSrc8S6xLA_f-3M,2980
100
102
  scanoss/utils/scanoss_scan_results_utils.py,sha256=ho9-DKefHFJlVZkw4gXOmMI-mgPIbV9Y2ftkI83fC1k,1727
101
103
  scanoss/utils/simhash.py,sha256=6iu8DOcecPAY36SZjCOzrrLMT9oIE7-gI6QuYwUQ7B0,5793
102
- scanoss-1.40.1.dist-info/licenses/LICENSE,sha256=LLUaXoiyOroIbr5ubAyrxBOwSRLTm35ETO2FmLpy8QQ,1074
103
- scanoss-1.40.1.dist-info/METADATA,sha256=_XDz8arP4O48Twcovv2A8x-ODDRIPxlupGrJGyO64O8,6181
104
- scanoss-1.40.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
105
- scanoss-1.40.1.dist-info/entry_points.txt,sha256=Uy28xnaDL5KQ7V77sZD5VLDXPNxYYzSr5tsqtiXVzAs,48
106
- scanoss-1.40.1.dist-info/top_level.txt,sha256=V11PrQ6Pnrc-nDF9xnisnJ8e6-i7HqSIKVNqduRWcL8,27
107
- scanoss-1.40.1.dist-info/RECORD,,
104
+ scanoss-1.41.0.dist-info/licenses/LICENSE,sha256=LLUaXoiyOroIbr5ubAyrxBOwSRLTm35ETO2FmLpy8QQ,1074
105
+ scanoss-1.41.0.dist-info/METADATA,sha256=PlxJlKB07rRGpvxVduJV_McBVlNdWWtBGcoFl50d2Xc,6181
106
+ scanoss-1.41.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
107
+ scanoss-1.41.0.dist-info/entry_points.txt,sha256=Uy28xnaDL5KQ7V77sZD5VLDXPNxYYzSr5tsqtiXVzAs,48
108
+ scanoss-1.41.0.dist-info/top_level.txt,sha256=V11PrQ6Pnrc-nDF9xnisnJ8e6-i7HqSIKVNqduRWcL8,27
109
+ scanoss-1.41.0.dist-info/RECORD,,