Skip to content

settings

GeneralSubmodel

Bases: BaseSettingsModel

Properties for loop and module configuration

Source code in server/settings/settings.py
19
20
21
22
23
24
25
26
class GeneralSubmodel(BaseSettingsModel):
    """Properties for loop and module configuration"""
    retry_cnt: int = Field(3, title="Retry Count")
    loop_delay: int = Field(60, title="Loop Delay")
    always_accessible_on: list[str] = Field([],
                                            title="Always accessible on sites")
    active_site: str = Field("studio", title="User Default Active Site")
    remote_site: str = Field("studio", title="User Default Remote Site")

LocalSubmodel

Bases: BaseSettingsModel

Select your local and remote site

Source code in server/settings/settings.py
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
class LocalSubmodel(BaseSettingsModel):
    """Select your local and remote site"""
    active_site: str = Field("",
                             title="My Active Site",
                             scope=["site"],
                             enum_resolver=defined_sited_enum_resolver)

    remote_site: str = Field("",
                             title="My Remote Site",
                             scope=["site"],
                             enum_resolver=defined_sited_enum_resolver)

    local_roots: list[RootSubmodel] = Field(
        default=default_roots,
        title="Local roots overrides",
        scope=["site"],
        description="Overrides for local root(s)."
    )

RootSubmodel

Bases: BaseSettingsModel

Setup root paths for local site.

Studio roots overrides are in separate Roots tab outside of Site Sync.

Source code in server/settings/settings.py
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class RootSubmodel(BaseSettingsModel):
    """Setup root paths for local site.

    Studio roots overrides are in separate `Roots` tab outside of Site Sync.
    """

    _layout: str = "expanded"

    name: str = Field(
        "work",
        title="Root name",
        regex="^[a-zA-Z0-9_]{1,}$",
        scope=["site"],
    )

    path: str = Field(
        "c:/projects_local",
        title="Path",
        scope=["site"],
    )

SiteSyncSettings

Bases: BaseSettingsModel

Settings for synchronization process

Source code in server/settings/settings.py
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
class SiteSyncSettings(BaseSettingsModel):
    """Settings for synchronization process"""
    enabled: bool = Field(False)

    config: GeneralSubmodel = Field(
        default_factory=GeneralSubmodel,
        title="Config"
    )

    local_setting: LocalSubmodel = Field(
        default_factory=LocalSubmodel,
        title="Local setting",
        scope=["site"],
        description="This setting is only applicable for artist's site",
    )

    sites: list[SitesSubmodel] = Field(
        default_factory=list,
        scope=["studio", "project", "site"],
        title="Sites",
    )

    @validator("sites")
    def ensure_unique_names(cls, value):
        """Ensure name fields within the lists have unique names."""
        ensure_unique_names(value)
        return value

ensure_unique_names(value)

Ensure name fields within the lists have unique names.

Source code in server/settings/settings.py
189
190
191
192
193
@validator("sites")
def ensure_unique_names(cls, value):
    """Ensure name fields within the lists have unique names."""
    ensure_unique_names(value)
    return value

SitesSubmodel

Bases: BaseSettingsModel

Configured additional sites and properties for their providers

Source code in server/settings/settings.py
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
class SitesSubmodel(BaseSettingsModel):
    """Configured additional sites and properties for their providers"""
    _layout = "expanded"

    alternative_sites: list[str] = Field(
        default_factory=list,
        title="Alternative sites",
        scope=["studio", "project"],
        description="Files on this site are/should physically present on these"
                    " sites. Example sftp site exposes files from 'studio' "
                    " site"
    )

    provider: str = Field(
        "",
        title="Provider",
        description="Switch between providers",
        enum_resolver=lambda: provider_enum,
        conditionalEnum=True
    )

    local_drive: LocalDriveSubmodel = Field(
        default_factory=LocalDriveSubmodel,
        scope=["studio", "project", "site"]
    )
    gdrive: GoogleDriveSubmodel = Field(
        default_factory=GoogleDriveSubmodel,
        scope=["studio", "project", "site"]
    )
    dropbox: DropboxSubmodel = Field(
        default_factory=DropboxSubmodel,
        scope=["studio", "project", "site"]
    )
    sftp: SFTPSubmodel = Field(
        default_factory=SFTPSubmodel,
        scope=["studio", "project", "site"]
    )

    name: str = Field(..., title="Site name",
                      scope=["studio", "project", "site"])

    @validator("name")
    def validate_name(cls, value):
        """Ensure name does not contain weird characters"""
        return normalize_name(value)

validate_name(value)

Ensure name does not contain weird characters

Source code in server/settings/settings.py
141
142
143
144
@validator("name")
def validate_name(cls, value):
    """Ensure name does not contain weird characters"""
    return normalize_name(value)

defined_sited_enum_resolver(addon, settings_variant='production', project_name=None) async

Provides list of names of configured syncable sites.

Source code in server/settings/settings.py
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
async def defined_sited_enum_resolver(
    addon: "BaseServerAddon",
    settings_variant: str = "production",
    project_name: str | None = None,
) -> list[str]:
    """Provides list of names of configured syncable sites."""
    if addon is None:
        return []

    if project_name:
        settings = await addon.get_project_settings(project_name=project_name,
                                                    variant=settings_variant)
    else:
        settings =  await addon.get_studio_settings(variant=settings_variant)

    sites = ["local", "studio"]
    for site_model in settings.sites:
        sites.append(site_model.name)

    return sites

provider_resolver()

Return a list of value/label dicts for the enumerator.

Returning a list of dicts is used to allow for a custom label to be displayed in the UI.

Source code in server/settings/settings.py
59
60
61
62
63
64
65
66
67
68
69
70
71
72
def provider_resolver():
    """Return a list of value/label dicts for the enumerator.

    Returning a list of dicts is used to allow for a custom label to be
    displayed in the UI.
    """
    provider_dict = {
        "gdrive": "Google Drive",
        "local_drive": "Local Drive",
        "dropbox": "Dropbox",
        "sftp": "SFTP"
    }
    return [{"value": f"{key}", "label": f"{label}"}
            for key, label in provider_dict.items()]