Source code for tic.env

# -*- coding: utf-8 -*-
#
# Copyright (C) 2003-2009 Edgewall Software
# Copyright (C) 2003-2007 Jonas Borgström <jonas@edgewall.com>
# All rights reserved.
#


from tic.core import Component, ComponentManager, ExtensionPoint, Interface, implements
from tic.conf import settings
from tic.loader import load_components, locate, _get_module_name
import re

__all__ = ['Environment']

[docs]class Environment(Component, ComponentManager): """Tic environment manager loads all components available in the system """ required = True def __init__(self): """Initialize the Tic environment. """ ComponentManager.__init__(self) self.systeminfo = [] self._href = self._abs_href = None load_components(self) self._init_settings() def _init_settings(self): JavascriptToolkitDetector() # TODO: make this a component that implements an EnvirnmentConfiguration Interface
class JavascriptToolkitDetector(object): def __init__(self): self.auto_detect_js_toolkit() def auto_detect_js_toolkit(self): if settings.JAVASCRIPT_TOOLKIT == 'autodetect': files = [] for file in locate("entrypoint.js"): files.append(file) if len(files) > 1: #TODO: raise EnvironmentException raise Exception('More than one entry point defined\n%s' % '\n'.join(files)) if not len(files): #TODO: raise EnvironmentException raise Exception('No entry point defined\n') if self._is_dojo(files[0]): settings.JAVASCRIPT_TOOLKIT = 'dojo' # TODO: enum this elif self._is_closure(files[0]): settings.JAVASCRIPT_TOOLKIT = 'closure' # TODO: enum this #TODO: else: def _is_dojo(self, file): """ returns true if the javascript file has dojo.provide() """ provide_matcher = re.compile(r'.*\s*dojo\.provide\([\'"](.*)[\'"]\)') require_matcher = re.compile(r'.*\s*dojo\.require\([\'"](.*)[\'"]\)') return provide_matcher.match(open(file, 'r').read()) def _is_closure(self, file): """ returns true if the javascript file has goog.provide() """ provide_matcher = re.compile(r'.*\s*goog\.provide\([\'"](.*)[\'"]\)') require_matcher = re.compile(r'.*\s*goog\.require\([\'"](.*)[\'"]\)') return provide_matcher.match(open(file, 'r').read())