# KidKit
# Webware for Python
# See Docs/index.html

def InstallInWebKit(appServer):
	app = appServer.application()
	from WebKit.PlugIn import PlugInError
	try:
		try:
			from KidKit.Properties import requiredSoftware
		except ImportError:
			raise PlugInError, 'Cannot determine required software.'
		for soft in requiredSoftware:
			if soft['name'] == 'kid':
				requiredKidVersion = soft['version']
				break
		else:
			raise PlugInError, 'Cannot determine required Kid version.'
		try:
			import kid
		except ImportError:
			raise PlugInError, \
				'Cannot import Kid. This needs to be installed to use KidKit.'
		try:
			kidVersion = tuple(map(lambda s:
					int('0' + ''.join(filter(lambda c: c.isdigit(), s))),
				kid.__version__.split('.', 3)[:3]))
		except ImportError:
			raise PlugInError, 'Cannot determine Kid version.'
		if kidVersion < requiredKidVersion:
			raise PlugInError, \
				'KidKit needs at least Kid version %s (installed is %s).' \
				% ('.'.join(map(str, requiredKidVersion)),
					'.'.join(map(str, kidVersion)))
		try:
			from KidServletFactory import KidServletFactory
			app.addServletFactory(KidServletFactory(app))
		except Exception:
			from traceback import print_exc
			print_exc()
			raise PlugInError, 'Cannot install Kid servlet factory.'
	except PlugInError, e:
		print e
		print "KidKit will not be loaded, '.kid' extension will be ignored."
		# We need to disable the '.kid' extension because otherwise the kid
		# templates would be delivered as ordinary files (security problem).
		e = app.setting('ExtensionsToIgnore', [])
		if '.kid' not in e:
			e.append('.kid')
			app.setSetting('ExtensionsToIgnore', e)
		e = app.setting('FilesToHide', [])
		if '*.kid' not in e:
			e.append('*.kid')
			app.setSetting('FilesToHide', e)
		from WebKit.URLParser import initParser
		initParser(app)
