def build_command(context, basedir, settings_name): """ Build project pages """ # Set required environment variables to load settings if PROJECT_DIR_ENVVAR not in os.environ \ or not os.environ[PROJECT_DIR_ENVVAR]: os.environ[PROJECT_DIR_ENVVAR] = basedir if SETTINGS_NAME_ENVVAR not in os.environ \ or not os.environ[SETTINGS_NAME_ENVVAR]: os.environ[SETTINGS_NAME_ENVVAR] = settings_name # Load current project settings from optimus.conf.registry import settings # Debug output display_settings(settings, ('DEBUG', 'PROJECT_DIR', 'SOURCES_DIR', 'TEMPLATES_DIR', 'LOCALES_DIR')) initialize(settings) # Init webassets and builder assets_env = register_assets(settings) builder = PageBuilder(settings, assets_env=assets_env) pages_map = import_pages_module(settings.PAGES_MAP, basedir=basedir) # Proceed to page building from registered pages builder.build_bulk(pages_map.PAGES)
def builder_interface(settings, views): """ Build all enabled pages from given views module. Arguments: settings (optimus.conf.model.SettingsModel): Settings object which defines everything required for building. views (object): Module which defines page views to build, in fact the module object require only a ``PAGES`` attribute that is a list of Page view. Returns: dict: A dictionnary with initialized builder (``builder`` item), asset manager (``assets_env`` item) and the list of builded pages (``builded`` item). """ # Initialize required structure according to settings initialize(settings) # Init asset manager assets_env = register_assets(settings) # Init page builder builder = PageBuilder(settings, assets_env=assets_env) # Proceed to page building from registered pages builded = builder.build_bulk(views.PAGES) return { "assets_env": assets_env, "builded": builded, "builder": builder, }
def test_build_bulk( minimal_basic_settings, fixtures_settings, reset_syspath, temp_builds_dir, sample_fixture_name, attempted_destinations, ): """ Build all pages in one bulk action Since 'build_item' test allready compare builded file, we dont do it again here, just check returned paths """ basepath = temp_builds_dir.join( "builder_build_bulk_{}".format(sample_fixture_name)) projectdir = os.path.join(basepath.strpath, sample_fixture_name) # Copy sample from fixtures dir templatedir = os.path.join(fixtures_settings.fixtures_path, sample_fixture_name) shutil.copytree(templatedir, projectdir) # Setup project setup_project(projectdir, "dummy_value") # Get basic sample settings settings = minimal_basic_settings(projectdir) # Define a dummy filter to test filter registration and usage settings.JINJA_FILTERS = {"dummy_filter": DummyFilter} # Init webassets and builder assets_env = register_assets(settings) builder = PageBuilder(settings, assets_env=assets_env) pages_map = import_pages_module(settings.PAGES_MAP, basedir=projectdir) # NOTE: We need to force reloading importation else the previous import settings # with different values, is still re-used pages_map = importlib.reload(pages_map) # Collect finded templates for each defined page view buildeds = builder.build_bulk(pages_map.PAGES) # Check every attempted file has been created (promise) assert buildeds == [ os.path.join(settings.PUBLISH_DIR, path) for path in attempted_destinations ] # Check promised builded file exists for dest in attempted_destinations: absdest = os.path.join(settings.PUBLISH_DIR, dest) assert os.path.exists(absdest) is True # Cleanup sys.path for next tests reset_syspath(projectdir)
def test_build_bulk(minimal_basic_settings, fixtures_settings, temp_builds_dir, sample_fixture_name, attempted_destinations): """ Build all pages in one bulk action Since 'build_item' test allready compare builded file, we dont do it again here, just check returned paths """ basepath = temp_builds_dir.join('builder_build_bulk_{}'.format(sample_fixture_name)) projectdir = os.path.join(basepath.strpath, sample_fixture_name) attempts_dir = os.path.join(fixtures_settings.fixtures_path, 'builds', sample_fixture_name) # Copy sample from fixtures dir templatedir = os.path.join(fixtures_settings.fixtures_path, sample_fixture_name) shutil.copytree(templatedir, projectdir) # Get basic sample settings settings = minimal_basic_settings(projectdir) # Init webassets and builder assets_env = register_assets(settings) builder = PageBuilder(settings, assets_env=assets_env) pages_map = import_pages_module(settings.PAGES_MAP, basedir=projectdir) # Collect finded templates for each defined page view buildeds = builder.build_bulk(pages_map.PAGES) # Check every attempted file has been created (promise) assert buildeds == [os.path.join(settings.PUBLISH_DIR, path) for path in attempted_destinations] # Check promised builded file exists for dest in attempted_destinations: absdest = os.path.join(settings.PUBLISH_DIR, dest) assert os.path.exists(absdest) == True
def watch_command(context, basedir, settings_name): """ Watch for changes in project sources to automatically build project ressources """ logger = logging.getLogger("optimus") # Set required environment variables to load settings if PROJECT_DIR_ENVVAR not in os.environ \ or not os.environ[PROJECT_DIR_ENVVAR]: os.environ[PROJECT_DIR_ENVVAR] = basedir if SETTINGS_NAME_ENVVAR not in os.environ or \ not os.environ[SETTINGS_NAME_ENVVAR]: os.environ[SETTINGS_NAME_ENVVAR] = settings_name # Load current project settings from optimus.conf.registry import settings # Debug output display_settings(settings, ('DEBUG', 'PROJECT_DIR', 'SOURCES_DIR', 'TEMPLATES_DIR', 'LOCALES_DIR')) initialize(settings) # Init webassets and builder assets_env = register_assets(settings) builder = PageBuilder(settings, assets_env=assets_env) pages_map = import_pages_module(settings.PAGES_MAP, basedir=basedir) # Proceed to page building from registered pages logger.debug('Trigger pages build to start') builder.build_bulk(pages_map.PAGES) builder.scan_bulk(pages_map.PAGES) observer = Observer() # Init templates and assets event watchers templates_event_handler = TemplatesWatchEventHandler( settings, builder, **settings.WATCHER_TEMPLATES_PATTERNS ) if assets_env is not None: assets_event_handler = AssetsWatchEventHandler( settings, assets_env, builder, **settings.WATCHER_ASSETS_PATTERNS ) # Registering event watchers and start to watch observer.schedule( templates_event_handler, settings.TEMPLATES_DIR, recursive=True ) if assets_env is not None: observer.schedule( assets_event_handler, settings.SOURCES_DIR, recursive=True ) logger.warning('Starting to watch sources, use CTRL+C to stop it') observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: logger.warning('Stopping watcher..') observer.stop() observer.join()