Saving and accessing extra publish data in tk_maya_actions.py

Hey folks - probably a simple question, but the answer is eluding me for some reason.

I’ve been writing custom publish plugins, and would like to pass along the name of a particular asset when publishing alembic data for a shot. Then I’d like to access this information when loading published data through the loader via a custom tk-maya_actions.py.

I believe I’m storing the data correctly, by setting it in the collector:
item.properties["asset"] = asset

and then in the publish plugin I also make sure to set it:
item.properties["asset"] = asset

But I’m not sure how to access that data in the tk-maya_actions.py
I thought it would be available in sg_publish_data, but can’t seem to find it. Any suggestions?

Cheers!
-jason

3 Likes

Hi Jason

OK so setting the asset in the collector like that looks good to me.

But then in the plugin I would expect you to extract it, not set it again? The plugin is what is responsible for publishing the data to Shotgun, so should in theory be grabbing the asset you assigned at collection time and adding that value to the PublishedFile entity that is getting created in Shotgun.

In order to access the Asset in the loader app, you would have to make sure that the Asset is set on the PublishedFile entity in Shotgun. Now you mentioned that this PublishedFile was for some alembic data on a Shot, so I assume that the PublishedFile will be attributed to the Shot in the default entity field? Do you have a custom field you are wanting to add the Asset association in?

Once you have figured out where you are going to store the Asset relationship on the PublishedFile entity, you then need to get the publish plugin to populate it. Now I don’t know how your publish plugin is set up, but if you are deriving from the publish_file.py plugin that comes with the publisher, and you’re leaving that to handle the creation of the PublishedFile then you need to set item.properties["publish_kwargs"] = {"sg_asset": asset} (where sg_asset is renamed to match the actual field code you want to add the data to in Shotgun on the PublishedFile.), then the base plugin will make sure that when it creates the PublishedFile the asset field will be populated as well.
If you’re not using hook inheritance and relying on the publish_file.py, and you’re handing the creation of the PublishedFile your self, then you just need to make sure that you set the asset on the appropriate field.

When it comes to the loader hook, the published data that is provided, will contain values for the fields that the loader asks for, and those fields are hardcoded into the app, so it won’t go and grab your custom field if you are indeed using one. If you are just setting the Asset on the entity field then that will be provided. So if you are using a custom field, then you will need to perform a second look up for the entity in Shotgun using the Shotgun API to get the extra field data.

Let me know if any of that doesn’t make sense.

3 Likes