class HotterDeployer(object): def __init__(self, workspace_directory, tomcat_directory, hotterdeploy_dir, liferay_context, do_polling, statics_directory): self.do_polling = do_polling self.workspace_directory = workspace_directory self.tomcat_directory = tomcat_directory self.liferay_context = liferay_context self.statics_directory = statics_directory self.portlets = {} self.themes = {} self.deploys = {} if hotterdeploy_dir == '': self.hotterdeploy_dir = os.path.abspath( os.path.join(tomcat_directory, '..', 'hotterdeploy')) else: self.hotterdeploy_dir = os.path.abspath( os.path.join(hotterdeploy_dir, 'hotterdeploy')) self.tomcat_temp_dir = os.path.join(tomcat_directory, 'temp') self.tomcat_webapps_dir = os.path.join(tomcat_directory, 'webapps') self.liferay_dir = os.path.join(self.tomcat_webapps_dir, self.liferay_context) if do_polling: self.observer = PollingObserverVFS(default_stat, listdir) else: self.observer = Observer() # Create our hotterdeploy directory and watch it for wars if not os.path.exists(self.hotterdeploy_dir): os.mkdir(self.hotterdeploy_dir) self.observer.schedule(OnDeployHandler(hotterDeployer=self), self.hotterdeploy_dir, recursive=False) # Scan tomcat temp directory for deployed portlets self._scan_temp() self.observer.schedule(OnTempDeployHandler(hotterDeployer=self), self.tomcat_temp_dir, recursive=False) # Scan tomcat webapps directory for deployed portlets self._scan_webapps() self.observer.schedule(OnWebappsDeployHandler(hotterDeployer=self), self.tomcat_webapps_dir, recursive=False) # Scan the working directory for portlets LOG.debug('Scanning workspace for portlets...') self._scan_wd(workspace_directory) LOG.debug('Done.') # path = os.path.join(self.workspace_directory, 'liferay-portal', 'credoc-newsletter-portlet') path = self.workspace_directory # IN_CREATE | IN_DELETE | IN_CLOSE_WRITE && src/main/webapp/WEB-INF w = self.observer.schedule(WorkSpaceHandler(hotterDeployer=self), path, recursive=True) # IN_CLOSE_WRITE && src/main/webapp self.observer.add_handler_for_watch( OnFileChangedHandler(hotterDeployer=self), w) # self.observer.schedule(OnFileChangedHandler(hotterDeployer=self), self.workspace_directory, recursive=True) # IN_CLOSE_WRITE && target/classes self.observer.add_handler_for_watch( OnClassChangedHandler(hotterDeployer=self), w) # self.observer.schedule(OnClassChangedHandler(hotterDeployer=self), self.workspace_directory, recursive=True) self.livereload_server = Server() def start(self): import time start_time = time.time() LOG.debug('Starting observer...') self.observer.start() LOG.debug('Starting observer took {0} seconds'.format(time.time() - start_time)) from livereload import LiveReloadInfoHandler LiveReloadInfoHandler.hotterDeployer = weakref.proxy(self) LOG.info( 'Using {0}'.format('polling' if self.do_polling else 'FS events')) LOG.info('Serving livereload on http://{host}:{port}/info'.format( **vars(self.livereload_server))) try: self.livereload_server.serve() except KeyboardInterrupt: self.observer.stop() self.livereload_server.stop() self.observer.join() def __del__(self): if os.path.exists(self.hotterdeploy_dir): os.rmdir(self.hotterdeploy_dir) def _scan_wd(self, directory): self.portlets.update( scan_working_directory_for_portlet_contexts(directory)) def _update_deploys(self): deploys = {} if hasattr(self, '_temp_deploys'): for name, path in self._temp_deploys.items(): deploys[name] = path if hasattr(self, '_webapp_deploys'): for name, path in self._webapp_deploys.items(): if name not in deploys: deploys[name] = path self.deploys = deploys def _scan_temp(self): path = os.path.join(self.tomcat_directory, 'temp') self._temp_deploys = scan_tomcat_temporary_directory(path) self._update_deploys() def _scan_webapps(self): path = os.path.join(self.tomcat_directory, 'webapps') self._webapp_deploys = scan_tomcat_webapps_directory(path) self._update_deploys() def find_latest_temp_dir(self, portlet_name): ''' Find the latest temp deploy directory for a given portlet: e.g. 21-my-portlet-name ''' latest_subdir = self.deploys.get(portlet_name, None) return latest_subdir def trigger_browser_reload(self, path=None): LOG.debug('reloading browser') self.livereload_server.reload(path)
class HotterDeployer(object): def __init__( self, workspace_directory, tomcat_directory, hotterdeploy_dir, liferay_context, do_polling, statics_directory ): self.do_polling = do_polling self.workspace_directory = workspace_directory self.tomcat_directory = tomcat_directory self.liferay_context = liferay_context self.statics_directory = statics_directory self.portlets = {} self.themes = {} self.deploys = {} if hotterdeploy_dir == '': self.hotterdeploy_dir = os.path.abspath(os.path.join(tomcat_directory, '..', 'hotterdeploy')) else: self.hotterdeploy_dir = os.path.abspath(os.path.join(hotterdeploy_dir, 'hotterdeploy')) self.tomcat_temp_dir = os.path.join(tomcat_directory, 'temp') self.tomcat_webapps_dir = os.path.join(tomcat_directory, 'webapps') self.liferay_dir = os.path.join(self.tomcat_webapps_dir, self.liferay_context) if do_polling: self.observer = PollingObserverVFS(default_stat, listdir) else: self.observer = Observer() # Create our hotterdeploy directory and watch it for wars if not os.path.exists(self.hotterdeploy_dir): os.mkdir(self.hotterdeploy_dir) self.observer.schedule(OnDeployHandler(hotterDeployer=self), self.hotterdeploy_dir, recursive=False) # Scan tomcat temp directory for deployed portlets self._scan_temp() self.observer.schedule(OnTempDeployHandler(hotterDeployer=self), self.tomcat_temp_dir, recursive=False) # Scan tomcat webapps directory for deployed portlets self._scan_webapps() self.observer.schedule(OnWebappsDeployHandler(hotterDeployer=self), self.tomcat_webapps_dir, recursive=False) # Scan the working directory for portlets LOG.debug('Scanning workspace for portlets...') self._scan_wd(workspace_directory) LOG.debug('Done.') # path = os.path.join(self.workspace_directory, 'liferay-portal', 'credoc-newsletter-portlet') path = self.workspace_directory # IN_CREATE | IN_DELETE | IN_CLOSE_WRITE && src/main/webapp/WEB-INF w = self.observer.schedule(WorkSpaceHandler(hotterDeployer=self), path, recursive=True) # IN_CLOSE_WRITE && src/main/webapp self.observer.add_handler_for_watch(OnFileChangedHandler(hotterDeployer=self), w) # self.observer.schedule(OnFileChangedHandler(hotterDeployer=self), self.workspace_directory, recursive=True) # IN_CLOSE_WRITE && target/classes self.observer.add_handler_for_watch(OnClassChangedHandler(hotterDeployer=self), w) # self.observer.schedule(OnClassChangedHandler(hotterDeployer=self), self.workspace_directory, recursive=True) self.livereload_server = Server() def start(self): import time start_time = time.time() LOG.debug('Starting observer...') self.observer.start() LOG.debug('Starting observer took {0} seconds'.format(time.time() - start_time)) from livereload import LiveReloadInfoHandler LiveReloadInfoHandler.hotterDeployer = weakref.proxy(self) LOG.info('Using {0}'.format('polling' if self.do_polling else 'FS events')) LOG.info('Serving livereload on http://{host}:{port}/info'.format(**vars(self.livereload_server))) try: self.livereload_server.serve() except KeyboardInterrupt: self.observer.stop() self.livereload_server.stop() self.observer.join() def __del__(self): if os.path.exists(self.hotterdeploy_dir): os.rmdir(self.hotterdeploy_dir) def _scan_wd(self, directory): self.portlets.update(scan_working_directory_for_portlet_contexts(directory)) def _update_deploys(self): deploys = {} if hasattr(self, '_temp_deploys'): for name, path in self._temp_deploys.items(): deploys[name] = path if hasattr(self, '_webapp_deploys'): for name, path in self._webapp_deploys.items(): if name not in deploys: deploys[name] = path self.deploys = deploys def _scan_temp(self): path = os.path.join(self.tomcat_directory, 'temp') self._temp_deploys = scan_tomcat_temporary_directory(path) self._update_deploys() def _scan_webapps(self): path = os.path.join(self.tomcat_directory, 'webapps') self._webapp_deploys = scan_tomcat_webapps_directory(path) self._update_deploys() def find_latest_temp_dir(self, portlet_name): ''' Find the latest temp deploy directory for a given portlet: e.g. 21-my-portlet-name ''' latest_subdir = self.deploys.get(portlet_name, None) return latest_subdir def trigger_browser_reload(self, path=None): LOG.debug('reloading browser') self.livereload_server.reload(path)