快速入门

安装

因为使用了 PEP508 URL 依赖, 需求 pip 版本高于 18.1

pip install https://github.com/WuLiFang/cgtwq/archive/v3.0.0-beta.0.zip#egg=cgtwq

初始设置

从桌面客户端读取登录信息

import cgtwq

cgtwq.DesktopClient().connect()

官方库不支持这样做

手动设置

import cgtwq

token = cgtwq.login('username','password').token

# 设置服务器URL, 默认为 http://192.168.55.11
# 或者设置环境变量: `CGTEAMWORK_URL`
cgtwq.core.CONFIG.update(URL='http://192.168.199.88')

# 模块级登录标识设置
cgtwq.core.CONFIG.update(DEFAULT_TOKEN=token)

# 对象级登录标识设置, 如果未设置则会自动向上一级读取
database = cgtwq.Database('proj_sdktest')
database.token = token
module = database.module('shot')
module.token = token
select = module.select('dummy_id')
select.token = token

对应官方 cgtw2 库:

import sys,os
sys.path.append(r"c:/cgteamwork/bin/base")
import cgtw2
t_tw = cgtw2.tw("192.168.199.88","username","password")
# 之后所有操作都在 t_tw 上进行

处理字段数据

module = cgtwq.Database('proj_sdktest').module('shot', module_type='task')
select = module.filter(
    cgtwq.Field('shot.shot') == 'sc001'),
    cgtwq.Field('shot.eps_name') == 'ep01'),
    cgtwq.Field('task_name') == 'Layout'),)

# 查询单列, 返回: tuple
select['submit_file_path']

# 查询多列, 返回: cgtwq.ResultSet 对象,
# cgtwq.ResultSet 是 list 的子类,
# 内部每个元素都是 list 和每个条目对应
# 内部 list 值的顺序和输入顺序相同
# 可使用 ResultSet.column('#id') 得到指定列的 tuple
select.get_fields('#id', 'submit_file_path')

# 设置单列
select['shot.frame'] = '3333'

# 设置多列
select.set_fields(**{'shot.frame': '3333'})

对应官方 cgtw2 库:

t_id_list = t_tw.task.get_id(
    'proj_sdktest','shot',
    [["shot.shot","=","sc001"],
    'and',['shot.eps_name','=','ep01'],
    'and',['task.task_name','=','Layout']])

# 查询多列 返回: list[dict]
# 字典的键为输入的字段加上'id'
t_tw.task.get('proj_sdktest', "shot",t_id_list, ['task.submit_file_path'])

# 设置多列
t_tw.task.set('proj_sdktest',"shot", t_id_list, {'shot.frame':'3333'})

管理任务状态

module = cgtwq.Database('proj_sdktest').module('shot', module_type='task')
select = module.filter(
    cgtwq.Field('shot.shot') == 'sc001'),
    cgtwq.Field('shot.eps_name') == 'ep01'),
    cgtwq.Field('task_name') == 'Layout'),)

# 提交
select.flow.submit(['d:/1.jpg'])
# 通过
select.flow.approve('leader_status')
# 返修
select.flow.retake('leader_status')
# 关闭
select.flow.close('leader_status')
# 其他状态
select.flow.update('leader_status', 'other')

对应官方 cgtw2 库:

t_id_list = t_tw.task.get_id(
    'proj_sdktest','shot',
    [["shot.shot","=","sc001"],
    'and',['shot.eps_name','=','ep01'],
    'and',['task.task_name','=','Layout']])

# 提交
t_tw.task.submit('proj_sdktest',"shot", t_id_list[0], ['d:/1.jpg'])
# 通过
t_tw.task.update_flow('proj_sdktest',"shot", t_id_list[0], 'task.leader_status', 'Approve')
# 返修
t_tw.task.update_flow('proj_sdktest',"shot", t_id_list[0], 'task.leader_status', 'Retake')
# 关闭
t_tw.task.update_flow('proj_sdktest',"shot", t_id_list[0], 'task.leader_status', 'Close')
# 其他状态
t_tw.task.update_flow('proj_sdktest',"shot", t_id_list[0], 'task.leader_status', 'other')
# 以上函数都需要检查函数返回值为True, 不能用捕获异常的方式

获取当前客户端所选条目

client = cgtwq.DesktopClient()
select = client.selection()
# select 为 cgtwq.Selection 对象
# cgtwq.Selection 是 tuple 的子类
# 可以直接在上面进行操作

对应官方 cgtw2 库:

t_tw = cgtw2.tw()

id_list = t_tw.client.get_id()
# id_list 为 list
# 作为其他函数的参数使用

存储数据

database = cgtwq.Database('proj_sdktest')
# 用户信息
database.userdata['test'] = 'data'
database.userdata['test']
# 数据库信息
database.metadata['test'] = 'data'
database.metadata['test']

对应官方 cgtw2 库:

# 用户信息
t_tw.api_data.set("proj_sdktest", "test", "data")
t_tw.api_data.get("proj_sdktest", "test")
# 数据库信息
t_tw.api_data.set("proj_sdktest", "test", "data", False)
t_tw.api_data.get("proj_sdktest", "test", False)

获取登录信息

account = cgtwq.login('username','password') # type: namedtuple
account.token
account.account
account.account_id
account.remote_ip
account.name

对应官方 cgtw2 库:

t_tw.login.token()
t_tw.login.account()
t_tw.login.account_id()
t_tw.login.http_server_ip()
# 无法获取中文用户名