def object_list(self, obj_type, parent_uuids=None, back_ref_uuids=None, obj_uuids=None, count=False, filters=None, paginate_start=None, paginate_count=None):
    obj_class = self._get_resource_class(obj_type)
    children_fq_names_uuids = []
    ret_marker = None
    anchored_op = True

    def filter_rows(coll_infos, filters=None):
        if ((not coll_infos) or (not filters)):
            return coll_infos
        filtered_infos = {}
        columns = [('prop:%s' % filter_key) for filter_key in filters if (filter_key in obj_class.prop_fields)]
        if (not columns):
            return coll_infos
        rows = self._cassandra_driver.multiget(datastore_api.OBJ_UUID_CF_NAME, list(coll_infos.keys()), columns=columns)
        for (obj_uuid, properties) in list(rows.items()):
            gevent.sleep(0)
            full_match = True
            for (filter_key, filter_values) in list(filters.items()):
                property = ('prop:%s' % filter_key)
                if (property not in properties):
                    full_match = False
                    break
                prop_value = properties[property]
                if isinstance(prop_value, dict):
                    for filter_value in filter_values:
                        try:
                            filter_dict = json.loads(filter_value)
                        except ValueError:
                            continue
                        if (six.viewitems(filter_dict) <= six.viewitems(prop_value)):
                            break
                    else:
                        full_match = False
                        break
                elif (prop_value not in filter_values):
                    full_match = False
                    break
            if full_match:
                filtered_infos[obj_uuid] = coll_infos[obj_uuid]
        return filtered_infos

    def get_fq_name_uuid_list(obj_uuids):
        ret_list = []
        for obj_uuid in obj_uuids:
            try:
                if (obj_type != self.uuid_to_obj_type(obj_uuid)):
                    continue
                obj_fq_name = self.uuid_to_fq_name(obj_uuid)
                ret_list.append((obj_fq_name, obj_uuid))
            except NoIdError:
                pass
        return ret_list
    if parent_uuids:
        if (paginate_start and (paginate_start != '0')):
            start = ('children:%s:%s' % (obj_type, (paginate_start[:(- 1)] + chr((ord(paginate_start[(- 1)]) + 1)))))
            num_columns = paginate_count
        else:
            start = ('children:%s:' % obj_type)
            num_columns = None
        obj_rows = self._cassandra_driver.multiget(datastore_api.OBJ_UUID_CF_NAME, parent_uuids, start=start, finish=('children:%s;' % obj_type), num_columns=num_columns, timestamp=True)

        def filter_rows_parent_anchor(sort=False):
            all_cols = [cols for obj_key in list(obj_rows.keys()) for cols in list(obj_rows[obj_key].items())]
            all_child_infos = {}
            for (col_name, col_val_ts) in all_cols:
                gevent.sleep(0)
                child_uuid = col_name.split(':')[2]
                if (obj_uuids and (child_uuid not in obj_uuids)):
                    continue
                if back_ref_uuids:
                    child_cols = self._cassandra_driver.get(datastore_api.OBJ_UUID_CF_NAME, child_uuid, start='ref:', finish='ref;')
                    child_ref_ids = {col.split(':')[2] for col in (child_cols or [])}
                    if (not (set(back_ref_uuids) & child_ref_ids)):
                        continue
                all_child_infos[child_uuid] = {'uuid': child_uuid, 'tstamp': col_val_ts[1]}
            filt_child_infos = filter_rows(all_child_infos, filters)
            if (not sort):
                ret_child_infos = list(filt_child_infos.values())
            else:
                ret_child_infos = sorted(list(filt_child_infos.values()), key=itemgetter('tstamp'))
            return get_fq_name_uuid_list((r['uuid'] for r in ret_child_infos))
        children_fq_names_uuids.extend(filter_rows_parent_anchor(sort=True))
    elif back_ref_uuids:
        if (paginate_start and (paginate_start != '0')):
            start = ('backref:%s:%s' % (obj_type, (paginate_start[:(- 1)] + chr((ord(paginate_start[(- 1)]) + 1)))))
            num_columns = paginate_count
        else:
            start = ('backref:%s:' % obj_type)
            num_columns = None
        obj_rows = self._cassandra_driver.multiget(datastore_api.OBJ_UUID_CF_NAME, back_ref_uuids, start=start, finish=('backref:%s;' % obj_type), num_columns=num_columns, timestamp=True)

        def filter_rows_backref_anchor():
            all_cols = [cols for obj_key in list(obj_rows.keys()) for cols in list(obj_rows[obj_key].items())]
            all_backref_infos = {}
            for (col_name, col_val_ts) in all_cols:
                gevent.sleep(0)
                backref_uuid = col_name.split(':')[2]
                if (obj_uuids and (backref_uuid not in obj_uuids)):
                    continue
                all_backref_infos[backref_uuid] = {'uuid': backref_uuid, 'tstamp': col_val_ts[1]}
            filt_backref_infos = filter_rows(all_backref_infos, filters)
            return get_fq_name_uuid_list((r['uuid'] for r in list(filt_backref_infos.values())))
        children_fq_names_uuids.extend(filter_rows_backref_anchor())
    else:
        anchored_op = False
        if obj_uuids:

            def filter_rows_object_list():
                all_obj_infos = {}
                marker = None
                read_in = 0
                start_idx = 0
                if (paginate_start and (paginate_start != '0')):
                    try:
                        start_idx = (obj_uuids.index(paginate_start) + 1)
                    except ValueError:
                        start_idx = len(obj_uuids)
                for obj_uuid in obj_uuids[start_idx:]:
                    all_obj_infos[obj_uuid] = None
                    read_in += 1
                    if (paginate_start and (read_in >= paginate_count)):
                        marker = obj_uuid
                        break
                filt_obj_infos = filter_rows(all_obj_infos, filters)
                return (get_fq_name_uuid_list(list(filt_obj_infos.keys())), marker)
            (filtered_rows, ret_marker) = filter_rows_object_list()
            children_fq_names_uuids.extend(filtered_rows)
        else:
            if (paginate_start and (paginate_start != '0')):
                start = (paginate_start[:(- 1)] + chr((ord(paginate_start[(- 1)]) + 1)))
            else:
                start = ''
            cols = self._cassandra_driver.xget(datastore_api.OBJ_FQ_NAME_CF_NAME, ('%s' % obj_type), start=start)

            def filter_rows_no_anchor():
                marker = None
                all_obj_infos = {}
                read_in = 0
                for (col_name, _) in cols:
                    gevent.sleep(0)
                    col_name_arr = utils.decode_string(col_name).split(':')
                    obj_uuid = col_name_arr[(- 1)]
                    all_obj_infos[obj_uuid] = (col_name_arr[:(- 1)], obj_uuid)
                    read_in += 1
                    if (paginate_start and (read_in >= paginate_count)):
                        marker = col_name
                        break
                filt_obj_infos = filter_rows(all_obj_infos, filters)
                return (list(filt_obj_infos.values()), marker)
            if (count and (not filters)):
                return (True, sum((1 for col in cols)), None)
            (filtered_rows, ret_marker) = filter_rows_no_anchor()
            children_fq_names_uuids.extend(filtered_rows)
    if count:
        return (True, len(children_fq_names_uuids), None)
    if (paginate_start and anchored_op):
        children_fq_names_uuids = sorted(children_fq_names_uuids, key=(lambda fqn_uuid: fqn_uuid[1]))
        if (len(children_fq_names_uuids) > paginate_count):
            children_fq_names_uuids = children_fq_names_uuids[:paginate_count]
        if (not children_fq_names_uuids):
            ret_marker = None
        else:
            ret_marker = children_fq_names_uuids[(- 1)][1]
    return (True, children_fq_names_uuids, ret_marker)
