如何使用Python在Asana中创建包含任务的新项目?

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并获得一个新项目?

And*_*nan 5

看起来您正在使用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)