[kernel] r17029 - dists/trunk/linux-2.6/debian/lib/python/debian_linux

Ben Hutchings benh at alioth.debian.org
Wed Mar 9 03:23:12 UTC 2011


Author: benh
Date: Wed Mar  9 03:22:59 2011
New Revision: 17029

Log:
Add Python module debian_linux.firmware based on script in firmware-nonfree

Added:
   dists/trunk/linux-2.6/debian/lib/python/debian_linux/firmware.py

Added: dists/trunk/linux-2.6/debian/lib/python/debian_linux/firmware.py
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/lib/python/debian_linux/firmware.py	Wed Mar  9 03:22:59 2011	(r17029)
@@ -0,0 +1,87 @@
+import re
+
+class FirmwareFile(object):
+    def __init__(self, binary, desc=None, source=None, version=None):
+        self.binary = binary
+        self.desc = desc
+        self.source = source
+        self.version = version
+
+class FirmwareSection(object):
+    def __init__(self, driver, files, licence):
+        self.driver = driver
+        self.files = files
+        self.licence = licence
+
+class FirmwareWhence(list):
+    def __init__(self, file):
+        self.read(file)
+
+    def read(self, file):
+        in_header = True
+        driver = None
+        files = {}
+        licence = None
+        binary = None
+        desc = None
+        source = None
+        version = None
+
+        for line in file:
+            if line.startswith('----------'):
+                if in_header:
+                    in_header = False
+                else:
+                    # Finish old section
+                    if driver:
+                        self.append(FirmwareSection(driver, files, licence))
+                    driver = None
+                    files = {}
+                    licence = None
+                continue
+
+            if in_header:
+                continue
+
+            if line == '\n':
+                # End of field; end of file fields
+                if binary:
+                    files[binary] = FirmwareFile(binary, desc, source, version)
+                binary = None
+                desc = None
+                source = None
+                version = None
+                continue
+
+            match = re.match(
+                r'(Driver|File|Info|Licen[cs]e|Source|Version'
+                r'|Original licen[cs]e info(?:rmation)?):\s*(.*)\n',
+                line)
+            if match:
+                keyword, value = match.group(1, 2)
+                if keyword == 'Driver':
+                    driver = value.split(' ')[0].lower()
+                elif keyword == 'File':
+                    match = re.match(r'(\S+)\s+--\s+(.*)', value)
+                    if match:
+                        binary = match.group(1)
+                        desc = match.group(2)
+                    else:
+                        for binary in value.strip().split():
+                            files[binary] = FirmwareFile(binary)
+                        binary = None
+                elif keyword in ['Info', 'Version']:
+                    version = value
+                elif keyword == 'Source':
+                    source = value
+                else:
+                    licence = value
+            elif licence is not None:
+                licence = (licence + '\n' +
+                           re.sub(r'^(?:[/ ]\*| \*/)?\s*(.*?)\s*$', r'\1', line))
+
+        # Finish last section if non-empty
+        if binary:
+            files[binary] = FirmwareFile(binary, desc, source, version)
+        if driver:
+            self.append(FirmwareSection(driver, files, licence))



More information about the Kernel-svn-changes mailing list