Skip to content

Commit 3fc121f

Browse files
committed
Update request that uses python script with no parameters fails with NullPointerException
Closes #4.
1 parent c065e38 commit 3fc121f

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

src/main/java/org/elasticsearch/script/python/PythonScriptEngineService.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,10 @@ public class PythonExecutableScript implements ExecutableScript {
107107
public PythonExecutableScript(PyCode code, Map<String, Object> vars) {
108108
this.code = code;
109109
this.pyVars = new PyStringMap();
110-
for (Map.Entry<String, Object> entry : vars.entrySet()) {
111-
pyVars.__setitem__(entry.getKey(), Py.java2py(entry.getValue()));
110+
if (vars != null) {
111+
for (Map.Entry<String, Object> entry : vars.entrySet()) {
112+
pyVars.__setitem__(entry.getKey(), Py.java2py(entry.getValue()));
113+
}
112114
}
113115
}
114116

src/test/java/org/elasticsearch/script/python/PythonScriptSearchTests.java

+25-1
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,20 @@
2323
import org.elasticsearch.action.search.SearchType;
2424
import org.elasticsearch.search.sort.SortOrder;
2525
import org.elasticsearch.test.ElasticsearchIntegrationTest;
26+
import org.hamcrest.CoreMatchers;
2627
import org.junit.After;
2728
import org.junit.Test;
2829

2930
import java.util.Arrays;
3031
import java.util.List;
3132
import java.util.Map;
3233

33-
import static org.elasticsearch.client.Requests.*;
34+
import static org.elasticsearch.client.Requests.searchRequest;
3435
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
3536
import static org.elasticsearch.index.query.FilterBuilders.scriptFilter;
3637
import static org.elasticsearch.index.query.QueryBuilders.*;
3738
import static org.elasticsearch.search.builder.SearchSourceBuilder.searchSource;
39+
import static org.hamcrest.CoreMatchers.is;
3840
import static org.hamcrest.Matchers.equalTo;
3941

4042
/**
@@ -205,4 +207,26 @@ public void testCustomScriptBoost() throws Exception {
205207
logger.info(" --> Hit[0] {} Explanation {}", response.getHits().getAt(0).id(), response.getHits().getAt(0).explanation());
206208
logger.info(" --> Hit[1] {} Explanation {}", response.getHits().getAt(1).id(), response.getHits().getAt(1).explanation());
207209
}
210+
211+
/**
212+
* Test case for #4: https://github.com/elasticsearch/elasticsearch-lang-python/issues/4
213+
* Update request that uses python script with no parameters fails with NullPointerException
214+
* @throws Exception
215+
*/
216+
@Test
217+
public void testPythonEmptyParameters() throws Exception {
218+
wipeIndices("test");
219+
createIndex("test");
220+
index("test", "type1", "1", jsonBuilder().startObject().field("myfield", "foo").endObject());
221+
refresh();
222+
223+
client().prepareUpdate("test", "type1", "1").setScriptLang("python").setScript("ctx[\"_source\"][\"myfield\"]=\"bar\"")
224+
.execute().actionGet();
225+
refresh();
226+
227+
Object value = get("test", "type1", "1").getSourceAsMap().get("myfield");
228+
assertThat(value instanceof String, is(true));
229+
230+
assertThat((String) value, CoreMatchers.equalTo("bar"));
231+
}
208232
}

0 commit comments

Comments
 (0)