Merge "Added naive method to check if object already exists"
This commit is contained in:
commit
72c6adde38
@ -852,7 +852,7 @@ class Model(object):
|
|||||||
return cache.get(riak_obj.key)
|
return cache.get(riak_obj.key)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_dict(cls, key, data=None):
|
def _pre_from_dict_check(cls, key, data=None):
|
||||||
if isinstance(key, dict) and data is None:
|
if isinstance(key, dict) and data is None:
|
||||||
data = key
|
data = key
|
||||||
try:
|
try:
|
||||||
@ -866,6 +866,11 @@ class Model(object):
|
|||||||
if key in cls._c.obj_cache:
|
if key in cls._c.obj_cache:
|
||||||
raise DBLayerException("Object already exists in cache"
|
raise DBLayerException("Object already exists in cache"
|
||||||
" cannot create second")
|
" cannot create second")
|
||||||
|
return key, data
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_dict(cls, key, data=None):
|
||||||
|
key, data = cls._pre_from_dict_check(key, data)
|
||||||
data['key'] = key
|
data['key'] = key
|
||||||
|
|
||||||
with cls._c.obj_cache._lock:
|
with cls._c.obj_cache._lock:
|
||||||
|
@ -828,6 +828,18 @@ class Resource(Model):
|
|||||||
|
|
||||||
updated = IndexedField(StrInt)
|
updated = IndexedField(StrInt)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _pre_from_dict_check(cls, key, data=None):
|
||||||
|
# NOTE(jnowak): it's a bit naive implementation, we will
|
||||||
|
# introduce something smarter instead based on conflict
|
||||||
|
# resolution.
|
||||||
|
ret = super(Resource, cls)._pre_from_dict_check(key, data)
|
||||||
|
robj = cls.bucket.get(key)
|
||||||
|
if robj.exists:
|
||||||
|
raise DBLayerException("Object already exists in "
|
||||||
|
"database cannot create second")
|
||||||
|
return ret
|
||||||
|
|
||||||
def _connect_single(self, other_inputs, other_name, my_name):
|
def _connect_single(self, other_inputs, other_name, my_name):
|
||||||
if isinstance(other_name, (list, tuple)):
|
if isinstance(other_name, (list, tuple)):
|
||||||
# XXX: could be paralelized
|
# XXX: could be paralelized
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
import base
|
import base
|
||||||
from solar.core import resource
|
from solar.core import resource
|
||||||
from solar.core import signals
|
from solar.core import signals
|
||||||
|
from solar.dblayer.model import clear_cache
|
||||||
|
from solar.dblayer.model import DBLayerException
|
||||||
|
|
||||||
|
|
||||||
class TestResource(base.BaseResourceTest):
|
class TestResource(base.BaseResourceTest):
|
||||||
@ -112,6 +114,35 @@ input:
|
|||||||
sample1.delete()
|
sample1.delete()
|
||||||
self.assertEqual(sample2.args['value'], 0)
|
self.assertEqual(sample2.args['value'], 0)
|
||||||
|
|
||||||
|
def test_double_create(self):
|
||||||
|
sample_meta_dir = self.make_resource_meta("""
|
||||||
|
id: sample
|
||||||
|
handler: ansible
|
||||||
|
version: 1.0.0
|
||||||
|
input:
|
||||||
|
value:
|
||||||
|
schema: int
|
||||||
|
value: 0
|
||||||
|
""")
|
||||||
|
|
||||||
|
self.create_resource('sample1', sample_meta_dir,
|
||||||
|
{'value': 1})
|
||||||
|
with self.assertRaisesRegexp(
|
||||||
|
DBLayerException,
|
||||||
|
"Object already exists in cache cannot create second"
|
||||||
|
):
|
||||||
|
self.create_resource('sample1', sample_meta_dir,
|
||||||
|
{'value': 1})
|
||||||
|
|
||||||
|
clear_cache()
|
||||||
|
|
||||||
|
with self.assertRaisesRegexp(
|
||||||
|
DBLayerException,
|
||||||
|
"Object already exists in database cannot create second"
|
||||||
|
):
|
||||||
|
self.create_resource('sample1', sample_meta_dir,
|
||||||
|
{'value': 1})
|
||||||
|
|
||||||
def test_computable_input(self):
|
def test_computable_input(self):
|
||||||
"""Test that connection removed with resource."""
|
"""Test that connection removed with resource."""
|
||||||
sample_meta_dir = self.make_resource_meta("""
|
sample_meta_dir = self.make_resource_meta("""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user