Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LakeFS support for binary distribution #21

Merged
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
5e8b059
update
lyon040502003 Jun 18, 2024
b2dd405
update
lyon040502003 Jun 18, 2024
af83058
changed ayon_bin_bridge_client submodule
lyon040502003 Jun 18, 2024
35a1b29
moved ayon_bin_client into ayon_usd addon, fixed imports. [this versi…
lyon040502003 Jun 18, 2024
09a150e
manny changes all work in progress, but i want to make sure that my p…
lyon040502003 Jun 21, 2024
8ebe8fe
this version is functional and only has some TODOs left, it can be us…
lyon040502003 Jun 26, 2024
1e2128c
standalone was written as stand_alone fixed
lyon040502003 Jul 3, 2024
e14fbc8
reworked server settings and implemented a functoin an varialbes to h…
lyon040502003 Jul 4, 2024
332a469
updated settings to use Ayon.LakeFs instead off local test instance
lyon040502003 Jul 4, 2024
75cc63e
implemented the proposed changes in https://github.com/ynput/ayon-us…
lyon040502003 Jul 8, 2024
73d78d5
removed issue templates as they are not handeld by this pr
lyon040502003 Jul 10, 2024
6b7e902
removed old extra submodule path to outdated ayon_bin_client and upda…
lyon040502003 Jul 10, 2024
281df29
added function for generating pinning files
lyon040502003 Jul 12, 2024
2c1da34
Revert "added function for generating pinning files"
lyon040502003 Jul 12, 2024
8a49d4d
updated ayon_bin_client to new version
lyon040502003 Jul 25, 2024
3fd6a2a
implemented a system that stroes the lakeFsTimestamp for the download…
lyon040502003 Jul 25, 2024
92040f2
updated readme to include submodule info
lyon040502003 Jul 26, 2024
05b04cf
formated README.md
Lypsolon Jul 26, 2024
8e97f7f
updated readme to include submodule info
lyon040502003 Jul 26, 2024
3d81d3c
updated ayon_bin_client to new version implemented that get_addon_set…
lyon040502003 Jul 29, 2024
89a9aeb
linux hou20 py310 was still having the wrong path
lyon040502003 Jul 30, 2024
fefb233
hou 20 windows -> changed lake fs path used to have linux path instea…
lyon040502003 Jul 31, 2024
9a9e60e
upaded with content from windows test
lyon040502003 Jul 31, 2024
ece2c85
fixed bug wehre json stored a downloaded resolver but when the file w…
lyon040502003 Jul 31, 2024
7adecb4
removed ayon_bin_client to fix submodule error
lyon040502003 Jul 31, 2024
4d650f0
added bin_client as submodule
lyon040502003 Jul 31, 2024
bf05184
Update client/ayon_usd/addon.py
Lypsolon Aug 1, 2024
99c401d
added versoin info the addon class so that ayon detects the addon ver…
lyon040502003 Aug 2, 2024
6b94106
added windows titile for Ayon_usd_addon usd lib download
lyon040502003 Aug 5, 2024
f6c9d25
improved error mesages
lyon040502003 Aug 5, 2024
8d4f73d
pulled a new create_package.py but needed to change the creation of t…
lyon040502003 Aug 5, 2024
6674503
better layout for settings also allowed for alias for app_names
lyon040502003 Aug 6, 2024
ba046da
recreated README.md file to encorparte new features.
lyon040502003 Aug 6, 2024
fcbe221
Update client/ayon_usd/hooks/pre_resolver_init.py
Lypsolon Aug 9, 2024
6d0f5a4
renamed func cache wrapper for better readability, removed old data f…
lyon040502003 Aug 9, 2024
03bdf39
updated imports
lyon040502003 Aug 9, 2024
b5ece78
removed mixed case settings names
lyon040502003 Aug 9, 2024
6bb1c51
change to SettingsField from Field
lyon040502003 Aug 9, 2024
0a7cebc
change to default_factory=list from default=[]
lyon040502003 Aug 9, 2024
7e5bdd7
updes to the settings
lyon040502003 Aug 9, 2024
fbadb9e
updes to the settings
lyon040502003 Aug 9, 2024
f02641b
seperated docs and extended them to be more usefull
lyon040502003 Aug 12, 2024
aefea7a
implemented a switch that forces the studio to accept that the addon …
lyon040502003 Aug 14, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "client/ayon_usd/ayon_bin_client"]
path = client/ayon_usd/ayon_bin_client
url = https://github.com/ynput/ayon-bin-bridge-client.git
201 changes: 201 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.

"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:

