diff --git a/riak/riak_object.py b/riak/riak_object.py index b4ddabad..2cd9af55 100644 --- a/riak/riak_object.py +++ b/riak/riak_object.py @@ -91,6 +91,11 @@ def set_data(self, data): :rtype: data """ self._data = data + if MD_CTYPE not in self._metadata: + if self._encode_data: + self.set_content_type("application/json") + else: + self.set_content_type("application/octet-stream") return self def get_encoded_data(self): diff --git a/riak/tests/test_all.py b/riak/tests/test_all.py index 6986f54a..0d769554 100644 --- a/riak/tests/test_all.py +++ b/riak/tests/test_all.py @@ -348,6 +348,26 @@ def test_link_walking(self): results = obj.link("bucket", "tag").run() self.assertEqual(len(results), 1) + def test_store_of_missing_object(self): + bucket = self.client.bucket("bucket") + # for json objects + o = bucket.get("nonexistent_key_json") + self.assertEqual(o.exists(), False) + o.set_data({"foo" : "bar"}) + o = o.store() + self.assertEqual(o.get_data(), {"foo" : "bar"}) + self.assertEqual(o.get_content_type(), "application/json") + o.delete() + # for binary objects + o = bucket.get_binary("nonexistent_key_binary") + self.assertEqual(o.exists(), False) + o.set_data("1234567890") + o = o.store() + self.assertEqual(o.get_data(), "1234567890") + self.assertEqual(o.get_content_type(), "application/octet-stream") + o.delete() + + def test_search_integration(self): if SKIP_SEARCH: return True