예제 #1
0
def parse_registry_uri(uri: str) -> RegistryURI:
    """
    Validate and return (authority, chain_id, pkg_name, version) from a valid registry URI.
    """
    from web3.auto.infura import w3
    validate_registry_uri(uri)
    parsed_uri = parse.urlparse(uri)
    if ":" in parsed_uri.netloc:
        address_or_ens, chain_id = parsed_uri.netloc.split(":")
    else:
        address_or_ens, chain_id = parsed_uri.netloc, "1"
    ns = ENS.fromWeb3(w3)
    if is_address(address_or_ens):
        address = address_or_ens
        ens = None
    elif ns.address(address_or_ens):
        address = ns.address(address_or_ens)
        ens = address_or_ens
    else:
        raise CannotHandleURI(
            f"Invalid address or ENS domain found in uri: {uri}.")
    pkg_name, pkg_version, namespaced_asset = _process_pkg_path(
        parsed_uri.path)
    return RegistryURI(address, chain_id, pkg_name, pkg_version,
                       namespaced_asset, ens)
예제 #2
0
def parse_registry_uri(uri: str) -> RegistryURI:
    """
    Validate and return (authority, pkg name, version) from a valid registry URI
    """
    validate_registry_uri(uri)
    parsed_uri = parse.urlparse(uri)
    address, chain_id = parsed_uri.netloc.split(":")
    pkg_name = parsed_uri.path.strip("/")
    pkg_version = parsed_uri.query.lstrip("version=").strip("/")
    return RegistryURI(address, chain_id, pkg_name, pkg_version)
예제 #3
0
def is_valid_registry_uri(uri: str) -> bool:
    """
    Return a boolean indicating whether `uri` argument
    conforms to the Registry URI scheme.
    """
    try:
        validate_registry_uri(uri)
    except ValidationError:
        return False
    else:
        return True
예제 #4
0
def parse_registry_uri(uri: str) -> RegistryURI:
    """
    Validate and return (authority, pkg name, version) from a valid registry URI
    """
    from web3.auto.infura import w3
    validate_registry_uri(uri)
    parsed_uri = parse.urlparse(uri)
    address_or_ens, chain_id = parsed_uri.netloc.split(":")
    ns = ENS.fromWeb3(w3)
    if is_address(address_or_ens):
        address = address_or_ens
        ens = None
    elif ns.address(address_or_ens):
        address = ns.address(address_or_ens)
        ens = address_or_ens
    else:
        raise CannotHandleURI(
            f"Invalid address or ENS domain found in uri: {uri}.")
    parsed_name = parsed_uri.path.strip("/")
    parsed_version = parsed_uri.query.lstrip("version=").strip("/")
    pkg_name = parsed_name if parsed_name else None
    pkg_version = parsed_version if parsed_version else None
    return RegistryURI(address, chain_id, pkg_name, pkg_version, ens)
예제 #5
0
def test_is_registry_uri_raises_exception_for_invalid_uris(uri):
    with pytest.raises(ValidationError):
        validate_registry_uri(uri)
예제 #6
0
def test_is_registry_uri_validates(uri):
    assert validate_registry_uri(uri) is None