データ操作編・前編では、Shotgun APIを使用してProjectの作成、取得、更新を行う方法をご紹介しました
今回は、Projectに紐づくEntityのデータ操作方法をご紹介します
前回の記事で作成したフォルダやモジュールを使用して進めますので、
まだ前回の記事をご覧になっていない場合は、そちらから先にご覧頂ければ幸いです
Projectに紐づくEntityの特徴
Shotgunにデフォルトで用意されているEntityの中で
AssetやShot、TaskなどのEntityは、Projectと紐づける(リンクする)ことを前提に構成されています
そのため、APIで作成する際は、リンク先のProjectの情報も指定する必要があります
※指定しないで作成しようとするとエラーが出ます
それ以外は、前回の記事でProjectを操作した際の方法とほとんど同じ方法で操作出来ます
Shotgun APIでAssetを作成する
今回はAssetを作成してみます
※entity_typeを対応するものに変更すれば、ShotやTaskなどの他のEntityも作成出来ます
リンク先のProjectは、前回の記事で作成したSHOTGUN_API_STARTUPとします
Asset作成用スクリプトを作成する
テキストエディタに下記のコードをコピー&ペーストし、shotgun_api_startupフォルダの中に
create_asset.pyという名前で保存します
# -*- coding: utf-8 -*-
import sys
from shotgun import create_shotgun_api
from get_project import get_project
# 作成するProjectの名称を指定します
PROJECT_NAME = "SHOTGUN_API_STARTUP"
# 作成するAssetの名称を指定します
ASSET_NAME = "SAMPLE_ASSET"
def create_asset(shotgun_api, project_info):
# ShotgunにAssetを作成します
data = {"code": ASSET_NAME,
"description": u"このAssetは、Shotgun APIの学習用に作成されました",
"project": {"id": project_info.get("id"),
"type": project_info.get("type")}}
return shotgun_api.create(entity_type="Asset",
data=data)
def main():
shotgun_api = create_shotgun_api()
project_info = get_project(shotgun_api, PROJECT_NAME)
print(create_asset(shotgun_api, project_info[0]))
return 0
if __name__ == "__main__":
sys.exit(main())
解説
Shotgun APIを使用するためのオブジェクトの取得やProject情報の取得には、前回の記事(データ操作編・前編)で作成したスクリプトをインポートして使用します
from shotgun import create_shotgun_api
from get_project import get_project
Assetの作成に関してもProjectの作成の際に使用した Shotgun APIのcreate 関数を使用します
- Projectを作成する際と異なる点
- create関数に指定しているentity_typeがAssetになっている
- dataにProjectとリンクするために必要な情報を指定している
Projectとリンクするためには、projectフィールドの値として、
対象のProjectのidとtype(entity_type)を指定することでリンクが作成されます
# 作成するProjectの名称を指定します
PROJECT_NAME = "SHOTGUN_API_STARTUP"
# 作成するAssetの名称を指定します
ASSET_NAME = "SAMPLE_ASSET"
def create_asset(shotgun_api, project_info):
# ShotgunにAssetを作成します
data = {"code": ASSET_NAME,
"description": u"このAssetは、Shotgun APIの学習用に作成されました",
"project": {"id": project_info.get("id"),
"type": project_info.get("type")}}
return shotgun_api.create(entity_type="Asset",
data=data)
動作確認
動作確認をしている様子を動画にしたのでご覧頂ければと思います
ShotgunAPIでアセットを作成する方法 pic.twitter.com/tveYZQYfb9
— Tetsuya Nozawa (@lphing) January 29, 2020
手順
コマンドプロンプトを開いて、下記のコマンドを入力して実行します
※D:\shotgun_api_startupの部分は、自分の環境に合わせて変更して頂ければと思います
cd /d D:\shotgun_api_startup
python create_asset.py
実行に成功した場合は、下記のような内容が出力されます
D:\shotgun_api_startup>python create_asset.py
{'id': 2292, 'code': 'SAMPLE_ASSET', 'description': 'このAssetはShotgun APIの学習用に作成されました', 'project': {'id': 350, 'name': 'SHOTGUN_API_STARTUP', 'type': 'Project'}, 'type': 'Asset'}
ShotgunでAssetテーブルを見てみると、SAMPLE_ASSETという名前のAssetが作成されていることが確認出来るかと思います
Shotgun APIでAssetの取得、更新に関して
Shotgun APIでAssetの取得と更新を行う方法に関しては、
前回の記事のProjectの取得と更新を行う際に作成したスクリプト内の
引数等を少し変更するだけで作成出来てしまいます
下記にProjectの取得、更新時に作成したスクリプトをAsset用に変更を加えたものを載せましたので、それぞれテキストエディタにコピー&ペーストして、shotgun_api_startup フォルダに保存して下さい
Assetの取得用スクリプトの作成
下記の内容を get_asset.py という名前で保存します
# -*- coding: utf-8 -*-
import sys
from shotgun import create_shotgun_api
# 取得するAssetの名称を指定します
ASSET_NAME = "SAMPLE_ASSET"
def get_asset(shotgun_api, asset_name):
# codeがasset_nameの値に合致するものを取得対象に設定します
filters = [["code", "is", asset_name]]
# 取得したい情報が入っているフィールドのフィールドコードを指定します
fields = ["code", "description"]
# Shotgunからfiltersの条件に合致するAssetの情報を取得します
return shotgun_api.find(entity_type="Asset",
filters=filters,
fields=fields)
def main():
shotgun_api = create_shotgun_api()
print(get_asset(shotgun_api, ASSET_NAME))
return 0
if __name__ == "__main__":
sys.exit(main())
- Projectの取得用スクリプトからの主な変更点
- 取得対象の名称をSAMPLE_ASSETに変更
- entity_typeをAssetに変更
- filtersの値を[["code", "is", asset_name]]に変更
- Assetは名前を入れるためのフィールドがnameでは無くcodeになっているため
- fieldsの値を["code", "description"] に変更
- ProjectとAssetで対応するフィールドのフィールドコードが異なるため
Assetの更新用スクリプトの作成
下記の内容を update_asset.py という名前で保存します
# -*- coding: utf-8 -*-
import sys
import datetime
from shotgun import create_shotgun_api
from get_asset import get_asset
# 更新対象のAssetの名称を指定します
ASSET_NAME = "SAMPLE_ASSET"
def update_asset(shotgun_api, asset_info):
description = "このデータは、%s に更新されました" % datetime.datetime.now()
# Shotgunから取得した情報を使ってdescriptionの内容を更新します
return shotgun_api.update(entity_type=asset_info.get("type"),
entity_id=asset_info.get("id"),
data={"description": description})
def main():
shotgun_api = create_shotgun_api()
# Asset情報取得用スクリプトを使って情報を取得します
asset_info = get_asset(shotgun_api, ASSET_NAME)
print(update_asset(shotgun_api=shotgun_api,
asset_info=asset_info[0]))
return 0
if __name__ == "__main__":
sys.exit(main())
- Projectの更新用スクリプトからの主な変更点
- 更新対象の名称をSAMPLE_ASSETに変更
- update関数の引数dataの値を{"description": description}に変更
- Assetの場合は、説明内容を入れるフィールドのフィールドコードがsg_descriptionでは無くdescriptionとなっているため
取得用・更新用スクリプトの動作確認
動作確認の方法は、前回の記事の「作成したProjectの情報を取得する」と
「Projectの情報を更新(変更)する」を参考にして頂ければと思います
あとがき
今回は、Projectに紐づくEntityの中でAssetのデータ操作方法についてご紹介しました
Asset以外の別のEntityに関しても、今回作成したスクリプト内のentity_typeの値を
対応するものに変更することで別のEntityのデータ操作用スクリプトも作成出来るかと思います
ちなみに各Entityのentity_typeを確認する方法に関しては、
確認方法を動画で撮影しましたので見て頂ければと思います
エンティティタイプの確認方法 pic.twitter.com/Sd2R51cvRR
— Tetsuya Nozawa (@lphing) January 29, 2020
手順としては
- Shotgun右上のプルダウンメニューから サイト基本設定 を選択します
- エンティティのメニューを開きます
- entity_typeを確認したいEntityを探します
- 対象Entityの括弧内の文字がentity_typeです
下記の画像の赤線を引いてある箇所がentity_typeです
このページ内で各Entityの詳細設定や新しいEntityの有効化なども出来るようになっています
次回は、ShotgunとSlackを連携して、Shotgunにデータが追加された際にSlackへ通知が飛ぶような仕組みを構築する方法について紹介したいと思います