'Return the first result of given context or None if the result doesn\'t
contain any row. Next, convert it to a versioned object.
:param context:
:param kwargs: multiple keys defined by key=value pairs
:return: single object of NeutronDbObject class or None'

@classmethod
def get_object(cls, context, **kwargs):

    lookup_keys = set(kwargs.keys())
    all_keys = itertools.chain([cls.primary_keys], cls.unique_keys)
    if (not any((lookup_keys.issuperset(keys) for keys in all_keys))):
        missing_keys = set(cls.primary_keys).difference(lookup_keys)
        raise o_exc.NeutronPrimaryKeyMissing(object_class=cls.__name__, missing_keys=missing_keys)
    with context.session.begin(subtransactions=True):
        db_obj = obj_db_api.get_object(context, cls.db_model, **cls.modify_fields_to_db(kwargs))
        if db_obj:
            return cls._load_object(context, db_obj)
