def _parse_shard_list()

in aliyun/log/logclient_operator.py [0:0]


def _parse_shard_list(shard_list, current_shard_list):
    """
    parse shard list
    :param shard_list: format like: 1,5-10,20
    :param current_shard_list: current shard list
    :return:
    """
    if not shard_list:
        return current_shard_list
    target_shards = []
    for n in shard_list.split(","):
        n = n.strip()
        if n.isdigit() and n in current_shard_list:
            target_shards.append(n)
        elif n:
            rng = n.split("-")
            if len(rng) == 2:
                s = rng[0].strip()
                e = rng[1].strip()
                if s.isdigit() and e.isdigit():
                    for x in range(int(s), int(e)+1):
                        if str(x) in current_shard_list:
                            target_shards.append(str(x))

    logger.info("parse_shard, shard_list: '{0}' current shard '{1}' result: '{2}'".format(shard_list,
                                                                                          current_shard_list, target_shards))
    if not target_shards:
        raise LogException("InvalidParameter", "There's no available shard with settings {0}".format(shard_list))

    return target_shards