(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and

(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and

(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and

(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.

You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
57 changes: 41 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,41 +1,66 @@
# AYON USD Addon

This is AYON Addon for support of [USD](https://github.com/PixarAnimationStudios/OpenUSD).

It helps to distribute USD binaries and related tools to artist workstations and
to configure its environment.
This AYON Addon acts as an extension for the Contribution workflow utilizing the
[Open-USD](https://github.com/PixarAnimationStudios/OpenUSD) to allow for a more
automated workflow across Applications, Systems and Teams.

## Introduction

USD is a modern, open-source, scene description and file format developed by
Pixar Animation Studios. It is used for interchanging 3D graphics data between
applications and for rendering.
Pixar Animation Studios. Its an Extensive and extendable C++Lib that is used in
3D, 2D and Games Graphics in order to allow for eficient work with Sceene data.

Manny might now it from SideFs Houdini Solaris or Nvidia Omniverse but it is by
now also included in most other typical Vfx software packages.

In AYON we use it in our New Contribution workflow as the data backed to allow
cross Platform and Application workflows. This allows for better integrated
Teams and a more artist centric Workflow as artists can open the same scene in
different applications and work with the tools that serve them the best.

Goal of this addon is to help distribute USD binaries:

- USD build for supported platforms.
- USD AR2 plugin for __some__ supported DCCs.
- USD AR2 plugin for **some** supported DCCs.
- USD Tools (usdcat, usdedit, usdinfo, usdview, usdzip) coming with USD build.
- Standalone tools for AYON - USD interoperation.

## Getting Started

### Clone the Repo

> [!IMPORTANT]\
> This repository uses Git Submodules. Make sure to use the correct `git clone`\
> commands accordingly.\
> `git clone --recurse-submodules https://github.com/ynput/ayon-usd.git`\
> `git submodule update --init --recursive`

### Installation

1. Clone the repository to your local machine.
2. Run `.\tools\manage.ps1 create-env` on Windows or `./tools/manage.sh create-env` on Linux.
3. Run `.\tools\manage.ps1 build` on Windows or `./tools/manage.sh build` on Linux.
4. In AYON, go to `Studio Settings` -> `Bundles` -> `Install Addons...` and select the `./package/ayon_usd-x.x.x.zip` file.
2. Run `.\tools\manage.ps1 create-env` on Windows or
`./tools/manage.sh create-env` on Linux.
3. Run `.\tools\manage.ps1 build` on Windows or `./tools/manage.sh build` on
Linux.
4. In AYON, go to `Studio Settings` -> `Bundles` -> `Install Addons...` and
select the `./package/ayon_usd-x.x.x.zip` file.
5. Upload the Addon and let the server restart after installation is done.
6. Use new addon in your bundles.

## Admin Docs

### Configuration

In addon settings, you can configure mapping between USD Resolver plugin and you DCCs.
`App Name` is the name of the DCC application, like `maya/2025` corresponding
to the Application addon settings. Then there is a platform settings, where you
can specify the platform for which the USD Asset Resolver plugin is used.
Lastly, there is a URL to the USD Asset Resolver plugin zip matching the platform and
the DCC application.
there is a list of things that you can configure in the server settings to
achieve the optimal setup for your studio. In most cases you will probably not
need to touch them tho.

`ayon+settings://ayon_usd/asset_resolvers` is the key for the settings.

> [NOTE]\
> this addon is currently in its Alpha stage and you will need to set some
> LakeFs keys (LakeFs is the data server we use to distribute Bin data) you can
> get those Keys on our Discord server just ask one of the Ynput staff for them.
> the settings are the following:
> `ayon+settings://ayon_usd/LakeFs_Settings/access_key_id` and
> `ayon+settings://ayon_usd/LakeFs_Settings/secret_access_key`
35 changes: 6 additions & 29 deletions client/ayon_usd/__init__.py
Original file line number Diff line number Diff line change
@@ -1,38 +1,15 @@
"""USD Addon for AYON - client part."""
import os
import sys

from .addon import USD_ADDON_DIR, USDAddon
from .utils import extract_zip_file, get_download_dir, get_downloaded_usd_root
from .addon import USDAddon
from .utils import (
get_download_dir,
get_downloaded_usd_root,
)
from .ayon_bin_client.ayon_bin_distro.util.zip import extract_zip_file

__all__ = (
"USDAddon",
"get_downloaded_usd_root",
"extract_zip_file",
"get_download_dir",
)


def initialize_environment():
"""Initialize environment for USD.

This should be called from Python console or any script running
within AYON Python interpreter to initialize USD environment.
It cannot be set automatically during AYON startup because it would then
pollute environment for other processes - some of them having USD
already embedded.

"""
sys.path.append(
os.path.join(get_downloaded_usd_root(), "lib", "python"))

# Resolver settings
os.environ["PXR_PLUGINPATH_NAME"] = USD_ADDON_DIR
os.environ["USD_ASSET_RESOLVER"] = ""
os.environ["TF_DEBUG"] = "1"
os.environ["PYTHONPATH"] = os.path.join(
get_downloaded_usd_root(), "lib", "python")
os.environ["PATH"] = f"{os.getenv('PATH')}{os.path.pathsep}{os.path.join(get_downloaded_usd_root(), 'bin')}"
os.environ["AYONLOGGERLOGLVL"] = "WARN"
os.environ["AYONLOGGERSFILELOGGING"] = "1"
os.environ["AYONLOGGERSFILEPOS"] = ".log"
Loading