#!/usr/bin/env python3

import os, tarfile

class package:
	'''
	parse information from a pacman package
	
	member variables:
	file (string) - name of package file
	file_list (array) - list of files in the package archive
	pkginfo (dict) - package information parsed from .PKGINFO
	'''


	def __init__ (self, file):
		self.file = file

		if not os.path.exists(file):
			raise IOError('{} does not exist'.format(file))

		if not tarfile.is_tarfile(file):
			raise TypeError('{} is not a tar file'.format(file))

		pkg = tarfile.open(file)

		self.file_list = pkg.getnames()
		if not ".PKGINFO" in self.file_list:
			raise TypeError('{} is not a package file'.format(file))

		self.__parse_pkginfo(pkg)

		pkg.close()


	def __parse_pkginfo(self, pkg):
		self.pkginfo = {}
		self.pkginfo['pkgname'] = ""
		self.pkginfo['pkgbase'] = ""
		self.pkginfo['pkgver'] = ""
		self.pkginfo['pkgdesc'] = ""
		self.pkginfo['url'] = ""
		self.pkginfo['builddate'] = ""
		self.pkginfo['packager'] = ""
		self.pkginfo['size'] = ""
		self.pkginfo['arch'] = ""
		self.pkginfo['force'] = ""
		self.pkginfo['license'] = []
		self.pkginfo['replaces'] = []
		self.pkginfo['group'] = []
		self.pkginfo['depend'] = []
		self.pkginfo['optdepend'] = []
		self.pkginfo['conflict'] = []
		self.pkginfo['provides'] = []
		self.pkginfo['backup'] = []
		self.pkginfo['makepkgopt'] = []	
		
		arrays = ['license', 'replaces', 'group', 'depend', 'optdepend',
		          'conflict', 'provides', 'backup', 'makepkgopt']
		
		pkginfo = pkg.extractfile(".PKGINFO")
		for line in pkginfo:
			if (line[0] == '#'.encode('utf-8')[0]):
				continue
			(key, value) = line.decode('utf-8').split(" = ")

			if key in arrays:
				self.pkginfo[key].append(value.strip())
			else:
				self.pkginfo[key] = value.strip()

		pkginfo.close()

if __name__ == '__main__':
	pkg = package('/var/cache/pacman/pkg/pacman-3.3.1-1-i686.pkg.tar.gz')
	print('Package file: \n\t{}\n'.format(pkg.file))
	print('Package info: \n\t{}\n'.format(pkg.pkginfo))
	print('File list: \n\t{}\n'.format(pkg.file_list))
