Source code for allensdk.brain_observatory.ecephys.ecephys_project_api.utilities

import copy as cp

from jinja2 import Environment, BaseLoader, DictLoader


[docs]def macros(): return { "macros": """ {%- macro comma_sep(data, quote=False) -%} {%- for datum in data -%} {% if quote%}\'{%endif -%} {{datum}} {%- if quote %}\'{% endif %} {% if not loop.last %},{% endif %} {%- endfor -%} {%- endmacro -%} {%- macro str(x) -%} {{- x ~ "" -}} {%- endmacro -%} """ }
[docs]def postgres_macros(): return { "postgres_macros": """ {% import 'macros' as m %} {% macro optional_contains(key, data, quote=False) %} {% if data is not none -%} and {{key}} in ({{m.comma_sep(data, quote)}}) {% endif %} {% endmacro %} {% macro optional_equals(key, value) %} {% if value is not none -%} and {{key}} = {{value}} {% endif %} {% endmacro %} {% macro optional_not_null(key, value=True) %} {% if value is not none -%} and {{key}} is {{- ' not ' if value -}} null {% endif %} {% endmacro %} {% macro optional_le(key, value) %} {% if value is not none -%} and {{key}} <= {{value}} {% endif %} {% endmacro %} {% macro optional_ge(key, value) %} {% if value is not none -%} and {{key}} >= {{value}} {% endif %} {% endmacro %} """, "macros": macros()["macros"] }
[docs]def rma_macros(): return { "rma_macros": """ {% import 'macros' as m %} {% macro optional_contains(key, data, quote=False) -%} {%- if data is not none %}[{{key}}$in{{m.comma_sep(data,quote)}}]{% endif -%} {%- endmacro -%} """, "macros": macros()["macros"] }
[docs]def build_and_execute(query, base=None, engine=None, **kwargs): env = build_environment({"__tmp__": query}, base=base) return execute_templated(env, "__tmp__", engine=engine, **kwargs)
[docs]def build_environment(template_strings, base=None): if base is None: base = {} else: base = cp.deepcopy(base) base.update(template_strings) return Environment(loader=DictLoader(base), lstrip_blocks=True, trim_blocks=True)
[docs]def execute_templated(environment, name, engine, engine_kwargs=None, **kwargs): if engine_kwargs is None: engine_kwargs = {} template = environment.get_template(name) rendered = template.render(**kwargs) return engine(rendered)