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)