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
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), })
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)
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),
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))