mirror of
				https://github.com/keylase/nvidia-patch.git
				synced 2025-11-04 06:32:02 +00:00 
			
		
		
		
	ndl: allow sequence output for each channel
This commit is contained in:
		@@ -150,7 +150,7 @@ class CommandNotifier(BaseNotifier):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class BaseChannel(ABC):
 | 
					class BaseChannel(ABC):
 | 
				
			||||||
    @abstractmethod
 | 
					    @abstractmethod
 | 
				
			||||||
    def get_latest_driver(self):
 | 
					    def get_latest_drivers(self):
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -175,10 +175,10 @@ class GFEClientChannel(BaseChannel):
 | 
				
			|||||||
        self._crd = crd
 | 
					        self._crd = crd
 | 
				
			||||||
        self._timeout = timeout
 | 
					        self._timeout = timeout
 | 
				
			||||||
        gfe_get_driver = importlib.import_module('gfe_get_driver')
 | 
					        gfe_get_driver = importlib.import_module('gfe_get_driver')
 | 
				
			||||||
        self._get_latest_driver = gfe_get_driver.get_latest_geforce_driver
 | 
					        self._get_latest_drivers = gfe_get_driver.get_latest_geforce_driver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_latest_driver(self):
 | 
					    def get_latest_drivers(self):
 | 
				
			||||||
        res = self._get_latest_driver(notebook=self._notebook,
 | 
					        res = self._get_latest_drivers(notebook=self._notebook,
 | 
				
			||||||
                                      x86_64=self._x86_64,
 | 
					                                      x86_64=self._x86_64,
 | 
				
			||||||
                                      os_version=self._os_version,
 | 
					                                      os_version=self._os_version,
 | 
				
			||||||
                                      os_build=self._os_build,
 | 
					                                      os_build=self._os_build,
 | 
				
			||||||
@@ -187,6 +187,8 @@ class GFEClientChannel(BaseChannel):
 | 
				
			|||||||
                                      dch=self._dch,
 | 
					                                      dch=self._dch,
 | 
				
			||||||
                                      crd=self._crd,
 | 
					                                      crd=self._crd,
 | 
				
			||||||
                                      timeout=self._timeout)
 | 
					                                      timeout=self._timeout)
 | 
				
			||||||
 | 
					        if res is None:
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
        res.update({
 | 
					        res.update({
 | 
				
			||||||
            'ChannelAttributes': {
 | 
					            'ChannelAttributes': {
 | 
				
			||||||
                'Name': self.name,
 | 
					                'Name': self.name,
 | 
				
			||||||
@@ -201,7 +203,7 @@ class GFEClientChannel(BaseChannel):
 | 
				
			|||||||
                'Mobile': self._notebook,
 | 
					                'Mobile': self._notebook,
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        return res
 | 
					        yield res
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class NvidiaDownloadsChannel(BaseChannel):
 | 
					class NvidiaDownloadsChannel(BaseChannel):
 | 
				
			||||||
@@ -224,7 +226,7 @@ class NvidiaDownloadsChannel(BaseChannel):
 | 
				
			|||||||
        self._cuda_ver = gnd.CUDAToolkitVersion[cuda_ver]
 | 
					        self._cuda_ver = gnd.CUDAToolkitVersion[cuda_ver]
 | 
				
			||||||
        self._timeout = timeout
 | 
					        self._timeout = timeout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_latest_driver(self):
 | 
					    def get_latest_drivers(self):
 | 
				
			||||||
        latest = self._gnd.get_drivers(os=self._os,
 | 
					        latest = self._gnd.get_drivers(os=self._os,
 | 
				
			||||||
                                       product=self._product,
 | 
					                                       product=self._product,
 | 
				
			||||||
                                       certlevel=self._certlevel,
 | 
					                                       certlevel=self._certlevel,
 | 
				
			||||||
@@ -233,7 +235,7 @@ class NvidiaDownloadsChannel(BaseChannel):
 | 
				
			|||||||
                                       cuda_ver=self._cuda_ver,
 | 
					                                       cuda_ver=self._cuda_ver,
 | 
				
			||||||
                                       timeout=self._timeout)
 | 
					                                       timeout=self._timeout)
 | 
				
			||||||
        if not latest:
 | 
					        if not latest:
 | 
				
			||||||
            return None
 | 
					            return
 | 
				
			||||||
        res = {
 | 
					        res = {
 | 
				
			||||||
            'DriverAttributes': {
 | 
					            'DriverAttributes': {
 | 
				
			||||||
                'Version': latest['version'],
 | 
					                'Version': latest['version'],
 | 
				
			||||||
@@ -253,7 +255,7 @@ class NvidiaDownloadsChannel(BaseChannel):
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        if 'download_url' in latest:
 | 
					        if 'download_url' in latest:
 | 
				
			||||||
            res['DriverAttributes']['DownloadURL'] = latest['download_url']
 | 
					            res['DriverAttributes']['DownloadURL'] = latest['download_url']
 | 
				
			||||||
        return res
 | 
					        yield res
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CudaToolkitDownloadsChannel(BaseChannel):
 | 
					class CudaToolkitDownloadsChannel(BaseChannel):
 | 
				
			||||||
@@ -264,11 +266,11 @@ class CudaToolkitDownloadsChannel(BaseChannel):
 | 
				
			|||||||
        self._gcd = gcd
 | 
					        self._gcd = gcd
 | 
				
			||||||
        self._timeout = timeout
 | 
					        self._timeout = timeout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_latest_driver(self):
 | 
					    def get_latest_drivers(self):
 | 
				
			||||||
        latest = self._gcd.get_latest_cuda_tk(timeout=self._timeout)
 | 
					        latest = self._gcd.get_latest_cuda_tk(timeout=self._timeout)
 | 
				
			||||||
        if not latest:
 | 
					        if not latest:
 | 
				
			||||||
            return None
 | 
					            return
 | 
				
			||||||
        return {
 | 
					        yield {
 | 
				
			||||||
            'DriverAttributes': {
 | 
					            'DriverAttributes': {
 | 
				
			||||||
                'Version': '???',
 | 
					                'Version': '???',
 | 
				
			||||||
                'Name': latest,
 | 
					                'Name': latest,
 | 
				
			||||||
@@ -289,11 +291,11 @@ class VulkanBetaDownloadsChannel(BaseChannel):
 | 
				
			|||||||
        self._os = os
 | 
					        self._os = os
 | 
				
			||||||
        self._timeout = timeout
 | 
					        self._timeout = timeout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_latest_driver(self):
 | 
					    def get_latest_drivers(self):
 | 
				
			||||||
        drivers = vulkan_downloads(timeout=self._timeout)
 | 
					        drivers = vulkan_downloads(timeout=self._timeout)
 | 
				
			||||||
        for drv in drivers:
 | 
					        for drv in drivers:
 | 
				
			||||||
            if drv["os"] == self._os:
 | 
					            if drv["os"] == self._os:
 | 
				
			||||||
                return {
 | 
					                yield {
 | 
				
			||||||
                    'DriverAttributes': {
 | 
					                    'DriverAttributes': {
 | 
				
			||||||
                        'Version': drv['version'],
 | 
					                        'Version': drv['version'],
 | 
				
			||||||
                        'Name': drv['name'],
 | 
					                        'Name': drv['name'],
 | 
				
			||||||
@@ -301,7 +303,7 @@ class VulkanBetaDownloadsChannel(BaseChannel):
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            return None
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def parse_args():
 | 
					def parse_args():
 | 
				
			||||||
@@ -389,26 +391,39 @@ class DriverLocator:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def run(self):
 | 
					    def run(self):
 | 
				
			||||||
        for ch in self._channels:
 | 
					        for ch in self._channels:
 | 
				
			||||||
 | 
					            counter = 0
 | 
				
			||||||
            try:
 | 
					            try:
 | 
				
			||||||
                drv = ch.get_latest_driver()
 | 
					                drivers = ch.get_latest_drivers()
 | 
				
			||||||
            except Exception as e:
 | 
					            except Exception as e:
 | 
				
			||||||
                self._perror("get_latest_driver() invocation failed for "
 | 
					                self._perror("get_latest_drivers() invocation failed for "
 | 
				
			||||||
                             "channel %s. Exception: %s. Continuing..." %
 | 
					                             "channel %s. Exception: %s. Continuing..." %
 | 
				
			||||||
                             (repr(ch.name), str(e)))
 | 
					                             (repr(ch.name), str(e)))
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
            if drv is None:
 | 
					
 | 
				
			||||||
                self._perror("Driver not found for channel %s" %
 | 
					            try:
 | 
				
			||||||
                             (repr(ch.name),))
 | 
					                # Fetch
 | 
				
			||||||
                continue
 | 
					                for drv in drivers:
 | 
				
			||||||
 | 
					                    counter += 1
 | 
				
			||||||
 | 
					                    # Hash
 | 
				
			||||||
                    try:
 | 
					                    try:
 | 
				
			||||||
                        key = self._hasher.hash_object(drv)
 | 
					                        key = self._hasher.hash_object(drv)
 | 
				
			||||||
                    except Exception as e:
 | 
					                    except Exception as e:
 | 
				
			||||||
                        self._perror("Key evaluation failed for channel %s. "
 | 
					                        self._perror("Key evaluation failed for channel %s. "
 | 
				
			||||||
                                     "Exception: %s" % (repr(name), str(e)))
 | 
					                                     "Exception: %s" % (repr(name), str(e)))
 | 
				
			||||||
                        continue
 | 
					                        continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    # Notify
 | 
				
			||||||
                    if not self._db.check_key(key):
 | 
					                    if not self._db.check_key(key):
 | 
				
			||||||
                        if self._notify_all(drv):
 | 
					                        if self._notify_all(drv):
 | 
				
			||||||
                            self._db.set_key(key, drv)
 | 
					                            self._db.set_key(key, drv)
 | 
				
			||||||
 | 
					            except Exception as e:
 | 
				
			||||||
 | 
					                self._perror("channel %s enumeration terminated with exception: %s" %
 | 
				
			||||||
 | 
					                             (repr(name), str(e)))
 | 
				
			||||||
 | 
					                continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if not counter:
 | 
				
			||||||
 | 
					                self._perror("Drivers not found for channel %s" %
 | 
				
			||||||
 | 
					                             (repr(ch.name),))
 | 
				
			||||||
        return self._ret_code
 | 
					        return self._ret_code
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user