def object_list(self, obj_type, parent_uuids=None, back_ref_uuids=None, obj_uuids=None, count=False, filters=None, paginate_start=None, paginate_count=None):
    obj_class = self._get_resource_class(obj_type)
    children_fq_names_uuids = []
    ret_marker = None
    anchored_op = True

    def filter_rows(coll_infos, filters=None):
        if ((not coll_infos) or (not filters)):
            return coll_infos
        filtered_infos = {}
        columns = [('prop:%s' % filter_key) for filter_key in filters if (filter_key in obj_class.prop_fields)]
        if (not columns):
            return coll_infos
        rows = self._cassandra_driver.multiget(datastore_api.OBJ_UUID_CF_NAME, list(coll_infos.keys()), columns=columns)
        for (obj_uuid, properties) in list(rows.items()):
            gevent.sleep(0)
            full_match = True
            for (filter_key, filter_values) in list(filters.items()):
                property = ('prop:%s' % filter_key)
                if (property not in properties):
                    full_match = False
                    break
                prop_value = properties[property]
                if isinstance(prop_value, dict):
                    for filter_value in filter_values:
                        try:
                            filter_dict = json.loads(filter_value)
                        except ValueError:
                            continue
                        if (six.viewitems(filter_dict) <= six.viewitems(prop_value)):
                            break
                    else:
                        full_match = False
                        break
                elif (prop_value not in filter_values):
                    full_match = False
                    break
            if full_match:
                filtered_infos[obj_uuid] = coll_infos[obj_uuid]
        return filtered_infos

    def get_fq_name_uuid_list(obj_uuids):
        ret_list = []
        for obj_uuid in obj_uuids:
            try:
                if (obj_type != self.uuid_to_obj_type(obj_uuid)):
                    continue
                obj_fq_name = self.uuid_to_fq_name(obj_uuid)
                ret_list.append((obj_fq_name, obj_uuid))
            except NoIdError:
                pass
        return ret_list
    if parent_uuids:
        if (paginate_start and (paginate_start != '0')):
            start = ('children:%s:%s' % (obj_type, (paginate_start[:(- 1)] + chr((ord(paginate_start[(- 1)]) + 1)))))
            num_columns = paginate_count
        else:
            start = ('children:%s:' % obj_type)
            num_columns = None
        obj_rows = self._cassandra_driver.multiget(datastore_api.OBJ_UUID_CF_NAME, parent_uuids, start=start, finish=('children:%s;' % obj_type), num_columns=num_columns, timestamp=True)

        def filter_rows_parent_anchor(sort=False):
            all_cols = [cols for obj_key in list(obj_rows.keys()) for cols in list(obj_rows[obj_key].items())]
            all_child_infos = {}
            for (col_name, col_val_ts) in all_cols:
                gevent.sleep(0)
                child_uuid = col_name.split(':')[2]
                if (obj_uuids and (child_uuid not in obj_uuids)):
                    continue
                if back_ref_uuids:
                    child_cols = self._cassandra_driver.get(datastore_api.OBJ_UUID_CF_NAME, child_uuid, start='ref:', finish='ref;')
                    child_ref_ids = {col.split(':')[2] for col in (child_cols or [])}
                    if (not (set(back_ref_uuids) & child_ref_ids)):
                        continue
                all_child_infos[child_uuid] = {'uuid': child_uuid, 'tstamp': col_val_ts[1]}
            filt_child_infos = filter_rows(all_child_infos, filters)
            if (not sort):
                ret_child_infos = list(filt_child_infos.values())
            else:
                ret_child_infos = sorted(list(filt_child_infos.values()), key=itemgetter('tstamp'))
            return get_fq_name_uuid_list((r['uuid'] for r in ret_child_infos))
        children_fq_names_uuids.extend(filter_rows_parent_anchor(sort=True))
    elif back_ref_uuids:
        if (paginate_start and (paginate_start != '0')):
            start = ('backref:%s:%s' % (obj_type, (paginate_start[:(- 1)] + chr((ord(paginate_start[(- 1)]) + 1)))))
            num_columns = paginate_count
        else:
            start = ('backref:%s:' % obj_type)
            num_columns = None
        obj_rows = self._cassandra_driver.multiget(datastore_api.OBJ_UUID_CF_NAME, back_ref_uuids, start=start, finish=('backref:%s;' % obj_type), num_columns=num_columns, timestamp=True)

        def filter_rows_backref_anchor():
            all_cols = [cols for obj_key in list(obj_rows.keys()) for cols in list(obj_rows[obj_key].items())]
            all_backref_infos = {}
            for (col_name, col_val_ts) in all_cols:
                gevent.sleep(0)
                backref_uuid = col_name.split(':')[2]
                if (obj_uuids and (backref_uuid not in obj_uuids)):
                    continue
                all_backref_infos[backref_uuid] = {'uuid': backref_uuid, 'tstamp': col_val_ts[1]}
            filt_backref_infos = filter_rows(all_backref_infos, filters)
            return get_fq_name_uuid_list((r['uuid'] for r in list(filt_backref_infos.values())))
        children_fq_names_uuids.extend(filter_rows_backref_anchor())
    else:
        anchored_op = False
        if obj_uuids:

            def filter_rows_object_list():
                all_obj_infos = {}
                marker = None
                read_in = 0
                start_idx = 0
                if (paginate_start and (paginate_start != '0')):
                    try:
                        start_idx = (obj_uuids.index(paginate_start) + 1)
                    except ValueError:
                        start_idx = len(obj_uuids)
                for obj_uuid in obj_uuids[start_idx:]:
                    all_obj_infos[obj_uuid] = None
                    read_in += 1
                    if (paginate_start and (read_in >= paginate_count)):
                        marker = obj_uuid
                        break
                filt_obj_infos = filter_rows(all_obj_infos, filters)
                return (get_fq_name_uuid_list(list(filt_obj_infos.keys())), marker)
            (filtered_rows, ret_marker) = filter_rows_object_list()
            children_fq_names_uuids.extend(filtered_rows)
        else:
            if (paginate_start and (paginate_start != '0')):
                start = (paginate_start[:(- 1)] + chr((ord(paginate_start[(- 1)]) + 1)))
            else:
                start = 
            cols = self._cassandra_driver.xget(datastore_api.OBJ_FQ_NAME_CF_NAME, ('%s' % obj_type), start=start)

            def filter_rows_no_anchor():
                marker = None
                all_obj_infos = {}
                read_in = 0
                for (col_name, _) in cols:
                    gevent.sleep(0)
                    col_name_arr = utils.decode_string(col_name).split(':')
                    obj_uuid = col_name_arr[(- 1)]
                    all_obj_infos[obj_uuid] = (col_name_arr[:(- 1)], obj_uuid)
                    read_in += 1
                    if (paginate_start and (read_in >= paginate_count)):
                        marker = col_name
                        break
                filt_obj_infos = filter_rows(all_obj_infos, filters)
                return (list(filt_obj_infos.values()), marker)
            if (count and (not filters)):
                return (True, sum((1 for col in cols)), None)
            (filtered_rows, ret_marker) = filter_rows_no_anchor()
            children_fq_names_uuids.extend(filtered_rows)
    if count:
        return (True, len(children_fq_names_uuids), None)
    if (paginate_start and anchored_op):
        children_fq_names_uuids = sorted(children_fq_names_uuids, key=(lambda fqn_uuid: fqn_uuid[1]))
        if (len(children_fq_names_uuids) > paginate_count):
            children_fq_names_uuids = children_fq_names_uuids[:paginate_count]
        if (not children_fq_names_uuids):
            ret_marker = None
        else:
            ret_marker = children_fq_names_uuids[(- 1)][1]
    return (True, children_fq_names_uuids, ret_marker)