If you have set up user sandboxes in your config’s schema, by default they only get created when a user goes and saves a scene in that context. However, there can be times where you want to create them manually in a one-off step. For example
- If you would like to create them up front without the user needing to create a new scene file in workfiles on the task.
- You had to unregister existing user folders and now you want to re-register them, you will need to use a script to do this.
Here is an example of how this can be achieved:
-
Take over and modify the
get_current_login.py
core hook. Then add the following into the beginning of the execute method:folder_user = os.environ.get("FOLDERUSER") if folder_user: return folder_user
-
Then use a script like this to create the folders:
import sgtk from sgtk.util import login from tank_vendor.shotgun_authentication import ShotgunAuthenticator # For this to work we must use script authentication, otherwise the # get_current_login.py hook won't be called, as it will extract the user details # from the currently authenticated user. cdm = sgtk.util.CoreDefaultsManager() authenticator = ShotgunAuthenticator(cdm) # replace script user and key with your actual script user and key. user = authenticator.create_script_user( api_script="my_script", api_key="ihhgewe_cehvzegzXkxf0bvwf" ) # create an sgtk api instance project_id = 137 tk = sgtk.sgtk_from_entity("Project",project_id) sgtk.set_authenticated_user(user) # Now we are authenticated with a script user, we can move onto creating the folders entities = # Grab a list of entities that you wish to create folders for. # A list of user login names, this could be pulled from Shotgun users = ["philip"] for a_user in users: os.environ["FOLDERUSER"] = a_user for entity in entities: # A little bit ugly but we need to clear the current user cache so # we can create the folders for other users login.g_shotgun_current_user_cache = "unknown" # Actual engine name not important, # but an engine name does need to be supplied so that # the user folder will get created tk.create_filesystem_structure(entity['type'], entity['id'], engine="blah")