Esempio n. 1
0
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)
Esempio n. 2
0
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,
    }
Esempio n. 3
0
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)
Esempio n. 4
0
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
Esempio n. 5
0
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()