e7e9b0a16d
Using associators to retrieve different associated classes is a time expensive operation. The associators can be replaced by direct queries which improve the performance by decreasing the time needed to wait to retrieve the associated classes. Co-Authored-By: Claudiu Belu <cbelu@cloudbasesolutions.com> Change-Id: I779785a02d65ff7e57c1ac41d2de90c7b4b619d7
45 lines
1.8 KiB
Python
45 lines
1.8 KiB
Python
# Copyright 2016 Cloudbase Solutions Srl
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from os_win._i18n import _
|
|
from os_win import exceptions
|
|
|
|
|
|
def get_element_associated_class(conn, class_name, element_instance_id=None,
|
|
element_uuid=None, fields=None):
|
|
"""Returns the objects associated to an element as a list.
|
|
|
|
:param conn: connection to be used to execute the query
|
|
:param class_name: object's class type name to be retrieved
|
|
:param element_instance_id: element class InstanceID
|
|
:param element_uuid: UUID of the element
|
|
:param fields: specific class attributes to be retrieved
|
|
"""
|
|
if element_instance_id:
|
|
instance_id = element_instance_id
|
|
elif element_uuid:
|
|
instance_id = "Microsoft:%s" % element_uuid
|
|
else:
|
|
err_msg = _("Could not get element associated class. Either element "
|
|
"instance id or element uuid must be specified.")
|
|
raise exceptions.WqlException(err_msg)
|
|
fields = ", ".join(fields) if fields else "*"
|
|
return conn.query(
|
|
"SELECT %(fields)s FROM %(class_name)s WHERE InstanceID "
|
|
"LIKE '%(instance_id)s%%'" % {
|
|
'fields': fields,
|
|
'class_name': class_name,
|
|
'instance_id': instance_id})
|