code: def MI_getInstance(self,
                         env,
                         instanceName,
                         propertyList,
                         cimClass):
          # pylint: disable=invalid-name
          
  
          logger = env.get_logger()
          logger.log_debug('CIMProvider MI_getInstance called...')
          keyNames = get_keys_from_class(cimClass)
          plist = None
          if propertyList is not None:
              lkns = [kn.lower() for kn in keyNames]
              props = pywbem.NocaseDict()
              plist = [s.lower() for s in propertyList]
              pklist = plist + lkns
              [props.__setitem__(p.name, p) for p in cimClass.properties.values()
               if p.name.lower() in pklist]
          else:
              props = cimClass.properties
          _strip_quals(props)
          model = pywbem.CIMInstance(classname=instanceName.classname,
                                     properties=props,
                                     path=instanceName)
          for k, v in instanceName.keybindings.items():
              type_ = cimClass.properties[k].type
  
              if type_ != 'reference':
                  v = val = pywbem.tocimobj(_type, v)
              model.__setitem__(k, pywbem.CIMProperty(name=k, type=type_,
                                                      value=v))
  
          rval = self.get_instance(env=env,
                                   model=model,
                                   cim_class=cimClass)
          if self.filter_results:
              filter_instance(rval, plist)
          logger.log_debug('CIMProvider MI_getInstance returning')
          if rval is None:
              raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND, "")
          return rval
docs: Return a specific CIM instance
  
          Implements the WBEM operation GetInstance in terms
          of the get_instance method.  A derived class will not normally
          override this method.