def _init_extension(self, ext_class): """Initializes an extension. This will register the extension, install any URLs that it may need, and make it available in Django's list of apps. It will then notify that the extension has been initialized. """ extension_id = ext_class.id assert extension_id not in self._extension_instances try: extension = ext_class(extension_manager=self) except Exception as e: logging.error('Unable to initialize extension %s: %s' % (ext_class, e), exc_info=1) error_details = self._store_load_error(extension_id, e) raise EnablingExtensionError( _('Error initializing extension: %s') % e, error_details) if extension_id in self._load_errors: del self._load_errors[extension_id] self._extension_instances[extension_id] = extension if extension.has_admin_site: self._init_admin_site(extension) # Installing the urls must occur after _init_admin_site(). The urls # for the admin site will not be generated until it is called. self._install_admin_urls(extension) self._register_static_bundles(extension) extension.info.installed = extension.registration.installed extension.info.enabled = True self._add_to_installed_apps(extension) self._context_processors_setting.add_list(extension.context_processors) clear_template_tag_caches() ext_class.instance = extension try: self.install_extension_media(ext_class) except InstallExtensionError as e: raise EnablingExtensionError(e.message, e.load_error) self._sync_database(ext_class) # Mark the extension as installed. ext_class.registration.installed = True ext_class.registration.save() extension_initialized.send(self, ext_class=extension) return extension
def enable_extension(self, extension_id): """Enables an extension. Enabling an extension will install any data files the extension may need, any tables in the database, perform any necessary database migrations, and then will start up the extension. """ if extension_id in self._extension_instances: # It's already enabled. return if extension_id not in self._extension_classes: if extension_id in self._load_errors: raise EnablingExtensionError( _('There was an error loading this extension'), self._load_errors[extension_id], needs_reload=True) raise InvalidExtensionError(extension_id) ext_class = self._extension_classes[extension_id] # Enable extension dependencies for requirement_id in ext_class.requirements: self.enable_extension(requirement_id) try: self._install_extension(ext_class) except InstallExtensionError as e: raise EnablingExtensionError(e.message, e.load_error) extension = self._init_extension(ext_class) ext_class.registration.enabled = True ext_class.registration.save() self._clear_template_cache() self._bump_sync_gen() self._recalculate_middleware() return extension
def _init_extension(self, ext_class): """Initializes an extension. This will register the extension, install any URLs that it may need, and make it available in Django's list of apps. It will then notify that the extension has been initialized. """ assert ext_class.id not in self._extension_instances try: extension = ext_class(extension_manager=self) except Exception, e: logging.error('Unable to initialize extension %s: %s' % (ext_class, e), exc_info=1) raise EnablingExtensionError('Error initializing extension: %s' % e)
def enable_extension(self, extension_id): """Enables an extension. Enabling an extension will install any data files the extension may need, any tables in the database, perform any necessary database migrations, and then will start up the extension. """ if extension_id in self._extension_instances: # It's already enabled. return if extension_id not in self._extension_classes: raise InvalidExtensionError(extension_id) ext_class = self._extension_classes[extension_id] # Enable extension dependencies for requirement_id in ext_class.requirements: self.enable_extension(requirement_id) try: self._install_extension(ext_class) except InstallExtensionError, e: raise EnablingExtensionError(e.message)