示例#1
0
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()))
示例#2
0
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)