mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
[Automated] Merged develop into main
This commit is contained in:
commit
abc6457977
7 changed files with 78 additions and 237 deletions
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
|
|
@ -37,6 +37,7 @@ body:
|
|||
options:
|
||||
- 3.18.0
|
||||
- 3.17.7
|
||||
- 3.18.1-nightly.1
|
||||
- 3.17.7-nightly.7
|
||||
- 3.17.7-nightly.6
|
||||
- 3.17.7-nightly.5
|
||||
|
|
@ -134,7 +135,6 @@ body:
|
|||
- 3.15.4-nightly.1
|
||||
- 3.15.3
|
||||
- 3.15.3-nightly.4
|
||||
- 3.15.3-nightly.3
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
|
|
|
|||
|
|
@ -75,8 +75,6 @@ from ._api import (
|
|||
download_installer,
|
||||
upload_installer,
|
||||
|
||||
get_dependencies_info,
|
||||
update_dependency_info,
|
||||
get_dependency_packages,
|
||||
create_dependency_package,
|
||||
update_dependency_package,
|
||||
|
|
@ -277,8 +275,6 @@ __all__ = (
|
|||
"download_installer",
|
||||
"upload_installer",
|
||||
|
||||
"get_dependencies_info",
|
||||
"update_dependency_info",
|
||||
"get_dependency_packages",
|
||||
"create_dependency_package",
|
||||
"update_dependency_package",
|
||||
|
|
|
|||
10
openpype/vendor/python/common/ayon_api/_api.py
vendored
10
openpype/vendor/python/common/ayon_api/_api.py
vendored
|
|
@ -611,16 +611,6 @@ def upload_installer(*args, **kwargs):
|
|||
|
||||
|
||||
# Dependency packages
|
||||
def get_dependencies_info(*args, **kwargs):
|
||||
con = get_server_api_connection()
|
||||
return con.get_dependencies_info(*args, **kwargs)
|
||||
|
||||
|
||||
def update_dependency_info(*args, **kwargs):
|
||||
con = get_server_api_connection()
|
||||
return con.update_dependency_info(*args, **kwargs)
|
||||
|
||||
|
||||
def download_dependency_package(*args, **kwargs):
|
||||
con = get_server_api_connection()
|
||||
return con.download_dependency_package(*args, **kwargs)
|
||||
|
|
|
|||
|
|
@ -7,9 +7,21 @@ import six
|
|||
from ._api import get_server_api_connection
|
||||
from .utils import create_entity_id, convert_entity_id, slugify_string
|
||||
|
||||
UNKNOWN_VALUE = object()
|
||||
PROJECT_PARENT_ID = object()
|
||||
_NOT_SET = object()
|
||||
|
||||
class _CustomNone(object):
|
||||
def __init__(self, name=None):
|
||||
self._name = name or "CustomNone"
|
||||
|
||||
def __repr__(self):
|
||||
return "<{}>".format(self._name)
|
||||
|
||||
def __bool__(self):
|
||||
return False
|
||||
|
||||
|
||||
UNKNOWN_VALUE = _CustomNone("UNKNOWN_VALUE")
|
||||
PROJECT_PARENT_ID = _CustomNone("PROJECT_PARENT_ID")
|
||||
_NOT_SET = _CustomNone("_NOT_SET")
|
||||
|
||||
|
||||
class EntityHub(object):
|
||||
|
|
@ -1284,7 +1296,10 @@ class BaseEntity(object):
|
|||
changes["name"] = self._name
|
||||
|
||||
if self._entity_hub.allow_data_changes:
|
||||
if self._orig_data != self._data:
|
||||
if (
|
||||
self._data is not UNKNOWN_VALUE
|
||||
and self._orig_data != self._data
|
||||
):
|
||||
changes["data"] = self._data
|
||||
|
||||
if self._orig_thumbnail_id != self._thumbnail_id:
|
||||
|
|
|
|||
272
openpype/vendor/python/common/ayon_api/server_api.py
vendored
272
openpype/vendor/python/common/ayon_api/server_api.py
vendored
|
|
@ -8,6 +8,7 @@ import collections
|
|||
import platform
|
||||
import copy
|
||||
import uuid
|
||||
import warnings
|
||||
from contextlib import contextmanager
|
||||
|
||||
import six
|
||||
|
|
@ -1022,17 +1023,10 @@ class ServerAPI(object):
|
|||
for attr, filter_value in filters.items():
|
||||
query.set_variable_value(attr, filter_value)
|
||||
|
||||
# Backwards compatibility for server 0.3.x
|
||||
# - will be removed in future releases
|
||||
major, minor, _, _, _ = self.server_version_tuple
|
||||
access_groups_field = "accessGroups"
|
||||
if major == 0 and minor <= 3:
|
||||
access_groups_field = "roles"
|
||||
|
||||
for parsed_data in query.continuous_query(self):
|
||||
for user in parsed_data["users"]:
|
||||
user[access_groups_field] = json.loads(
|
||||
user[access_groups_field])
|
||||
user["accessGroups"] = json.loads(
|
||||
user["accessGroups"])
|
||||
yield user
|
||||
|
||||
def get_user(self, username=None):
|
||||
|
|
@ -2044,14 +2038,6 @@ class ServerAPI(object):
|
|||
|
||||
elif entity_type == "user":
|
||||
entity_type_defaults = set(DEFAULT_USER_FIELDS)
|
||||
# Backwards compatibility for server 0.3.x
|
||||
# - will be removed in future releases
|
||||
major, minor, _, _, _ = self.server_version_tuple
|
||||
if major == 0 and minor <= 3:
|
||||
entity_type_defaults.discard("accessGroups")
|
||||
entity_type_defaults.discard("defaultAccessGroups")
|
||||
entity_type_defaults.add("roles")
|
||||
entity_type_defaults.add("defaultRoles")
|
||||
|
||||
else:
|
||||
raise ValueError("Unknown entity type \"{}\"".format(entity_type))
|
||||
|
|
@ -2306,125 +2292,8 @@ class ServerAPI(object):
|
|||
progress=progress
|
||||
)
|
||||
|
||||
def get_dependencies_info(self):
|
||||
"""Information about dependency packages on server.
|
||||
|
||||
Example data structure:
|
||||
{
|
||||
"packages": [
|
||||
{
|
||||
"name": str,
|
||||
"platform": str,
|
||||
"checksum": str,
|
||||
"sources": list[dict[str, Any]],
|
||||
"supportedAddons": dict[str, str],
|
||||
"pythonModules": dict[str, str]
|
||||
}
|
||||
],
|
||||
"productionPackage": str
|
||||
}
|
||||
|
||||
Deprecated:
|
||||
Deprecated since server version 0.2.1. Use
|
||||
'get_dependency_packages' instead.
|
||||
|
||||
Returns:
|
||||
dict[str, Any]: Information about dependency packages known for
|
||||
server.
|
||||
"""
|
||||
|
||||
major, minor, patch, _, _ = self.server_version_tuple
|
||||
if major == 0 and (minor < 2 or (minor == 2 and patch < 1)):
|
||||
result = self.get("dependencies")
|
||||
return result.data
|
||||
packages = self.get_dependency_packages()
|
||||
packages["productionPackage"] = None
|
||||
return packages
|
||||
|
||||
def update_dependency_info(
|
||||
self,
|
||||
name,
|
||||
platform_name,
|
||||
size,
|
||||
checksum,
|
||||
checksum_algorithm=None,
|
||||
supported_addons=None,
|
||||
python_modules=None,
|
||||
sources=None
|
||||
):
|
||||
"""Update or create dependency package for identifiers.
|
||||
|
||||
The endpoint can be used to create or update dependency package.
|
||||
|
||||
|
||||
Deprecated:
|
||||
Deprecated for server version 0.2.1. Use
|
||||
'create_dependency_pacakge' instead.
|
||||
|
||||
Args:
|
||||
name (str): Name of dependency package.
|
||||
platform_name (Literal["windows", "linux", "darwin"]): Platform
|
||||
for which is dependency package targeted.
|
||||
size (int): Size of dependency package in bytes.
|
||||
checksum (str): Checksum of archive file where dependencies are.
|
||||
checksum_algorithm (Optional[str]): Algorithm used to calculate
|
||||
checksum. By default, is used 'md5' (defined by server).
|
||||
supported_addons (Optional[dict[str, str]]): Name of addons for
|
||||
which was the package created.
|
||||
'{"<addon name>": "<addon version>", ...}'
|
||||
python_modules (Optional[dict[str, str]]): Python modules in
|
||||
dependencies package.
|
||||
'{"<module name>": "<module version>", ...}'
|
||||
sources (Optional[list[dict[str, Any]]]): Information about
|
||||
sources where dependency package is available.
|
||||
"""
|
||||
|
||||
kwargs = {
|
||||
key: value
|
||||
for key, value in (
|
||||
("checksumAlgorithm", checksum_algorithm),
|
||||
("supportedAddons", supported_addons),
|
||||
("pythonModules", python_modules),
|
||||
("sources", sources),
|
||||
)
|
||||
if value
|
||||
}
|
||||
|
||||
response = self.put(
|
||||
"dependencies",
|
||||
name=name,
|
||||
platform=platform_name,
|
||||
size=size,
|
||||
checksum=checksum,
|
||||
**kwargs
|
||||
)
|
||||
response.raise_for_status("Failed to create/update dependency")
|
||||
return response.data
|
||||
|
||||
def _get_dependency_package_route(
|
||||
self, filename=None, platform_name=None
|
||||
):
|
||||
major, minor, patch, _, _ = self.server_version_tuple
|
||||
if (major, minor, patch) <= (0, 2, 0):
|
||||
# Backwards compatibility for AYON server 0.2.0 and lower
|
||||
self.log.warning((
|
||||
"Using deprecated dependency package route."
|
||||
" Please update your AYON server to version 0.2.1 or higher."
|
||||
" Backwards compatibility for this route will be removed"
|
||||
" in future releases of ayon-python-api."
|
||||
))
|
||||
if platform_name is None:
|
||||
platform_name = platform.system().lower()
|
||||
base = "dependencies"
|
||||
if not filename:
|
||||
return base
|
||||
return "{}/{}/{}".format(base, filename, platform_name)
|
||||
|
||||
if (major, minor) <= (0, 3):
|
||||
endpoint = "desktop/dependency_packages"
|
||||
else:
|
||||
endpoint = "desktop/dependencyPackages"
|
||||
|
||||
def _get_dependency_package_route(self, filename=None):
|
||||
endpoint = "desktop/dependencyPackages"
|
||||
if filename:
|
||||
return "{}/{}".format(endpoint, filename)
|
||||
return endpoint
|
||||
|
|
@ -2535,14 +2404,21 @@ class ServerAPI(object):
|
|||
"""Remove dependency package for specific platform.
|
||||
|
||||
Args:
|
||||
filename (str): Filename of dependency package. Or name of package
|
||||
for server version 0.2.0 or lower.
|
||||
platform_name (Optional[str]): Which platform of the package
|
||||
should be removed. Current platform is used if not passed.
|
||||
Deprecated since version 0.2.1
|
||||
filename (str): Filename of dependency package.
|
||||
platform_name (Optional[str]): Deprecated.
|
||||
"""
|
||||
|
||||
route = self._get_dependency_package_route(filename, platform_name)
|
||||
if platform_name is not None:
|
||||
warnings.warn(
|
||||
(
|
||||
"Argument 'platform_name' is deprecated in"
|
||||
" 'delete_dependency_package'. The argument will be"
|
||||
" removed, please modify your code accordingly."
|
||||
),
|
||||
DeprecationWarning
|
||||
)
|
||||
|
||||
route = self._get_dependency_package_route(filename)
|
||||
response = self.delete(route)
|
||||
response.raise_for_status("Failed to delete dependency file")
|
||||
return response.data
|
||||
|
|
@ -2567,18 +2443,25 @@ class ServerAPI(object):
|
|||
to download.
|
||||
dst_directory (str): Where the file should be downloaded.
|
||||
dst_filename (str): Name of destination filename.
|
||||
platform_name (Optional[str]): Name of platform for which the
|
||||
dependency package is targeted. Default value is
|
||||
current platform. Deprecated since server version 0.2.1.
|
||||
platform_name (Optional[str]): Deprecated.
|
||||
chunk_size (Optional[int]): Download chunk size.
|
||||
progress (Optional[TransferProgress]): Object that gives ability
|
||||
to track download progress.
|
||||
|
||||
Returns:
|
||||
str: Filepath to downloaded file.
|
||||
"""
|
||||
"""
|
||||
|
||||
route = self._get_dependency_package_route(src_filename, platform_name)
|
||||
if platform_name is not None:
|
||||
warnings.warn(
|
||||
(
|
||||
"Argument 'platform_name' is deprecated in"
|
||||
" 'download_dependency_package'. The argument will be"
|
||||
" removed, please modify your code accordingly."
|
||||
),
|
||||
DeprecationWarning
|
||||
)
|
||||
route = self._get_dependency_package_route(src_filename)
|
||||
package_filepath = os.path.join(dst_directory, dst_filename)
|
||||
self.download_file(
|
||||
route,
|
||||
|
|
@ -2597,32 +2480,24 @@ class ServerAPI(object):
|
|||
src_filepath (str): Path to a package file.
|
||||
dst_filename (str): Dependency package filename or name of package
|
||||
for server version 0.2.0 or lower. Must be unique.
|
||||
platform_name (Optional[str]): For which platform is the
|
||||
package targeted. Deprecated since server version 0.2.1.
|
||||
platform_name (Optional[str]): Deprecated.
|
||||
progress (Optional[TransferProgress]): Object to keep track about
|
||||
upload state.
|
||||
"""
|
||||
|
||||
route = self._get_dependency_package_route(dst_filename, platform_name)
|
||||
if platform_name is not None:
|
||||
warnings.warn(
|
||||
(
|
||||
"Argument 'platform_name' is deprecated in"
|
||||
" 'upload_dependency_package'. The argument will be"
|
||||
" removed, please modify your code accordingly."
|
||||
),
|
||||
DeprecationWarning
|
||||
)
|
||||
|
||||
route = self._get_dependency_package_route(dst_filename)
|
||||
self.upload_file(route, src_filepath, progress=progress)
|
||||
|
||||
def create_dependency_package_basename(self, platform_name=None):
|
||||
"""Create basename for dependency package file.
|
||||
|
||||
Deprecated:
|
||||
Use 'create_dependency_package_basename' from `ayon_api` or
|
||||
`ayon_api.utils` instead.
|
||||
|
||||
Args:
|
||||
platform_name (Optional[str]): Name of platform for which the
|
||||
bundle is targeted. Default value is current platform.
|
||||
|
||||
Returns:
|
||||
str: Dependency package name with timestamp and platform.
|
||||
"""
|
||||
|
||||
return create_dependency_package_basename(platform_name)
|
||||
|
||||
def upload_addon_zip(self, src_filepath, progress=None):
|
||||
"""Upload addon zip file to server.
|
||||
|
||||
|
|
@ -2650,14 +2525,6 @@ class ServerAPI(object):
|
|||
)
|
||||
return response.json()
|
||||
|
||||
def _get_bundles_route(self):
|
||||
major, minor, patch, _, _ = self.server_version_tuple
|
||||
# Backwards compatibility for AYON server 0.3.0
|
||||
# - first version where bundles were available
|
||||
if major == 0 and minor == 3 and patch == 0:
|
||||
return "desktop/bundles"
|
||||
return "bundles"
|
||||
|
||||
def get_bundles(self):
|
||||
"""Server bundles with basic information.
|
||||
|
||||
|
|
@ -2688,7 +2555,7 @@ class ServerAPI(object):
|
|||
dict[str, Any]: Server bundles with basic information.
|
||||
"""
|
||||
|
||||
response = self.get(self._get_bundles_route())
|
||||
response = self.get("bundles")
|
||||
response.raise_for_status()
|
||||
return response.data
|
||||
|
||||
|
|
@ -2731,7 +2598,7 @@ class ServerAPI(object):
|
|||
if value is not None:
|
||||
body[key] = value
|
||||
|
||||
response = self.post(self._get_bundles_route(), **body)
|
||||
response = self.post("bundles", **body)
|
||||
response.raise_for_status()
|
||||
|
||||
def update_bundle(
|
||||
|
|
@ -2766,7 +2633,7 @@ class ServerAPI(object):
|
|||
if value is not None
|
||||
}
|
||||
response = self.patch(
|
||||
"{}/{}".format(self._get_bundles_route(), bundle_name),
|
||||
"{}/{}".format("bundles", bundle_name),
|
||||
**body
|
||||
)
|
||||
response.raise_for_status()
|
||||
|
|
@ -2779,7 +2646,7 @@ class ServerAPI(object):
|
|||
"""
|
||||
|
||||
response = self.delete(
|
||||
"{}/{}".format(self._get_bundles_route(), bundle_name)
|
||||
"{}/{}".format("bundles", bundle_name)
|
||||
)
|
||||
response.raise_for_status()
|
||||
|
||||
|
|
@ -3102,16 +2969,13 @@ class ServerAPI(object):
|
|||
- test how it behaves if there is not any production/staging
|
||||
bundle.
|
||||
|
||||
Warnings:
|
||||
For AYON server < 0.3.0 bundle name will be ignored.
|
||||
|
||||
Example output:
|
||||
{
|
||||
"addons": [
|
||||
{
|
||||
"name": "addon-name",
|
||||
"version": "addon-version",
|
||||
"settings": {...}
|
||||
"settings": {...},
|
||||
"siteSettings": {...}
|
||||
}
|
||||
]
|
||||
|
|
@ -3121,7 +2985,6 @@ class ServerAPI(object):
|
|||
dict[str, Any]: All settings for single bundle.
|
||||
"""
|
||||
|
||||
major, minor, _, _, _ = self.server_version_tuple
|
||||
query_values = {
|
||||
key: value
|
||||
for key, value in (
|
||||
|
|
@ -3137,21 +3000,8 @@ class ServerAPI(object):
|
|||
if site_id:
|
||||
query_values["site_id"] = site_id
|
||||
|
||||
if major == 0 and minor >= 3:
|
||||
url = "settings"
|
||||
else:
|
||||
# Backward compatibility for AYON server < 0.3.0
|
||||
url = "settings/addons"
|
||||
query_values.pop("bundle_name", None)
|
||||
for new_key, old_key in (
|
||||
("project_name", "project"),
|
||||
("site_id", "site"),
|
||||
):
|
||||
if new_key in query_values:
|
||||
query_values[old_key] = query_values.pop(new_key)
|
||||
|
||||
query = prepare_query_string(query_values)
|
||||
response = self.get("{}{}".format(url, query))
|
||||
response = self.get("settings{}".format(query))
|
||||
response.raise_for_status()
|
||||
return response.data
|
||||
|
||||
|
|
@ -3194,15 +3044,10 @@ class ServerAPI(object):
|
|||
use_site=use_site
|
||||
)
|
||||
if only_values:
|
||||
major, minor, patch, _, _ = self.server_version_tuple
|
||||
if major == 0 and minor >= 3:
|
||||
output = {
|
||||
addon["name"]: addon["settings"]
|
||||
for addon in output["addons"]
|
||||
}
|
||||
else:
|
||||
# Backward compatibility for AYON server < 0.3.0
|
||||
output = output["settings"]
|
||||
output = {
|
||||
addon["name"]: addon["settings"]
|
||||
for addon in output["addons"]
|
||||
}
|
||||
return output
|
||||
|
||||
def get_addons_project_settings(
|
||||
|
|
@ -3263,15 +3108,10 @@ class ServerAPI(object):
|
|||
use_site=use_site
|
||||
)
|
||||
if only_values:
|
||||
major, minor, patch, _, _ = self.server_version_tuple
|
||||
if major == 0 and minor >= 3:
|
||||
output = {
|
||||
addon["name"]: addon["settings"]
|
||||
for addon in output["addons"]
|
||||
}
|
||||
else:
|
||||
# Backward compatibility for AYON server < 0.3.0
|
||||
output = output["settings"]
|
||||
output = {
|
||||
addon["name"]: addon["settings"]
|
||||
for addon in output["addons"]
|
||||
}
|
||||
return output
|
||||
|
||||
def get_addons_settings(
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
"""Package declaring Python API for Ayon server."""
|
||||
__version__ = "1.0.0-rc.1"
|
||||
__version__ = "1.0.0-rc.3"
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Package declaring Pype version."""
|
||||
__version__ = "3.17.7-nightly.8"
|
||||
__version__ = "3.18.1-nightly.1"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue