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)
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)
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
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)
def test_is_registry_uri_raises_exception_for_invalid_uris(uri): with pytest.raises(ValidationError): validate_registry_uri(uri)
def test_is_registry_uri_validates(uri): assert validate_registry_uri(uri) is None