Improved support for private packages in PlatformIO Registry

This commit is contained in:
Ivan Kravets
2021-12-18 13:45:26 +02:00
parent 949b4562c7
commit 449722f08c
4 changed files with 41 additions and 4 deletions

View File

@ -11,6 +11,7 @@ PlatformIO Core 5
5.2.5 (2021-12-??) 5.2.5 (2021-12-??)
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
- Improved support for private packages in `PlatformIO Registry <https://registry.platformio.org/>`__
5.2.4 (2021-12-15) 5.2.4 (2021-12-15)
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~

View File

@ -21,7 +21,7 @@ import requests.adapters
from requests.packages.urllib3.util.retry import Retry # pylint:disable=import-error from requests.packages.urllib3.util.retry import Retry # pylint:disable=import-error
from platformio import __check_internet_hosts__, __default_requests_timeout__, app, util from platformio import __check_internet_hosts__, __default_requests_timeout__, app, util
from platformio.cache import ContentCache from platformio.cache import ContentCache, cleanup_content_cache
from platformio.exception import PlatformioException, UserSideException from platformio.exception import PlatformioException, UserSideException
try: try:
@ -134,6 +134,8 @@ class HTTPClient(object):
raise HTTPClientError(str(e)) raise HTTPClientError(str(e))
def fetch_json_data(self, method, path, **kwargs): def fetch_json_data(self, method, path, **kwargs):
if method != "get":
cleanup_content_cache("http")
cache_valid = kwargs.pop("cache_valid") if "cache_valid" in kwargs else None cache_valid = kwargs.pop("cache_valid") if "cache_valid" in kwargs else None
if not cache_valid: if not cache_valid:
return self._parse_json_response(self.send_request(method, path, **kwargs)) return self._parse_json_response(self.send_request(method, path, **kwargs))

View File

@ -23,6 +23,21 @@ class RegistryClient(HTTPClient):
def __init__(self): def __init__(self):
super(RegistryClient, self).__init__(__registry_api__) super(RegistryClient, self).__init__(__registry_api__)
@staticmethod
def allowed_private_packages():
private_permissions = set(
[
"service.registry.publish-private-tool",
"service.registry.publish-private-platform",
"service.registry.publish-private-library",
]
)
info = AccountClient().get_account_info() or {}
for item in info.get("packages", []):
if set(item.keys()) & private_permissions:
return True
return False
def send_auth_request(self, *args, **kwargs): def send_auth_request(self, *args, **kwargs):
headers = kwargs.get("headers", {}) headers = kwargs.get("headers", {})
if "Authorization" not in headers: if "Authorization" not in headers:
@ -116,13 +131,24 @@ class RegistryClient(HTTPClient):
params = dict(query=" ".join(search_query)) params = dict(query=" ".join(search_query))
if page: if page:
params["page"] = int(page) params["page"] = int(page)
return self.fetch_json_data( return (
"get", "/v3/search", params=params, cache_valid="1h" self.send_auth_request
if self.allowed_private_packages()
else self.fetch_json_data
)(
"get",
"/v3/search",
params=params,
cache_valid="1h",
) )
def get_package(self, type_, owner, name, version=None): def get_package(self, type_, owner, name, version=None):
try: try:
return self.fetch_json_data( return (
self.send_auth_request
if self.allowed_private_packages()
else self.fetch_json_data
)(
"get", "get",
"/v3/packages/{owner}/{type}/{name}".format( "/v3/packages/{owner}/{type}/{name}".format(
type=type_, owner=owner.lower(), name=name.lower() type=type_, owner=owner.lower(), name=name.lower()

View File

@ -134,6 +134,14 @@ def access_list(owner, urn_type, json_output):
table_data = [] table_data = []
table_data.append(("URN:", resource.get("urn"))) table_data.append(("URN:", resource.get("urn")))
table_data.append(("Owner:", resource.get("owner"))) table_data.append(("Owner:", resource.get("owner")))
table_data.append(
(
"Access:",
click.style("Private", fg="red")
if resource.get("private", False)
else "Public",
)
)
table_data.append( table_data.append(
( (
"Access level(s):", "Access level(s):",