class DpkgTest(unittest.TestCase): def setUp(self): dpkgfile = os.path.join(os.path.dirname(__file__), TEST_DPKG_FILE) self.dpkg = Dpkg(dpkgfile) def test_get_versions(self): self.assertEqual(self.dpkg.epoch, 1) self.assertEqual(self.dpkg.upstream_version, '0.0.0') self.assertEqual(self.dpkg.debian_revision, 'test') def test_get_message_headers(self): self.assertEqual(self.dpkg.package, 'testdeb') self.assertEqual(self.dpkg.PACKAGE, 'testdeb') self.assertEqual(self.dpkg['package'], 'testdeb') self.assertEqual(self.dpkg['PACKAGE'], 'testdeb') self.assertEqual(self.dpkg.get('package'), 'testdeb') self.assertEqual(self.dpkg.get('PACKAGE'), 'testdeb') self.assertEqual(self.dpkg.get('nonexistent'), None) self.assertEqual(self.dpkg.get('nonexistent', 'foo'), 'foo') def test_missing_header(self): self.assertRaises(KeyError, self.dpkg.__getitem__, 'xyzzy') self.assertRaises(AttributeError, self.dpkg.__getattr__, 'xyzzy') def test_message(self): self.assertIsInstance(self.dpkg.message, type(Message()))
class Package(object): """Represents a .deb package """ def __init__(self, package_path): """Initialize instance properties """ self.dpkg = Dpkg(package_path) self.headers = dict() self.get_package_meta() def get_package_meta(self): """Reads in the package metadata and incorporates it into the class """ for key, value in HEADER_KEYS.items(): self.headers[key] = self.dpkg.get(value) def render_packages_file(self): """Dumps out the data that would go in a Packages file for an apt repo """ ret = list() for key, value in HEADER_KEYS.items(): ret.append("{0}: {1}".format(key, self.headers[key])) ret.append('') return "\n".join(ret) def __getattribute__(self, name): """Make the dpkg header keys case-insensitive """ headers = [x.lower() for x in HEADER_KEYS] if name.lower() in headers: for key in HEADER_KEYS.keys(): if key.lower() == name.lower(): return self.headers[key] else: return object.__getattribute__(self, name)