예제 #1
0
파일: utils.py 프로젝트: Ofey521/AMP
def get_custom_functions():
    """
    Return a dict of function names, to be used from inside SASS
    """
    def get_setting(*args):
        try:
            return getattr(settings, args[0])
        except AttributeError as e:
            raise TemplateSyntaxError(str(e))

    if hasattr(get_custom_functions, '_custom_functions'):
        return get_custom_functions._custom_functions
    get_custom_functions._custom_functions = {
        sass.SassFunction('get-setting', ('key', ), get_setting)
    }
    for name, func in getattr(settings, 'SASS_PROCESSOR_CUSTOM_FUNCTIONS',
                              {}).items():
        try:
            if isinstance(func, str):
                func = import_string(func)
        except Exception as e:
            raise TemplateSyntaxError(str(e))
        else:
            if not inspect.isfunction(func):
                raise TemplateSyntaxError(
                    "{} is not a Python function".format(func))
            func_args = inspect.getfullargspec(func).args
            sass_func = sass.SassFunction(name, func_args, func)
            get_custom_functions._custom_functions.add(sass_func)
    return get_custom_functions._custom_functions
예제 #2
0
def createStyles():
    # Compile site specific minified css
    sass.compile(dirname=('static/scss', 'static/css'),
                 output_style='compressed',
                 custom_functions={
                     sass.SassFunction('mainC', (),
                                       lambda: siteconfig.MAIN_COLOR),
                     sass.SassFunction('secC', (),
                                       lambda: siteconfig.SEC_COLOR),
                     sass.SassFunction('dm', (), lambda: siteconfig.DARK_MODE),
                 })
    # Compile site specific minified css NIAAID
    # in main.html create matching rules and link to styles directory
    sass.compile(dirname=('static/scss', 'static/css/niaid'),
                 output_style='compressed',
                 custom_functions={
                     sass.SassFunction('mainC', (),
                                       lambda: siteconfigniaid.MAIN_COLOR),
                     sass.SassFunction('secC', (),
                                       lambda: siteconfigniaid.SEC_COLOR),
                     sass.SassFunction('dm', (),
                                       lambda: siteconfigniaid.DARK_MODE),
                 })
    sass.compile(dirname=('static/scss', 'static/css/outbreak'),
                 output_style='compressed',
                 custom_functions={
                     sass.SassFunction('mainC', (),
                                       lambda: siteconfigoutbreak.MAIN_COLOR),
                     sass.SassFunction('secC', (),
                                       lambda: siteconfigoutbreak.SEC_COLOR),
                     sass.SassFunction('dm', (),
                                       lambda: siteconfigoutbreak.DARK_MODE),
                 })
예제 #3
0
 def test_sigature(self):
     sf = sass.SassFunction(  # pragma: no branch (doesn't run lambda)
         'func-name',
         ('$a', '$bc', '$d'),
         lambda a, bc, d: None
     )
     assert 'func-name($a, $bc, $d)' == sf.signature
     assert sf.signature == str(sf)
예제 #4
0
def returns_map():
    return sass.SassMap([('foo', 'bar')])


def identity(x):
    """This has the side-effect of bubbling any exceptions we failed to process
    in C land

    """
    import sys  # noqa
    return x


custom_functions = frozenset([
    sass.SassFunction('raises', (), raises),
    sass.SassFunction('returns_warning', (), returns_warning),
    sass.SassFunction('returns_error', (), returns_error),
    sass.SassFunction('returns_unknown', (), returns_unknown),
    sass.SassFunction('returns_true', (), returns_true),
    sass.SassFunction('returns_false', (), returns_false),
    sass.SassFunction('returns_none', (), returns_none),
    sass.SassFunction('returns_unicode', (), returns_unicode),
    sass.SassFunction('returns_bytes', (), returns_bytes),
    sass.SassFunction('returns_number', (), returns_number),
    sass.SassFunction('returns_color', (), returns_color),
    sass.SassFunction('returns_comma_list', (), returns_comma_list),
    sass.SassFunction('returns_space_list', (), returns_space_list),
    sass.SassFunction('returns_bracketed_list', (), returns_bracketed_list),
    sass.SassFunction('returns_py_dict', (), returns_py_dict),
    sass.SassFunction('returns_map', (), returns_map),
예제 #5
0
 def test_sigature(self):
     sf = sass.SassFunction('func-name', ('$a', '$bc', '$d'),
                            lambda a, bc, d: None)
     self.assertEqual('func-name($a, $bc, $d)', sf.signature)
     self.assertEqual(sf.signature, str(sf))