غلاف التصريح ، الموجهة نحو الكائن لاستعلامات ftrack. تفاعلات قوية على الطراز الوظيفي مع المجموعات الناتجة.
يعتمد التتبع على Ftrack وبرامج Python API الخاصة به في إدارة المشاريع وتتبع الإنتاج المصمم خصيصًا لصناعة الوسائط والترفيه. يتم استخدامه بشكل شائع في مجالات الأفلام والتلفزيون والرسوم المتحركة والتأثيرات البصرية والألعاب.
تثبيت وتحديث باستخدام PIP:
pip install trackteroidلقد قررنا إنشاء واجهة برمجة تطبيقات لف حول واجهة برمجة تطبيقات Ftrack Python لمعالجة العديد من القيود والتحديات التي تنشأ عند التفاعل مباشرة مع Python API. في حين أن Ftrack Python API توفر الكثير من المرونة ، إلا أن هناك جوانب معينة يمكن أن تجعل التطوير والصيانة أكثر تعقيدًا وأقل بديهية. من خلال إنشاء واجهة برمجة تطبيقات التغليف ، نهدف إلى التغلب على هذه التحديات وتوفير تجربة أكثر تبسيطًا وصديقة للمطورين. فيما يلي الأسباب الرئيسية لهذا القرار:
تبسيط الاستعلام
تحسين أداء الاستعلام
تجريد تعقيد مخطط قاعدة البيانات
تعزيز المجموعات الناتجة
تحسين إمكانية الوصول الميداني
باختصار ، يحاول Trackeroid تمكين المطورين من خلال توفير طريقة أكثر سهولة وفعالية للتفاعل مع منصة Ftrack ، وتسريع التطوير في نهاية المطاف ، وتحسين جودة الكود ، وتعزيز تجربة المستخدم الإجمالية.
مع تتبع ...
# Calculate and display the total time duration logged for
# AssetBuild types within specified Shots and Folders.
#
# output:
# Found 9 assetbuilds.
# Found 1 assetbuilds with timelogs.
# {16.0: ['Drone Craft'],
# 'No time tracked yet.': ['Drawer Cabinet 01',
# 'Gothic Commode 01',
# 'Shelf 01',
# 'Side Table 01',
# 'Small Wooden Table 01',
# 'Vintage Wooden Drawer 01',
# 'Wooden Table 01',
# 'Wooden Table 02']}
from pprint import pprint
from trackteroid import (
Query ,
AssetBuild ,
Folder ,
Task ,
Project
)
assetbuild_collection = Query ( AssetBuild ).
by_name ( Project , "sync" , "showroom" ).
by_name ( Folder , "Asset%" , "Delivery 3" ).
get_all (
projections = [
Task . Timelog ,
Task . Timelog . duration
]
)
print (
f"Found { len ( assetbuild_collection ) } assets. n "
f"Found { assetbuild_collection . count ( lambda ac : ac . Task . Timelog ) } assetbuilds with timelogs."
)
pprint (
assetbuild_collection . group_and_map (
lambda abc : abc . Task . Timelog . fold (
0 ,
lambda current , tc : current + tc . duration [ 0 ] / 3600
) or "No time tracked yet." ,
lambda abc : abc . sort (
lambda abc : abc . name
). name
)
)... على عكس Ftrack Python API .
# Calculate and display the total time duration logged for
# AssetBuild types within specified Shots and Folders.
#
# output:
# Found 9 assetbuilds.
# Found 1 assetbuilds with timelogs.
# {16.0: ['Drone Craft'],
# 'No time tracked yet.': ['Drawer Cabinet 01',
# 'Gothic Commode 01',
# 'Shelf 01',
# 'Side Table 01',
# 'Small Wooden Table 01',
# 'Vintage Wooden Drawer 01',
# 'Wooden Table 01',
# 'Wooden Table 02']}
from pprint import pprint
import ftrack_api
session = ftrack_api . Session ( auto_connect_event_hub = False , auto_populate = False )
project_names = ( "sync" , "showroom" )
folder_specific = "Delivery 3"
folder_unspecific = "Asset%"
query = (
f"select id, name, assets.name, parent.name, project.name, "
f"assets.versions.task.timelogs, assets.versions.task.timelogs.duration "
f"from AssetBuild where project has (name in { project_names } ) "
f"and parent[Folder] has (name is ' { folder_specific } ' or name like ' { folder_unspecific } ')"
)
assetbuilds_no_duration = [ "No time tracked yet." , []]
assetbuilds_timelog_duration = [ 0 , []]
assetbuilds = session . query ( query ). all ()
for assetbuild in assetbuilds :
has_duration = False
for asset in assetbuild [ "assets" ]:
for version in asset [ "versions" ]:
durations = [ _ [ "duration" ] for _ in version [ "task" ][ "timelogs" ]]
if any ( durations ):
for duration in durations :
assetbuilds_timelog_duration [ 0 ] += duration / 3600
if not has_duration :
has_duration = True
if has_duration :
assetbuilds_timelog_duration [ 1 ]. append ( assetbuild [ "name" ])
else :
assetbuilds_no_duration [ 1 ]. append ( assetbuild [ "name" ])
print (
f"Found { len ( assetbuilds ) } assetbuilds. n "
f"Found { len ( assetbuilds_timelog_duration [ 1 ]) } assetbuilds with timelogs."
)
assetbuilds_no_duration [ 1 ]. sort ()
assetbuilds_timelog_duration [ 1 ]. sort ()
pprint (
dict (
[ assetbuilds_no_duration , assetbuilds_timelog_duration ]
)
)انظر أحدث وثائق لتفاصيل الاستخدام.