Bases: InstancePlugin
Collects user name and password for artist if DL requires authentication
If Deadline server is marked to require authentication, it looks first for default values in 'Studio Settings', which could be overriden by artist dependent values from 'Site settings`.
Source code in client/ayon_deadline/plugins/publish/global/collect_user_credentials.py
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 | class CollectDeadlineUserCredentials(pyblish.api.InstancePlugin):
"""Collects user name and password for artist if DL requires authentication
If Deadline server is marked to require authentication, it looks first for
default values in 'Studio Settings', which could be overriden by artist
dependent values from 'Site settings`.
"""
order = pyblish.api.CollectorOrder + 0.250
label = "Collect Deadline User Credentials"
targets = ["local"]
families = FARM_FAMILIES
def process(self, instance):
if not instance.data.get("farm"):
self.log.debug("Should not be processed on farm, skipping.")
return
collected_deadline_url = instance.data["deadline"]["url"]
if not collected_deadline_url:
raise ValueError("Instance doesn't have '[deadline][url]'.")
context_data = instance.context.data
# deadline url might be set directly from instance, need to find
# metadata for it
deadline_server_name = instance.data["deadline"].get("serverName")
dealine_info_by_server_name = {
deadline_info["name"]: deadline_info
for deadline_info in (
context_data["project_settings"]["deadline"]["deadline_urls"]
)
}
if deadline_server_name is None:
self.log.warning(
"DEV WARNING: Instance does not have set"
" instance['deadline']['serverName']."
)
for deadline_info in dealine_info_by_server_name.values():
dl_settings_url = deadline_info["value"].strip().rstrip("/")
if dl_settings_url == collected_deadline_url:
deadline_server_name = deadline_info["name"]
break
if not deadline_server_name:
raise ValueError(
f"Collected {collected_deadline_url} doesn't"
" match any site configured in Studio Settings"
)
deadline_info = dealine_info_by_server_name[deadline_server_name]
instance.data["deadline"]["require_authentication"] = (
deadline_info["require_authentication"]
)
instance.data["deadline"]["auth"] = None
instance.data["deadline"]["verify"] = (
not deadline_info["not_verify_ssl"]
)
if not deadline_info["require_authentication"]:
return
addons_manager = instance.context.data["ayonAddonsManager"]
deadline_addon = addons_manager["deadline"]
default_username = deadline_info["default_username"]
default_password = deadline_info["default_password"]
if default_username and default_password:
self.log.debug("Setting credentials from defaults")
instance.data["deadline"]["auth"] = (
default_username, default_password
)
# TODO import 'get_addon_site_settings' when available
# in public 'ayon_api'
local_settings = get_server_api_connection().get_addon_site_settings(
deadline_addon.name, deadline_addon.version)
local_settings = local_settings["local_settings"]
for server_info in local_settings:
if deadline_server_name == server_info["server_name"]:
if server_info["username"] and server_info["password"]:
self.log.debug("Setting credentials from Site Settings")
instance.data["deadline"]["auth"] = \
(server_info["username"], server_info["password"])
break
|