private String checkContext(String param, Context context) { Object var = context.get(param); if (var != null) { return (String) var; } return param; }
public void registerFilter(Filter filter) { context.registerFilter(filter); }
public void registerFunction(ELFunctionDefinition function) { context.registerFunction(function); }
public void leaveScope() { Context parent = context.getParent(); scopeDepth--; if (parent != null) { parent.addDependencies(context.getDependencies()); context = parent; } }
public void addResolvedExpression(String expression) { resolvedExpressions.add(expression); if (getParent() != null) { getParent().addResolvedExpression(expression); } }
public void addResolvedFunction(String function) { resolvedFunctions.add(function); if (getParent() != null) { getParent().addResolvedFunction(function); } }
@Test public void itRecursivelyAddsValuesUpTheContextChain() { Context child = new Context(context); child.addResolvedValue(RESOLVED_VALUE); child.addResolvedFunction(RESOLVED_FUNCTION); child.addResolvedExpression(RESOLVED_EXPRESSION); assertThat(context.getResolvedValues()).contains(RESOLVED_VALUE); assertThat(context.getResolvedFunctions()).contains(RESOLVED_FUNCTION); assertThat(context.getResolvedExpressions()).contains(RESOLVED_EXPRESSION); }
@Test public void itSupportsListAppendFunc() throws Exception { context.put("show_count", Lists.newArrayList("foo")); context.put("show", "bar"); TagNode tagNode = (TagNode) fixture("set-list-append"); tag.interpret(tagNode, interpreter); List<String> thelist = (List<String>) context.get("show_count"); assertThat(thelist).containsExactly("foo", "bar"); }
interpreter.getContext().pushFromStack(templateFile, tagNode.getLineNumber(), tagNode.getStartPosition()); } catch (FromTagCycleException e) { interpreter.addError(new TemplateError(ErrorType.WARNING, ErrorReason.EXCEPTION, ErrorItem.TAG, Object val = child.getContext().getGlobalMacro(importMapping.getKey()); interpreter.getContext().addGlobalMacro((MacroFunction) val); } else { val = child.getContext().get(importMapping.getKey()); interpreter.getContext().put(importMapping.getValue(), val); interpreter.getContext().popFromStack();
@Before public void setup() { validationFilter = new ValidationFilter(); ELFunctionDefinition validationFunction = new ELFunctionDefinition("", "validation_test", ValidationModeTest.class, "validationTestFunction"); jinjava = new Jinjava(); jinjava.getGlobalContext().registerFilter(validationFilter); jinjava.getGlobalContext().registerFunction(validationFunction); interpreter = jinjava.newInterpreter(); context = interpreter.getContext(); validatingInterpreter = new JinjavaInterpreter(jinjava, context, JinjavaConfig.newBuilder().withValidationMode(true).build()); JinjavaInterpreter.pushCurrent(interpreter); }
interpreter.getContext().getImportPathStack().push(path, tagNode.getLineNumber(), tagNode.getStartPosition()); } catch (ImportTagCycleException e) { interpreter.addError(new TemplateError(ErrorType.WARNING, ErrorReason.EXCEPTION, ErrorItem.TAG, interpreter.getContext().addDependency("coded_files", templateFile); try { String template = interpreter.getResource(templateFile); Map<String, Object> childBindings = child.getContext().getSessionBindings(); for (Map.Entry<String, MacroFunction> macro : child.getContext().getGlobalMacros().entrySet()) { childBindings.put(macro.getKey(), macro.getValue()); interpreter.getContext().put(contextVar, childBindings);
@Test public void bubbleUpDependenciesFromLowerScope() { String dependencyType = "foo"; String dependencyIdentifier = "123"; interpreter.enterScope(); interpreter.getContext().addDependency(dependencyType, dependencyIdentifier); assertThat(interpreter.getContext().getDependencies().get(dependencyType)).contains(dependencyIdentifier); interpreter.leaveScope(); assertThat(interpreter.getContext().getDependencies().get(dependencyType)).contains(dependencyIdentifier); }
@Before public void setup() { Jinjava jinjava = new Jinjava(); jinjava.setResourceLocator(new ResourceLocator() { @Override public String getString(String fullName, Charset encoding, JinjavaInterpreter interpreter) throws IOException { return Resources.toString( Resources.getResource(String.format("tags/macrotag/%s", fullName)), StandardCharsets.UTF_8); } }); context = new Context(); interpreter = new JinjavaInterpreter(jinjava, context, jinjava.getGlobalConfig()); JinjavaInterpreter.pushCurrent(interpreter); context.put("padding", 42); }
@Override public Object doEvaluate(Map<String, Object> argMap, Map<String, Object> kwargMap, List<Object> varArgs) { JinjavaInterpreter interpreter = JinjavaInterpreter.getCurrent(); try (InterpreterScopeClosable c = interpreter.enterScope()) { for (Map.Entry<String, Object> scopeEntry : localContextScope.getScope().entrySet()) { if (scopeEntry.getValue() instanceof MacroFunction) { interpreter.getContext().addGlobalMacro((MacroFunction) scopeEntry.getValue()); } else { interpreter.getContext().put(scopeEntry.getKey(), scopeEntry.getValue()); } } // named parameters for (Map.Entry<String, Object> argEntry : argMap.entrySet()) { interpreter.getContext().put(argEntry.getKey(), argEntry.getValue()); } // parameter map interpreter.getContext().put("kwargs", kwargMap); // varargs list interpreter.getContext().put("varargs", varArgs); LengthLimitingStringBuilder result = new LengthLimitingStringBuilder(interpreter.getConfig().getMaxOutputSize()); for (Node node : content) { result.append(node.render(interpreter)); } return result.toString(); } }
private Jinjava createJinjaRenderer(boolean failOnUnknownTokens, ObjectMapper pipelineTemplateObjectMapper, Front50Service front50Service, List<Tag> jinjaTags) { Jinjava jinja = new Jinjava(buildJinjavaConfig(failOnUnknownTokens)); jinja.setResourceLocator(new NoopResourceLocator()); jinja.getGlobalContext().registerTag(new ModuleTag(this, pipelineTemplateObjectMapper)); jinja.getGlobalContext().registerTag(new PipelineIdTag(front50Service)); jinja.getGlobalContext().registerTag(new StrategyIdTag(front50Service)); if (jinjaTags != null) { jinjaTags.forEach(tag -> jinja.getGlobalContext().registerTag(tag)); } jinja.getGlobalContext().registerFilter(new FriggaFilter()); jinja.getGlobalContext().registerFilter(new JsonFilter(pipelineTemplateObjectMapper)); jinja.getGlobalContext().registerFilter(new Base64Filter(this)); jinja.getGlobalContext().registerFilter(new MaxFilter()); jinja.getGlobalContext().registerFilter(new MinFilter()); return jinja; }
@Override public Method resolveFunction(String prefix, String localName) { final Context context = JinjavaInterpreter.getCurrent().getContext(); MacroFunction macroFunction = context.getGlobalMacro(localName); if (macroFunction != null) { return AbstractCallableMethod.EVAL_METHOD; } final String functionName = buildFunctionName(prefix, localName); if (context.isFunctionDisabled(functionName)) { throw new DisabledException(functionName); } if (map.containsKey(functionName)) { context.addResolvedFunction(functionName); } return map.get(functionName); }
public InterpreterScopeClosable enterScope(Map<Context.Library, Set<String>> disabled) { context = new Context(context, null, disabled); scopeDepth++; return new InterpreterScopeClosable(); }
Object value = null; interpreter.getContext().addResolvedValue(propertyName); ErrorItem item = ErrorItem.PROPERTY; } else if (propertyName.startsWith(ExtendedParser.FILTER_PREFIX)) { item = ErrorItem.FILTER; value = interpreter.getContext().getFilter(StringUtils.substringAfter(propertyName, ExtendedParser.FILTER_PREFIX)); } else if (propertyName.startsWith(ExtendedParser.EXPTEST_PREFIX)) { item = ErrorItem.EXPRESSION_TEST; value = interpreter.getContext().getExpTest(StringUtils.substringAfter(propertyName, ExtendedParser.EXPTEST_PREFIX)); } else { if (base == null) {
public void addResolvedValue(String value) { resolvedValues.add(value); if (getParent() != null) { getParent().addResolvedValue(value); } }
@Test public void itHasIncludesReferenceInContext() throws Exception { RenderResult renderResult = jinjava.renderForResult(Resources.toString(Resources.getResource("tags/includetag/include-tag-dependencies.html"), StandardCharsets.UTF_8), new HashMap<String, Object>()); SetMultimap<String, String> dependencies = renderResult.getContext().getDependencies(); assertThat(dependencies.size()).isEqualTo(2); assertThat(dependencies.get("coded_files")).isNotEmpty(); assertThat(dependencies.get("coded_files").contains("{% include \"tags/includetag/hello.html\" %}")); assertThat(dependencies.get("coded_files").contains("{% include \"tags/includetag/cat.html\" %}")); }