Ejemplo n.º 1
0
 def get_release_count(self, package_name: str) -> int:
     """
     Returns the number of releases of the given package name available on the current registry.
     """
     validate_package_name(package_name)
     self._validate_set_registry()
     return self.registry._num_release_ids(package_name)
Ejemplo n.º 2
0
def validate_alias(alias: str) -> None:
    try:
        validate_package_name(alias)
    except EthPMValidationError:
        raise ValidationError(
            f"{alias} is not a valid package name. All aliases must conform "
            "to the ethpm spec definition of a package name.")
Ejemplo n.º 3
0
def validate_registry_uri(uri: str) -> None:
    """
    Raise an exception if the URI does not conform to the registry URI scheme.
    """
    parsed = parse.urlparse(uri)
    scheme, authority, pkg_path = (
        parsed.scheme,
        parsed.netloc,
        parsed.path,
    )
    pkg_id = pkg_path.strip("/")

    if "@" in pkg_id:
        if len(pkg_id.split("@")) != 2:
            raise EthPMValidationError(
                "Registry URI: {pkg_id} is not properly escaped")
        pkg_name, pkg_version = pkg_id.split("@")
    else:
        pkg_name, pkg_version = (pkg_id, None)

    validate_registry_uri_scheme(scheme)
    validate_registry_uri_authority(authority)
    if pkg_name:
        validate_package_name(pkg_name)
    if not pkg_name and pkg_version:
        raise EthPMValidationError(
            "Registry URIs cannot provide a version without a package name.")
    if pkg_version:
        validate_escaped_string(pkg_version)
Ejemplo n.º 4
0
def _build_dependency(package_name: str, uri: URI,
                      manifest: Manifest) -> Manifest:
    validate_package_name(package_name)
    if not is_supported_content_addressed_uri(uri):
        raise EthPMValidationError(
            f"{uri} is not a supported content-addressed URI. "
            "Currently only IPFS and Github blob uris are supported.")
    return assoc_in(manifest, ("buildDependencies", package_name), uri)
Ejemplo n.º 5
0
 def get_release_id(self, package_name: str, version: str) -> bytes:
     """
     Returns the 32 byte identifier of a release for the given package name and version,
     if they are available on the current registry.
     """
     validate_package_name(package_name)
     validate_package_version(version)
     self._validate_set_registry()
     return self.registry._get_release_id(package_name, version)
Ejemplo n.º 6
0
def get_deployment_alias(contract_type: str) -> str:
    flag = parse_bool_flag(
        "Would you like to alias your deployment? "
        f"(reference it by a name other than its contract type: {contract_type}). "
    )
    if flag:
        alias = input("Please enter your alias. ")
        validate_package_name(alias)
        return alias
    return contract_type
Ejemplo n.º 7
0
 def get_all_package_releases(self, package_name: str) -> Iterable[Tuple[str, str]]:
     """
     Returns a tuple of release data (version, manifest_ur) for every release of the
     given package name available on the current registry.
     """
     validate_package_name(package_name)
     self._validate_set_registry()
     release_ids = self.registry._get_all_release_ids(package_name)
     for release_id in release_ids:
         release_data = self.registry._get_release_data(release_id)
         yield (release_data.version, release_data.manifest_uri)
Ejemplo n.º 8
0
    def get_package(self, package_name: str, version: str) -> Package:
        """
        Returns a ``Package`` instance, generated by the ``manifest_uri`` associated with the
        given package name and version, if they are published to the currently set registry.

        * Parameters:
            * ``name``: Must be a valid package name.
            * ``version``: Must be a valid package version.
        """
        validate_package_name(package_name)
        validate_package_version(version)
        self._validate_set_registry()
        _, _, release_uri = self.get_release_data(package_name, version)
        return self.get_package_from_uri(release_uri)
Ejemplo n.º 9
0
    def get_release_data(self, package_name: str, version: str) -> ReleaseData:
        """
        Returns ``(package_name, version, manifest_uri)`` associated with the given
        package name and version, *if* they are published to the currently set registry.

        * Parameters:
            * ``name``: Must be a valid package name.
            * ``version``: Must be a valid package version.
        """
        validate_package_name(package_name)
        validate_package_version(version)
        self._validate_set_registry()
        release_id = self.registry._get_release_id(package_name, version)
        return self.get_release_id_data(release_id)
Ejemplo n.º 10
0
def validate_registry_uri(uri: str) -> None:
    """
    Raise an exception if the URI does not conform to the registry URI scheme.
    """
    parsed = parse.urlparse(uri)
    scheme, authority, pkg_name, query = (
        parsed.scheme,
        parsed.netloc,
        parsed.path,
        parsed.query,
    )
    validate_registry_uri_scheme(scheme)
    validate_registry_uri_authority(authority)
    if query:
        validate_registry_uri_version(query)
    validate_package_name(pkg_name[1:])
Ejemplo n.º 11
0
def validate_registry_uri(uri: str) -> None:
    """
    Raise an exception if the URI does not conform to the registry URI scheme.
    """
    parsed = parse.urlparse(uri)
    scheme, authority, pkg_path, version = (
        parsed.scheme,
        parsed.netloc,
        parsed.path,
        parsed.query,
    )
    validate_registry_uri_scheme(scheme)
    validate_registry_uri_authority(authority)
    pkg_name = pkg_path.lstrip("/")
    if pkg_name:
        validate_package_name(pkg_name)
    if not pkg_name and version:
        raise ValidationError(
            "Registry URIs cannot provide a version without a package name.")
    if version:
        validate_registry_uri_version(version)
Ejemplo n.º 12
0
def validate_uninstall_cli_args(args: Namespace) -> None:
    validate_package_name(args.package)
    if args.ethpm_dir:
        validate_ethpm_dir(args.ethpm_dir)
Ejemplo n.º 13
0
def test_validate_package_name_raises_exception_for_invalid_names(
        package_name):
    with pytest.raises(EthPMValidationError):
        validate_package_name(package_name)
Ejemplo n.º 14
0
def test_validate_package_name_with_valid_package_names(package_name):
    assert validate_package_name(package_name) is None
Ejemplo n.º 15
0
 def _validate_name(self, name: str) -> None:
     validate_package_name(name)
     if name not in self.build_dependencies:
         raise KeyError(
             f"Package name: {name} not found in build dependencies.")
Ejemplo n.º 16
0
def gen_package_name() -> Callable[..., Manifest]:
    package_name = input("Enter your package's name: ")
    validate_package_name(package_name)
    return b.package_name(package_name)