remove unneccessary settings

This commit is contained in:
Kayla Man 2024-02-28 19:48:28 +08:00
parent 0c2ea6ee72
commit 3597efbe9f
5 changed files with 16 additions and 447 deletions

View file

@ -42,36 +42,30 @@ class ValidateInstanceInContext(pyblish.api.InstancePlugin,
context_asset = instance.context.data["folderPath"]
task = rt.getUserProp(instance_node, "task")
context_task = instance.context.data["task"]
invalid = []
if asset != context_asset:
raise PublishValidationError(
message=(
"Instance '{}' publishes to different asset than current "
"context: {}. Current context: {}".format(
instance.name, asset, context_asset
)
),
description=(
"## Publishing to a different asset\n"
"There are publish instances present which are publishing "
"into a different asset than your current context.\n\n"
"Usually this is not what you want but there can be cases "
"where you might want to publish into another asset or "
"shot. If that's the case you can disable the validation "
"on the instance to ignore it."
invalid.append(
"Instance '{}' publishes to different asset than current "
"context: {}. Current context: {}".format(
instance.name, asset, context_asset
)
)
if task != context_task:
invalid.append(
"Instance '{}' publishes to different task than current "
"context: {}. Current context: {}".format(
instance.name, task, context_task
)
)
if invalid:
message = "\n".join(invalid)
raise PublishValidationError(
message=(
"Instance '{}' publishes to different task than current "
"context: {}. Current context: {}".format(
instance.name, task, context_task
)
),
message=message,
description=(
"## Publishing to a different asset\n"
"There are publish instances present which are publishing "
"into a different asset than your current context.\n\n"
"into a different asset or task than your current context.\n\n"
"Usually this is not what you want but there can be cases "
"where you might want to publish into another asset or "
"shot. If that's the case you can disable the validation "

View file

@ -1,18 +0,0 @@
from .lib import (
get_ayon_settings,
get_studio_settings,
get_system_settings,
get_project_settings,
get_general_environments,
get_current_project_settings,
)
__all__ = (
"get_ayon_settings",
"get_studio_settings",
"get_system_settings",
"get_general_environments",
"get_project_settings",
"get_current_project_settings",
)

View file

@ -1,105 +0,0 @@
{
"unit_scale_settings": {
"enabled": true,
"scene_unit_scale": "Meters"
},
"imageio": {
"activate_host_color_management": true,
"ocio_config": {
"override_global_config": false,
"filepath": []
},
"file_rules": {
"activate_host_rules": false,
"rules": {}
}
},
"RenderSettings": {
"default_render_image_folder": "renders/3dsmax",
"aov_separator": "underscore",
"image_format": "exr",
"multipass": true
},
"CreateReview": {
"review_width": 1920,
"review_height": 1080,
"percentSize": 100.0,
"keep_images": false,
"image_format": "png",
"visual_style": "Realistic",
"viewport_preset": "Quality",
"anti_aliasing": "None",
"vp_texture": true
},
"PointCloud": {
"attribute": {
"Age": "age",
"Radius": "radius",
"Position": "position",
"Rotation": "rotation",
"Scale": "scale",
"Velocity": "velocity",
"Color": "color",
"TextureCoordinate": "texcoord",
"MaterialID": "matid",
"custFloats": "custFloats",
"custVecs": "custVecs"
}
},
"publish": {
"ValidateInstanceInContext": {
"enabled": true,
"optional": true,
"active": true
},
"ValidateFrameRange": {
"enabled": true,
"optional": true,
"active": true
},
"ValidateAttributes": {
"enabled": false,
"attributes": {}
},
"ValidateCameraAttributes": {
"enabled": true,
"optional": true,
"active": false,
"fov": 45.0,
"nearrange": 0.0,
"farrange": 1000.0,
"nearclip": 1.0,
"farclip": 1000.0
},
"ValidateLoadedPlugin": {
"enabled": false,
"optional": true,
"family_plugins_mapping": []
},
"ExtractModelObj": {
"enabled": true,
"optional": true,
"active": false
},
"ExtractModelFbx": {
"enabled": true,
"optional": true,
"active": false
},
"ExtractModelUSD": {
"enabled": true,
"optional": true,
"active": false
},
"ExtractModel": {
"enabled": true,
"optional": true,
"active": true
},
"ExtractMaxSceneRaw": {
"enabled": true,
"optional": true,
"active": true
}
}
}

View file

@ -1,223 +0,0 @@
import os
import json
import logging
import collections
import copy
import time
from ayon_core.client import get_ayon_server_api_connection
log = logging.getLogger(__name__)
class CacheItem:
lifetime = 10
def __init__(self, value, outdate_time=None):
self._value = value
if outdate_time is None:
outdate_time = time.time() + self.lifetime
self._outdate_time = outdate_time
@classmethod
def create_outdated(cls):
return cls({}, 0)
def get_value(self):
return copy.deepcopy(self._value)
def update_value(self, value):
self._value = value
self._outdate_time = time.time() + self.lifetime
@property
def is_outdated(self):
return time.time() > self._outdate_time
class _AyonSettingsCache:
use_bundles = None
variant = None
addon_versions = CacheItem.create_outdated()
studio_settings = CacheItem.create_outdated()
cache_by_project_name = collections.defaultdict(
CacheItem.create_outdated)
@classmethod
def _use_bundles(cls):
if _AyonSettingsCache.use_bundles is None:
con = get_ayon_server_api_connection()
major, minor, _, _, _ = con.get_server_version_tuple()
use_bundles = True
if (major, minor) < (0, 3):
use_bundles = False
_AyonSettingsCache.use_bundles = use_bundles
return _AyonSettingsCache.use_bundles
@classmethod
def _get_variant(cls):
if _AyonSettingsCache.variant is None:
from ayon_core.lib import is_staging_enabled, is_dev_mode_enabled
variant = "production"
if is_dev_mode_enabled():
variant = cls._get_bundle_name()
elif is_staging_enabled():
variant = "staging"
# Cache variant
_AyonSettingsCache.variant = variant
# Set the variant to global ayon api connection
con = get_ayon_server_api_connection()
con.set_default_settings_variant(variant)
return _AyonSettingsCache.variant
@classmethod
def _get_bundle_name(cls):
return os.environ["AYON_BUNDLE_NAME"]
@classmethod
def get_value_by_project(cls, project_name):
cache_item = _AyonSettingsCache.cache_by_project_name[project_name]
if cache_item.is_outdated:
con = get_ayon_server_api_connection()
if cls._use_bundles():
value = con.get_addons_settings(
bundle_name=cls._get_bundle_name(),
project_name=project_name,
variant=cls._get_variant()
)
else:
value = con.get_addons_settings(project_name)
cache_item.update_value(value)
return cache_item.get_value()
@classmethod
def _get_addon_versions_from_bundle(cls):
con = get_ayon_server_api_connection()
expected_bundle = cls._get_bundle_name()
bundles = con.get_bundles()["bundles"]
bundle = next(
(
bundle
for bundle in bundles
if bundle["name"] == expected_bundle
),
None
)
if bundle is not None:
return bundle["addons"]
return {}
@classmethod
def get_addon_versions(cls):
cache_item = _AyonSettingsCache.addon_versions
if cache_item.is_outdated:
if cls._use_bundles():
addons = cls._get_addon_versions_from_bundle()
else:
con = get_ayon_server_api_connection()
settings_data = con.get_addons_settings(
only_values=False,
variant=cls._get_variant()
)
addons = settings_data["versions"]
cache_item.update_value(addons)
return cache_item.get_value()
def get_site_local_overrides(project_name, site_name, local_settings=None):
"""Site overrides from local settings for passet project and site name.
Deprecated:
This function is not implemented for AYON and will be removed.
Args:
project_name (str): For which project are overrides.
site_name (str): For which site are overrides needed.
local_settings (dict): Preloaded local settings. They are loaded
automatically if not passed.
"""
return {}
def get_ayon_settings(project_name=None):
"""AYON studio settings.
Raw AYON settings values.
Args:
project_name (Optional[str]): Project name.
Returns:
dict[str, Any]: AYON settings.
"""
return _AyonSettingsCache.get_value_by_project(project_name)
def get_studio_settings(*args, **kwargs):
return _AyonSettingsCache.get_value_by_project(None)
# Backward compatibility
get_system_settings = get_studio_settings
def get_project_settings(project_name, *args, **kwargs):
return _AyonSettingsCache.get_value_by_project(project_name)
def get_general_environments(studio_settings=None):
"""General studio environment variables.
Args:
studio_settings (Optional[dict]): Pre-queried studio settings.
Returns:
dict[str, Any]: General studio environment variables.
"""
if studio_settings is None:
studio_settings = get_ayon_settings()
return json.loads(studio_settings["core"]["environments"])
def get_project_environments(project_name, project_settings=None):
"""Project environment variables.
Args:
project_name (str): Project name.
project_settings (Optional[dict]): Pre-queried project settings.
Returns:
dict[str, Any]: Project environment variables.
"""
if project_settings is None:
project_settings = get_project_settings(project_name)
return json.loads(
project_settings["core"]["project_environments"]
)
def get_current_project_settings():
"""Project settings for current context project.
Project name should be stored in environment variable `AYON_PROJECT_NAME`.
This function should be used only in host context where environment
variable must be set and should not happen that any part of process will
change the value of the enviornment variable.
"""
project_name = os.environ.get("AYON_PROJECT_NAME")
if not project_name:
raise ValueError(
"Missing context project in environemt variable `AYON_PROJECT_NAME`."
)
return get_project_settings(project_name)

View file

@ -1,79 +0,0 @@
# Structure of local settings
- local settings do not have any validation schemas right now this should help to see what is stored to local settings and how it works
- they are stored by identifier site_id which should be unified identifier of workstation
- all keys may and may not available on load
- contain main categories: `general`, `applications`, `projects`
## Categories
### General
- ATM contain only label of site
```json
{
"general": {
"site_label": "MySite"
}
}
```
### Applications
- modifications of application executables
- output should match application groups and variants
```json
{
"applications": {
"<app group>": {
"<app name>": {
"executable": "/my/path/to/nuke_12_2"
}
}
}
}
```
### Projects
- project specific modifications
- default project is stored under constant key defined in `pype.settings.contants`
```json
{
"projects": {
"<project name>": {
"active_site": "<name of active site>",
"remote_site": "<name of remote site>",
"roots": {
"<site name>": {
"<root name>": "<root dir path>"
}
}
}
}
}
```
## Final document
```json
{
"_id": "<ObjectId(...)>",
"site_id": "<site id>",
"general": {
"site_label": "MySite"
},
"applications": {
"<app group>": {
"<app name>": {
"executable": "<path to app executable>"
}
}
},
"projects": {
"<project name>": {
"active_site": "<name of active site>",
"remote_site": "<name of remote site>",
"roots": {
"<site name>": {
"<root name>": "<root dir path>"
}
}
}
}
}
```