Examples¶
Creating a plugin using SFTPAccessor¶
# :coding: utf-8
# :copyright: Copyright (c) 2014-2022 ftrack
import ftrack_api
import ftrack_api.entity.location
import ftrack_api.accessor.disk
import ftrack_api.structure.id
import logging
import os
import sys
import functools
NAME = "ftrack-sftp-accessor"
VERSION = "0.1.0"
logger = logging.getLogger("{}".format(NAME.replace("-", "_")))
def configure_location(event):
from ftrack_sftp_accessor.sftp import SFTPAccessor
"""Configure locations for session."""
session = event["data"]["session"]
# Find location(s) and customise instances.
location = session.query('Location where name is "studio.sftp"').one()
hostname = os.getenv("FTRACK_SFTP_ACCESSOR_HOSTNAME", None)
port = os.getenv("FTRACK_SFTP_ACCESSOR_PORT", 22)
username = os.getenv("FTRACK_SFTP_ACCESSOR_USERNAME", None)
password = os.getenv("FTRACK_SFTP_ACCESSOR_PASSWORD", None)
folder = os.getenv("FTRACK_SFTP_ACCESSOR_FOLDER", None)
# Setup accessor to use bucket
location.accessor = SFTPAccessor(
hostname, username, port=port, password=password, folder=folder
)
location.structure = ftrack_api.structure.standard.StandardStructure()
location.priority = 30
# Setup any other locations you require
ftrack_location = session.query('Location where name is "ftrack.connect"').one()
ftrack_location.structure = ftrack_api.structure.standard.StandardStructure()
ftrack_location.accessor = ftrack_api.accessor.disk.DiskAccessor(
prefix="/Users/ian/ftrack_storage"
)
def register(session):
if not isinstance(session, ftrack_api.session.Session):
return
logging.info("Registering sftp accessor")
session.event_hub.subscribe(
"topic=ftrack.api.session.configure-location and source.user.username={}".format(
session.api_user
),
configure_location,
)
Starting FTrack using Plugin¶
# :coding: utf-8
# :copyright: Copyright (c) 2014-2022 ftrack
import ftrack_api.structure.id
import sys
import os
import logging
"""
Starts ftrack using a plugin which registers a location
"""
logging.basicConfig()
plugin_logger = logging.getLogger()
plugin_logger.setLevel(logging.INFO)
root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
sys.path.append(os.path.join(root_dir, "ftrack_sftp_accessor"))
plugin_paths = [os.path.join(root_dir, "plugins")]
session = ftrack_api.Session(plugin_paths=plugin_paths, auto_connect_event_hub=True)
session.event_hub.wait()
Uploading Components¶
# :coding: utf-8
# :copyright: Copyright (c) 2014-2022 ftrack
import ftrack_api.structure.id
from ftrack_sftp_accessor.sftp import SFTPAccessor
import os
session = ftrack_api.Session()
location = session.query('Location where name is "studio.sftp"').one()
hostname = os.getenv("FTRACK_SFTP_ACCESSOR_HOSTNAME", None)
username = os.getenv("FTRACK_SFTP_ACCESSOR_USERNAME", None)
port = os.getenv("FTRACK_SFTP_ACCESSOR_PORT", 22)
folder = os.getenv("FTRACK_SFTP_ACCESSOR_FOLDER", "ftrack")
# Setup accessor
location.accessor = SFTPAccessor(hostname, username, port=port, folder=folder)
location.structure = ftrack_api.structure.standard.StandardStructure()
location.priority = 30
version = session.get("AssetVersion", "83b88aa2-b739-4ed1-b840-2ccdac7da271")
version.create_component(
path="/Users/ian/Downloads/film0001_512kb.mp4", location=location
)
Downloading Components¶
# :coding: utf-8
# :copyright: Copyright (c) 2014-2022 ftrack
import ftrack_api.structure.id
import ftrack_api.accessor.disk
import os
from ftrack_sftp_accessor.sftp import SFTPAccessor
"""
Copies a component from a sftp location to a local location
"""
session = ftrack_api.Session()
sftp_location = session.ensure("Location", {"name": "studio.sftp"})
hostname = os.getenv("FTRACK_SFTP_ACCESSOR_HOSTNAME", None)
username = os.getenv("FTRACK_SFTP_ACCESSOR_USERNAME", None)
port = os.getenv("FTRACK_SFTP_ACCESSOR_PORT", 22)
folder = os.getenv("FTRACK_SFTP_ACCESSOR_FOLDER", "ftrack")
sftp_location.accessor = SFTPAccessor(hostname, username, port=port, folder=folder)
sftp_location.structure = ftrack_api.structure.standard.StandardStructure()
sftp_location.priority = 30
ftrack_location = session.ensure("Location", {"name": "ftrack.connect"})
ftrack_location.structure = ftrack_api.structure.standard.StandardStructure()
ftrack_location.accessor = ftrack_api.accessor.disk.DiskAccessor(
prefix="/Users/ian/ftrack_storage"
)
version = session.get("AssetVersion", "9d5d86b7-46b5-49fc-993c-03ce885a6950")
for component in version["components"]:
if component["name"] == "main":
ftrack_location.add_component(component, sftp_location)