def get_watcher_dirs(theme_dirs=None, themes=None): """ Return sass directories that need to be added to sass watcher. Example: >> get_watcher_dirs('/edx/app/edx-platform/themes', ['red-theme']) [ 'common/static', 'common/static/sass', 'lms/static/sass', 'lms/static/sass/partials', '/edx/app/edxapp/edx-platform/themes/red-theme/lms/static/sass', '/edx/app/edxapp/edx-platform/themes/red-theme/lms/static/sass/partials', 'cms/static/sass', 'cms/static/sass/partials', '/edx/app/edxapp/edx-platform/themes/red-theme/cms/static/sass/partials', ] Parameters: theme_dirs (list): list of theme base directories. themes (list): list containing names of themes Returns: (list): dirs that need to be added to sass watchers. """ dirs = [] dirs.extend(COMMON_LOOKUP_PATHS) if theme_dirs and themes: # Register sass watchers for all the given themes themes = get_theme_paths(themes=themes, theme_dirs=theme_dirs) for theme in themes: for _dir in get_sass_directories( 'lms', theme) + get_sass_directories('cms', theme): dirs.append(_dir['sass_source_dir']) dirs.extend(_dir['lookup_paths']) # Register sass watchers for lms and cms for _dir in get_sass_directories('lms') + get_sass_directories( 'cms') + get_common_sass_directories(): dirs.append(_dir['sass_source_dir']) dirs.extend(_dir['lookup_paths']) # remove duplicates dirs = list(set(dirs)) return dirs
def get_watcher_dirs(theme_dirs=None, themes=None): """ Return sass directories that need to be added to sass watcher. Example: >> get_watcher_dirs('/edx/app/edx-platform/themes', ['red-theme']) [ 'common/static', 'common/static/sass', 'lms/static/sass', 'lms/static/sass/partials', '/edx/app/edxapp/edx-platform/themes/red-theme/lms/static/sass', '/edx/app/edxapp/edx-platform/themes/red-theme/lms/static/sass/partials', 'cms/static/sass', 'cms/static/sass/partials', '/edx/app/edxapp/edx-platform/themes/red-theme/cms/static/sass/partials', ] Parameters: theme_dirs (list): list of theme base directories. themes (list): list containing names of themes Returns: (list): dirs that need to be added to sass watchers. """ dirs = [] dirs.extend(COMMON_LOOKUP_PATHS) if theme_dirs and themes: # Register sass watchers for all the given themes themes = get_theme_paths(themes=themes, theme_dirs=theme_dirs) for theme in themes: for _dir in get_sass_directories('lms', theme) + get_sass_directories('cms', theme): dirs.append(_dir['sass_source_dir']) dirs.extend(_dir['lookup_paths']) # Register sass watchers for lms and cms for _dir in get_sass_directories('lms') + get_sass_directories('cms') + get_common_sass_directories(): dirs.append(_dir['sass_source_dir']) dirs.extend(_dir['lookup_paths']) # remove duplicates dirs = list(set(dirs)) return dirs
def compile_sass(options): """ Compile Sass to CSS. If command is called without any arguments, it will only compile lms, cms sass for the open source theme. And none of the comprehensive theme's sass would be compiled. If you want to compile sass for all comprehensive themes you will have to run compile_sass specifying all the themes that need to be compiled.. The following is a list of some possible ways to use this command. Command: paver compile_sass Description: compile sass files for both lms and cms. If command is called like above (i.e. without any arguments) it will only compile lms, cms sass for the open source theme. None of the theme's sass will be compiled. Command: paver compile_sass --theme-dirs /edx/app/edxapp/edx-platform/themes --themes=red-theme Description: compile sass files for both lms and cms for 'red-theme' present in '/edx/app/edxapp/edx-platform/themes' Command: paver compile_sass --theme-dirs=/edx/app/edxapp/edx-platform/themes --themes red-theme stanford-style Description: compile sass files for both lms and cms for 'red-theme' and 'stanford-style' present in '/edx/app/edxapp/edx-platform/themes'. Command: paver compile_sass --system=cms --theme-dirs /edx/app/edxapp/edx-platform/themes /edx/app/edxapp/edx-platform/common/test/ --themes red-theme stanford-style test-theme Description: compile sass files for cms only for 'red-theme', 'stanford-style' and 'test-theme' present in '/edx/app/edxapp/edx-platform/themes' and '/edx/app/edxapp/edx-platform/common/test/'. """ debug = options.get('debug') force = options.get('force') systems = get_parsed_option(options, 'system', ALL_SYSTEMS) themes = get_parsed_option(options, 'themes', []) theme_dirs = get_parsed_option(options, 'theme_dirs', []) if not theme_dirs and themes: # We can not compile a theme sass without knowing the directory that contains the theme. raise ValueError('theme-dirs must be provided for compiling theme sass.') if themes and theme_dirs: themes = get_theme_paths(themes=themes, theme_dirs=theme_dirs) # Compile sass for OpenEdx theme after comprehensive themes if None not in themes: themes.append(None) timing_info = [] dry_run = tasks.environment.dry_run compilation_results = {'success': [], 'failure': []} print("\t\tStarted compiling Sass:") # compile common sass files is_successful = _compile_sass('common', None, debug, force, timing_info) if is_successful: print("Finished compiling 'common' sass.") compilation_results['success' if is_successful else 'failure'].append('"common" sass files.') for system in systems: for theme in themes: print("Started compiling '{system}' Sass for '{theme}'.".format(system=system, theme=theme or 'system')) # Compile sass files is_successful = _compile_sass( system=system, theme=path(theme) if theme else None, debug=debug, force=force, timing_info=timing_info ) if is_successful: print("Finished compiling '{system}' Sass for '{theme}'.".format( system=system, theme=theme or 'system' )) compilation_results['success' if is_successful else 'failure'].append('{system} sass for {theme}.'.format( system=system, theme=theme or 'system', )) print("\t\tFinished compiling Sass:") if not dry_run: for sass_dir, css_dir, duration in timing_info: print(">> {} -> {} in {}s".format(sass_dir, css_dir, duration)) if compilation_results['success']: print("\033[92m\nSuccessful compilations:\n--- " + "\n--- ".join(compilation_results['success']) + "\n\033[00m") if compilation_results['failure']: print("\033[91m\nFailed compilations:\n--- " + "\n--- ".join(compilation_results['failure']) + "\n\033[00m")
def compile_sass(options): """ Compile Sass to CSS. If command is called without any arguments, it will only compile lms, cms sass for the open source theme. And none of the comprehensive theme's sass would be compiled. If you want to compile sass for all comprehensive themes you will have to run compile_sass specifying all the themes that need to be compiled.. The following is a list of some possible ways to use this command. Command: paver compile_sass Description: compile sass files for both lms and cms. If command is called like above (i.e. without any arguments) it will only compile lms, cms sass for the open source theme. None of the theme's sass will be compiled. Command: paver compile_sass --theme-dirs /edx/app/edxapp/edx-platform/themes --themes=red-theme Description: compile sass files for both lms and cms for 'red-theme' present in '/edx/app/edxapp/edx-platform/themes' Command: paver compile_sass --theme-dirs=/edx/app/edxapp/edx-platform/themes --themes red-theme stanford-style Description: compile sass files for both lms and cms for 'red-theme' and 'stanford-style' present in '/edx/app/edxapp/edx-platform/themes'. Command: paver compile_sass --system=cms --theme-dirs /edx/app/edxapp/edx-platform/themes /edx/app/edxapp/edx-platform/common/test/ --themes red-theme stanford-style test-theme Description: compile sass files for cms only for 'red-theme', 'stanford-style' and 'test-theme' present in '/edx/app/edxapp/edx-platform/themes' and '/edx/app/edxapp/edx-platform/common/test/'. """ debug = options.get('debug') force = options.get('force') systems = get_parsed_option(options, 'system', ALL_SYSTEMS) themes = get_parsed_option(options, 'themes', []) theme_dirs = get_parsed_option(options, 'theme_dirs', []) if not theme_dirs and themes: # We can not compile a theme sass without knowing the directory that contains the theme. raise ValueError( 'theme-dirs must be provided for compiling theme sass.') if themes and theme_dirs: themes = get_theme_paths(themes=themes, theme_dirs=theme_dirs) # Compile sass for OpenEdx theme after comprehensive themes if None not in themes: themes.append(None) timing_info = [] dry_run = tasks.environment.dry_run compilation_results = {'success': [], 'failure': []} print("\t\tStarted compiling Sass:") # compile common sass files is_successful = _compile_sass('common', None, debug, force, timing_info) if is_successful: print("Finished compiling 'common' sass.") compilation_results['success' if is_successful else 'failure'].append( '"common" sass files.') for system in systems: for theme in themes: print("Started compiling '{system}' Sass for '{theme}'.".format( system=system, theme=theme or 'system')) # Compile sass files is_successful = _compile_sass(system=system, theme=path(theme) if theme else None, debug=debug, force=force, timing_info=timing_info) if is_successful: print( "Finished compiling '{system}' Sass for '{theme}'.".format( system=system, theme=theme or 'system')) compilation_results[ 'success' if is_successful else 'failure'].append( '{system} sass for {theme}.'.format( system=system, theme=theme or 'system', )) print("\t\tFinished compiling Sass:") if not dry_run: for sass_dir, css_dir, duration in timing_info: print(">> {} -> {} in {}s".format(sass_dir, css_dir, duration)) if compilation_results['success']: print("\033[92m\nSuccessful compilations:\n--- " + "\n--- ".join(compilation_results['success']) + "\n\033[00m") if compilation_results['failure']: print("\033[91m\nFailed compilations:\n--- " + "\n--- ".join(compilation_results['failure']) + "\n\033[00m")
def get_watcher_dirs(theme_dirs=None, themes=None, system=None): """ Return sass directories that need to be added to sass watcher. Example: >> get_watcher_dirs('/edx/app/edx-platform/themes', ['red-theme']) [ 'common/static', 'common/static/sass', 'lms/static/sass', 'lms/static/sass/partials', '/edx/app/edxapp/edx-platform/themes/red-theme/lms/static/sass', '/edx/app/edxapp/edx-platform/themes/red-theme/lms/static/sass/partials', 'cms/static/sass', 'cms/static/sass/partials', '/edx/app/edxapp/edx-platform/themes/red-theme/cms/static/sass/partials', ] >> get_watcher_dirs('/edx/app/edx-platform/themes', ['red-theme'], lms) [ 'common/static', 'common/static/sass', 'lms/static/sass', 'lms/static/sass/partials', '/edx/app/edxapp/edx-platform/themes/red-theme/lms/static/sass', '/edx/app/edxapp/edx-platform/themes/red-theme/lms/static/sass/partials', ] Parameters: theme_dirs (list): list of theme base directories. themes (list): list containing names of themes. system (str): the system for which the assets are watched. Returns: (list): dirs that need to be added to sass watchers. """ dirs = [] dirs.extend(COMMON_LOOKUP_PATHS) systems = list(system) if system else ALL_SYSTEMS if theme_dirs and themes: # Register sass watchers for all the given themes themes = get_theme_paths(themes=themes, theme_dirs=theme_dirs) for theme in themes: system_dirs = [] for sys in systems: system_dirs.extend(get_sass_directories(sys, theme)) for _dir in system_dirs: dirs.append(_dir['sass_source_dir']) dirs.extend(_dir['lookup_paths']) # Register sass watchers for systems system_dirs = [] for sys in systems: system_dirs.extend(get_sass_directories(sys)) for _dir in system_dirs + get_common_sass_directories(): dirs.append(_dir['sass_source_dir']) dirs.extend(_dir['lookup_paths']) # remove duplicates dirs = list(set(dirs)) return dirs