Zac*_*aum 4 python asana asana-connect
我看到一些有关如何使用API创建任务的问题,但我想知道如何创建一个新项目.
每次我想创建一个新项目时,我都有预定的格式来创建一个新项目.我有特定的任务,每个任务都有自己的子任务.现在我在Asana上有一个模板,每次我想创建一个新项目时,我都会去那个项目并复制它并将其重命名为我当前的项目.
有没有人知道使用Python自动执行此操作的方法,这样我就可以运行脚本并输入项目名称的详细信息,它将自动在Asana上创建一个新项目(这样,如果我需要制作5项目一下子我可以列出所有项目名称并循环遍历所有项目名称)?
我知道你需要一个密钥,我有一些名为API_KEY的东西,长度为32个字符.
ADD ON:这是我在Python中使用的代码,用于访问Asana中我工作区中的所有任务和子任务:
import asana
api_key = '################################' //my private key goes here
client = asana.Client.basic_auth(api_key)
me = client.users.me()
all_projects = next(workspace for workspace in me['workspaces'])
projects = client.projects.find_by_workspace(all_projects['id'], iterator_type=None)
for project in projects:
if 'Template' not in project['name']:
continue
print(project['name'])
project_id = project['id']
tasks = client.tasks.find_by_project(project_id, iterator_type=None)
for task in tasks:
print(" " + task['name'])
task_id = task['id']
task_subtasks = client.tasks.subtasks(task_id, full_payload=True)
for subtask in task_subtasks:
print(" " + subtask['name'])
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到了他们的标题中包含"模板"一词的项目的所有任务和子任务.所以,这是如何阅读,如果我以JSON格式保存所有这些,那么每次我想创建一个新项目时,我只能上传该JSON并获得一个新项目?
看起来您正在使用python-asana客户端库.该库提供了一个很好的包装器,可以实现访问Asana API的最佳实践.我鼓励您阅读文档以充分了解其设计和功能.
创建项目需要工作空间或组织的上下文,并且在组织的情况下还需要项目的团队的上下文属于该项目.
以下代码使用相同的库在"Moon Landing"工作区中创建项目,如果工作区是将项目放入"Astronauts"团队的组织.
import asana
client = asana.Client.basic_auth('ASANA_API_KEY')
workspaces = client.workspaces.find_all({"opt_fields": "is_organization, name"})
workspace = next(workspace for workspace in workspaces if workspace['name'] == 'Moon Landing')
project = {'name':'Training','workspace': workspace['id']}
if workspace['is_organization'] :
teams = client.teams.find_by_organization(workspace['id'])
team = next(team for team in teams if team['name'] == 'Astronauts')
project['team'] = team['id']
training = client.projects.create(project)
Run Code Online (Sandbox Code Playgroud)
一旦创建了"Training"项目,就可以像这样向该项目添加任务.
task = client.tasks.create_in_workspace(workspace['id'], {'projects': [training['id']], 'name': 'Learn to fly space craft'})
Run Code Online (Sandbox Code Playgroud)
然后,添加子任务
client.tasks.add_subtask(task['id'], {'name': 'Turning it on'})
Run Code Online (Sandbox Code Playgroud)