[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