db: Remove use of Query.get() method

Actually, not really. We just remove the warning. Apparently it's not
used here.

Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
Change-Id: Ie6c45772247850d40b0cf4b135e5a3028b1758af
This commit is contained in:
Stephen Finucane 2023-06-18 17:15:17 +01:00
parent 9d2cc71975
commit 15f5e3f08a
7 changed files with 64 additions and 77 deletions

View File

@ -146,7 +146,7 @@ def soft_delete_aware_query(context, *args, **kwargs):
def raw_template_get(context, template_id):
result = context.session.query(models.RawTemplate).get(template_id)
result = context.session.get(models.RawTemplate, template_id)
if not result:
raise exception.NotFound(_('raw template with id %s not found') %
@ -208,7 +208,7 @@ def raw_template_files_create(context, values):
def raw_template_files_get(context, files_id):
result = context.session.query(models.RawTemplateFiles).get(files_id)
result = context.session.get(models.RawTemplateFiles, files_id)
if not result:
raise exception.NotFound(
_("raw_template_files with files_id %d not found") %
@ -218,12 +218,14 @@ def raw_template_files_get(context, files_id):
def resource_get(context, resource_id, refresh=False, refresh_data=False,
eager=True):
query = context.session.query(models.Resource)
query = query.options(orm.joinedload("data"))
options = [orm.joinedload("data")]
if eager:
query = query.options(orm.joinedload("rsrc_prop_data"))
options.append(orm.joinedload("rsrc_prop_data"))
result = context.session.get(
models.Resource, resource_id,
options=options,
)
result = query.get(resource_id)
if not result:
raise exception.NotFound(_("resource with id %s not found") %
resource_id)
@ -316,19 +318,19 @@ def _try_resource_update(context, resource_id, values, atomic_key,
def resource_update_and_save(context, resource_id, values):
resource = context.session.query(models.Resource).get(resource_id)
resource = context.session.get(models.Resource, resource_id)
update_and_save(context, resource, values)
def resource_delete(context, resource_id):
session = context.session
with session.begin(subtransactions=True):
resource = session.query(models.Resource).get(resource_id)
resource = session.get(models.Resource, resource_id)
if resource:
session.delete(resource)
if resource.attr_data_id is not None:
attr_prop_data = session.query(
models.ResourcePropertiesData).get(resource.attr_data_id)
attr_prop_data = session.get(
models.ResourcePropertiesData, resource.attr_data_id)
session.delete(attr_prop_data)
@ -361,9 +363,9 @@ def resource_attr_id_set(context, resource_id, atomic_key, attr_id):
def resource_attr_data_delete(context, resource_id, attr_id):
session = context.session
with session.begin():
resource = session.query(models.Resource).get(resource_id)
attr_prop_data = session.query(
models.ResourcePropertiesData).get(attr_id)
resource = session.get(models.Resource, resource_id)
attr_prop_data = session.get(
models.ResourcePropertiesData, attr_id)
if resource:
resource.update({'attr_data_id': None})
if attr_prop_data:
@ -474,12 +476,9 @@ def resource_data_set(context, resource_id, key, value, redact=False):
def resource_exchange_stacks(context, resource_id1, resource_id2):
query = context.session.query(models.Resource)
session = query.session
with session.begin():
res1 = query.get(resource_id1)
res2 = query.get(resource_id2)
with context.session.begin():
res1 = context.session.get(models.Resource, resource_id1)
res2 = context.session.get(models.Resource, resource_id2)
res1.stack, res2.stack = res2.stack, res1.stack
@ -595,8 +594,8 @@ def resource_prop_data_create(context, values):
def resource_prop_data_get(context, resource_prop_data_id):
result = context.session.query(models.ResourcePropertiesData).get(
resource_prop_data_id)
result = context.session.get(
models.ResourcePropertiesData, resource_prop_data_id)
if result is None:
raise exception.NotFound(
_('ResourcePropertiesData with id %s not found') %
@ -625,10 +624,10 @@ def stack_get_by_name(context, stack_name):
def stack_get(context, stack_id, show_deleted=False, eager_load=True):
query = context.session.query(models.Stack)
options = ()
if eager_load:
query = query.options(orm.joinedload("raw_template"))
result = query.get(stack_id)
options = (orm.joinedload("raw_template"),)
result = context.session.get(models.Stack, stack_id, options=options)
deleted_ok = show_deleted or context.show_deleted
if result is None or result.deleted_at is not None and not deleted_ok:
@ -696,7 +695,7 @@ def _paginate_query(context, query, model, limit=None, sort_keys=None,
model_marker = None
if marker:
model_marker = context.session.query(model).get(marker)
model_marker = context.session.get(model, marker)
try:
query = utils.paginate_query(query, model, limit, sort_keys,
model_marker, sort_dir)
@ -885,7 +884,7 @@ def _is_duplicate_error(exc):
exception_checker=_is_duplicate_error)
def stack_lock_create(context, stack_id, engine_id):
with db_context.writer.independent.using(context) as session:
lock = session.query(models.StackLock).get(stack_id)
lock = session.get(models.StackLock, stack_id)
if lock is not None:
return lock.engine_id
session.add(models.StackLock(stack_id=stack_id, engine_id=engine_id))
@ -893,7 +892,7 @@ def stack_lock_create(context, stack_id, engine_id):
def stack_lock_get_engine_id(context, stack_id):
with db_context.reader.independent.using(context) as session:
lock = session.query(models.StackLock).get(stack_id)
lock = session.get(models.StackLock, stack_id)
if lock is not None:
return lock.engine_id
@ -916,7 +915,7 @@ def persist_state_and_release_lock(context, stack_id, engine_id, values):
def stack_lock_steal(context, stack_id, old_engine_id, new_engine_id):
with db_context.writer.independent.using(context) as session:
lock = session.query(models.StackLock).get(stack_id)
lock = session.get(models.StackLock, stack_id)
rows_affected = session.query(
models.StackLock
).filter_by(stack_id=stack_id, engine_id=old_engine_id
@ -984,7 +983,7 @@ def user_creds_create(context):
def user_creds_get(context, user_creds_id):
db_result = context.session.query(models.UserCreds).get(user_creds_id)
db_result = context.session.get(models.UserCreds, user_creds_id)
if db_result is None:
return None
# Return a dict copy of DB results, do not decrypt details into db_result
@ -1000,7 +999,7 @@ def user_creds_get(context, user_creds_id):
@db_utils.retry_on_stale_data_error
def user_creds_delete(context, user_creds_id):
creds = context.session.query(models.UserCreds).get(user_creds_id)
creds = context.session.get(models.UserCreds, user_creds_id)
if not creds:
raise exception.NotFound(
_('Attempt to delete user creds with id '
@ -1049,7 +1048,7 @@ def _events_paginate_query(context, query, model, limit=None, sort_keys=None,
model_marker = None
if marker:
# not to use context.session.query(model).get(marker), because
# not to use context.session.get(model, marker), because
# user can only see the ID(column 'uuid') and the ID as the marker
model_marker = context.session.query(
model).filter_by(uuid=marker).first()
@ -1102,15 +1101,14 @@ def _all_backup_stack_ids(context, stack_id):
included if the initial ID passed in is for a backup stack. The initial ID
passed in is never included in the output.
"""
query = context.session.query(models.Stack)
stack = query.get(stack_id)
stack = context.session.get(models.Stack, stack_id)
if stack is None:
LOG.error('Stack %s not found', stack_id)
return
is_backup = stack.name.endswith('*')
if is_backup:
main = query.get(stack.owner_id)
main = context.session.get(models.Stack, stack.owner_id)
if main is None:
LOG.error('Main stack for backup "%s" %s not found',
stack.name, stack_id)
@ -1120,7 +1118,7 @@ def _all_backup_stack_ids(context, stack_id):
if backup_id != stack_id:
yield backup_id
else:
q_backup = query.filter(sqlalchemy.or_(
q_backup = context.session.query(models.Stack).filter(sqlalchemy.or_(
models.Stack.tenant == context.tenant_id,
models.Stack.stack_user_project_id == context.tenant_id))
q_backup = q_backup.filter_by(name=stack.name + '*')
@ -1208,7 +1206,7 @@ def software_config_create(context, values):
def software_config_get(context, config_id):
result = context.session.query(models.SoftwareConfig).get(config_id)
result = context.session.get(models.SoftwareConfig, config_id)
if (result is not None and context is not None and not context.is_admin and
result.tenant != context.tenant_id):
result = None
@ -1252,8 +1250,7 @@ def software_deployment_create(context, values):
def software_deployment_get(context, deployment_id):
result = context.session.query(
models.SoftwareDeployment).get(deployment_id)
result = context.session.get(models.SoftwareDeployment, deployment_id)
if (result is not None and context is not None and not context.is_admin and
context.tenant_id not in (result.tenant,
result.stack_user_project_id)):
@ -1299,7 +1296,7 @@ def snapshot_create(context, values):
def snapshot_get(context, snapshot_id):
result = context.session.query(models.Snapshot).get(snapshot_id)
result = context.session.get(models.Snapshot, snapshot_id)
if (result is not None and context is not None and
context.tenant_id != result.tenant):
result = None
@ -1363,7 +1360,7 @@ def service_delete(context, service_id, soft_delete=True):
def service_get(context, service_id):
result = context.session.query(models.Service).get(service_id)
result = context.session.get(models.Service, service_id)
if result is None:
raise exception.EntityNotFound(entity='Service', name=service_id)
return result
@ -1648,8 +1645,8 @@ def sync_point_create(context, values):
def sync_point_get(context, entity_id, traversal_id, is_update):
entity_id = str(entity_id)
return context.session.query(models.SyncPoint).get(
(entity_id, traversal_id, is_update)
return context.session.get(
models.SyncPoint, (entity_id, traversal_id, is_update),
)
@ -1979,7 +1976,7 @@ def _get_batch(session, ctxt, query, model, batch_size=50):
def reset_stack_status(context, stack_id, stack=None):
session = context.session
if stack is None:
stack = session.query(models.Stack).get(stack_id)
stack = session.get(models.Stack, stack_id)
if stack is None:
raise exception.NotFound(_('Stack with id %s not found') % stack_id)

View File

@ -226,15 +226,14 @@ class SqlAlchemyTest(common.HeatTestCase):
model = mock.Mock()
marker = mock.Mock()
mock_query_object = mock.Mock()
mock_query_object.get.return_value = 'real_marker'
result = 'real_marker'
ctx = mock.MagicMock()
ctx.session.query.return_value = mock_query_object
ctx.session.get.return_value = result
db_api._paginate_query(ctx, query, model, marker=marker)
mock_query_object.get.assert_called_once_with(marker)
ctx.session.get.assert_called_once_with(model, marker)
args, _ = mock_paginate_query.call_args
self.assertIn('real_marker', args)
self.assertIn(result, args)
@mock.patch.object(db_api.utils, 'paginate_query')
def test_paginate_query_raises_invalid_sort_key(self, mock_paginate_query):
@ -2264,8 +2263,8 @@ class DBAPIStackTest(common.HeatTestCase):
ctx, tmpl_files[s].files_id))
self.assertIsNotNone(db_api.resource_get(
ctx, resources[s].id))
self.assertIsNotNone(ctx.session.query(
models.Event).get(events[s].id))
self.assertIsNotNone(ctx.session.get(
models.Event, events[s].id))
self.assertIsNotNone(ctx.session.query(
models.ResourcePropertiesData).filter_by(
id=resources[s].rsrc_prop_data.id).first())
@ -2286,8 +2285,8 @@ class DBAPIStackTest(common.HeatTestCase):
self.assertEqual([],
db_api.event_get_all_by_stack(ctx,
stacks[s].id))
self.assertIsNone(ctx.session.query(
models.Event).get(events[s].id))
self.assertIsNone(ctx.session.get(
models.Event, events[s].id))
self.assertIsNone(ctx.session.query(
models.ResourcePropertiesData).filter_by(
id=resources[s].rsrc_prop_data.id).first())
@ -2926,7 +2925,7 @@ class DBAPIEventTest(common.HeatTestCase):
def test_event_create(self):
stack = create_stack(self.ctx, self.template, self.user_creds)
event = create_event(self.ctx, stack_id=stack.id)
ret_event = self.ctx.session.query(models.Event).get(event.id)
ret_event = self.ctx.session.get(models.Event, event.id)
self.assertIsNotNone(ret_event)
self.assertEqual(stack.id, ret_event.stack_id)
self.assertEqual('create', ret_event.resource_action)

View File

@ -175,16 +175,16 @@ class EventTest(EventCommon):
# rpd1 should still exist since that is still referred to by
# the resource. rpd2 shoud have been deleted along with the
# 2nd event.
self.assertIsNotNone(self.ctx.session.query(
models.ResourcePropertiesData).get(rpd1_id))
self.assertIsNone(self.ctx.session.query(
models.ResourcePropertiesData).get(rpd2_id))
self.assertIsNotNone(self.ctx.session.get(
models.ResourcePropertiesData, rpd1_id))
self.assertIsNone(self.ctx.session.get(
models.ResourcePropertiesData, rpd2_id))
# We didn't purge the last two events, so we ought to have
# kept rsrc_prop_data for both.
self.assertIsNotNone(self.ctx.session.query(
models.ResourcePropertiesData).get(rpd3_id))
self.assertIsNotNone(self.ctx.session.query(
models.ResourcePropertiesData).get(rpd4_id))
self.assertIsNotNone(self.ctx.session.get(
models.ResourcePropertiesData, rpd3_id))
self.assertIsNotNone(self.ctx.session.get(
models.ResourcePropertiesData, rpd4_id))
def test_identifier(self):
event_uuid = 'abc123yc-9f88-404d-a85b-531529456xyz'
@ -244,7 +244,7 @@ class EventTest(EventCommon):
# for test purposes, dress up the event to have the deprecated
# properties_data field populated
e_obj = self.ctx.session.query(models.Event).get(e.id)
e_obj = self.ctx.session.get(models.Event, e.id)
with self.ctx.session.begin():
e_obj['resource_properties'] = {'Time': 'not enough'}
e_obj['rsrc_prop_data'] = None

View File

@ -687,8 +687,8 @@ class ResourceTest(common.HeatTestCase):
'p2': 'good times, good times'}
rpd_obj = rpd_object.ResourcePropertiesData().create_or_update(
self.stack.context, data)
rpd_db_obj = self.stack.context.session.query(
models.ResourcePropertiesData).get(rpd_obj.id)
rpd_db_obj = self.stack.context.session.get(
models.ResourcePropertiesData, rpd_obj.id)
res_obj1 = resource_objects.Resource().create(
self.stack.context,
{'stack_id': self.stack.id,
@ -744,8 +744,7 @@ class ResourceTest(common.HeatTestCase):
res.metadata_set(md)
self.assertFalse(hasattr(res, '_db_res_is_deleted'))
res_obj = self.stack.context.session.query(
models.Resource).get(res.id)
res_obj = self.stack.context.session.get(models.Resource, res.id)
res_obj.update({'action': 'DELETE'})
self.assertRaises(exception.ResourceNotAvailable,

View File

@ -33,8 +33,8 @@ class ResourcePropertiesDataTest(common.HeatTestCase):
def _get_rpd_and_db_obj(self):
rpd_obj = rpd_object.ResourcePropertiesData().create_or_update(
self.ctx, self.data)
db_obj = self.ctx.session.query(
models.ResourcePropertiesData).get(rpd_obj.id)
db_obj = self.ctx.session.get(
models.ResourcePropertiesData, rpd_obj.id)
self.assertEqual(len(self.data), len(db_obj['data']))
return rpd_obj, db_obj

View File

@ -517,8 +517,7 @@ class SignalTest(common.HeatTestCase):
# db resource concurrently, deleting it
# Test exception not re-raised in DELETE case
res_obj = stack.context.session.query(
models.Resource).get(rsrc.id)
res_obj = stack.context.session.get(models.Resource, rsrc.id)
res_obj.update({'action': 'DELETE'})
rsrc._db_res_is_deleted = True
rsrc._handle_signal(details=test_d)

View File

@ -282,13 +282,6 @@ class WarningsFixture(fixtures.Fixture):
category=sqla_exc.SADeprecationWarning,
)
warnings.filterwarnings(
'ignore',
module='heat',
message=r'The Query.get\(\) method is considered legacy ',
category=sqla_exc.SADeprecationWarning,
)
warnings.filterwarnings(
'ignore',
module='heat',