# Python client SDK for Tutti.ai
## Installation
```
pip install tutti-client
```
## Importing Module
```python
from tutti_client import TuttiDuct
duct = TuttiDuct()
```
## Usage
For example, to obtain a list of your Tutti projects:
```python
import asyncio
from tutti_client import TuttiDuct
import logging
logger = logging.getLogger(__name__)
class MyPlayground:
def __init__(self):
self.tutti = TuttiDuct()
async def catchall_event_handler(self, rid, eid, data):
print(eid, data)
async def on_open(self):
await self.tutti.controllers["resource"].list_projects()
async def main(self):
self.tutti.add_onopen_handler(self.on_open)
self.tutti.event_listeners["resource"].on("list_projects", self.on_list_projects)
await self.tutti.open("http://localhost/ducts/wsd")
async def on_list_projects(self, data, is_error):
if is_error:
# handle error here
'''
data = {
Status: "Error",
Reason: str,
Timestamp: {
"Requested": int,
"Responded": int
}
}
'''
else:
print(data)
# do anything here
'''
data = {
Contents: {
...
},
Timestamp: {
"Requested": int,
"Responded": int
}
}
'''
if __name__=="__main__":
pg = MyPlayground()
asyncio.run(pg.main())
```
## Handling Events with Event Listeners
`tutti.event_listeners["{source}"].on("{method}", handler_func)`
## Executing Methods with Controllers
`tutti.controllers["{source}"].{method}([ ... args])`
## Sources
- `resource` ... Tutti-relevant resources (projects, templates, nanotasks, answers, ...)
- `mturk` ... Amazon Mechanical Turk-relevant operations (wrapper methods for [Python Boto3 MTurk API](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/mturk.html))
## Methods
### Resource
#### get_event_history
- Parameters: None
- Gets all input parameter histories set by setEventHistory.
#### set_event_history
- Parameters: `eid`, `query`
- Sets input parameters to a history.
#### list_projects
- Parameters: None
- Lists Tutti projects.
#### create_project
- Parameters: `ProjectName`
- Creates a Tutti project.
#### list_templates
- Parameters: `ProjectName`
- Lists Tutti templates for the specified project.
#### get_responses_for_template
- Parameters: `ProjectName`, `TemplateName`
- Lists all worker responses for the specified template.
#### get_responses_for_nanotask
- Parameters: `NanotaskId`
#### create_templates
- Parameters: `ProjectName`, `TemplateNames`, `PresetEnvName`, `PresetTemplateName`
#### list_template_presets
- Parameters: None
#### get_project_scheme
- Parameters: `ProjectName`, `Cached`
#### get_nanotasks
- Parameters: `ProjectName`, `TemplateName`
#### delete_nanotasks
- Parameters: `ProjectName`, `TemplateName`, `NanotaskIds`
#### update_nanotask_num_assignable
- Parameters: `ProjectName`, `TemplateName`, `NanotaskId`, `NumAssignable`
#### upload_nanotasks
- Parameters: `ProjectName`, `TemplateName`, `Nanotasks`, `NumAssignable`, `Priority`, `TagName`
#### get_template_node
- Parameters: `Target`, `WorkSessionId`, `NodeSessionId`
#### create_session
- Parameters: `ProjectName`, `PlatformWorkerId`, `ClientToken`, `Platform`
#### set_response
- Parameters: `WorkSessionId`, `NodeSessionId`, `Answers`
#### check_platform_worker_id_existence_for_project
- Parameters: `ProjectName`, `Platform`, `PlatformWorkerId`
### MTurk
#### get_credentials
- Parameters: None
#### set_credentials
- Parameters: `AccessKeyId`, `SecretAccessKey`
#### set_sandbox
- Parameters: `Enabled`
#### clear_credentials
- Parameters: None
#### delete_qualifications
- Parameters: `QualificationTypeIds`
#### list_qualifications
- Parameters: None
#### list_workers_with_qualification_type
- Parameters: `QualificationTypeId`
#### create_qualification
- Parameters: `QualificationTypeParams`
#### associate_qualifications_with_workers
- Parameters: `AssociateQualificationParams`
#### list_workers
- Parameters: None
#### notify_workers
- Parameters: `Subject`, `MessageText`, `SendEmailWorkerIds`
#### create_hit_type
- Parameters: `CreateHITTypeParams`, `HITTypeQualificationTypeId`
#### create_hits_with_hit_type
- Parameters: `ProjectName`, `NumHITs`, `CreateHITsWithHITTypeParams`
#### get_hit_types
- Parameters: `HITTypeIds`
#### expire_hits
- Parameters: `HITIds`
#### delete_hits
- Parameters: `HITIds`
#### list_hits
- Parameters: `Cached`
#### list_hits_for_hit_type
- Parameters: `HITTypeId=null`, `Cached=true`
#### list_assignments
- Parameters: `Cached`
#### list_assignments_for_hits
- Parameters: `HITIds`
#### approve_assignments
- Parameters: `AssignmentIds`, `RequesterFeedback`
#### reject_assignments
- Parameters: `AssignmentIds`, `RequesterFeedback`
#### get_assignments
- Parameters: `AssignmentIds`
Raw data
{
"_id": null,
"home_page": "https://github.com/iflb/tutti-client-python",
"name": "tutti-client",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "crowdsourcing annotation framework asyncio",
"author": "Intelligent Framework Lab",
"author_email": "saito@iflab.tokyo",
"download_url": "https://files.pythonhosted.org/packages/8c/e7/a27b024d62ccc33711718b92d937f54605062d5fb60dca16b4a89101af37/tutti-client-0.3.8.tar.gz",
"platform": null,
"description": "# Python client SDK for Tutti.ai\n\n## Installation\n\n```\npip install tutti-client\n```\n\n## Importing Module\n\n```python\nfrom tutti_client import TuttiDuct\nduct = TuttiDuct()\n```\n\n## Usage\n\nFor example, to obtain a list of your Tutti projects:\n\n```python\nimport asyncio\nfrom tutti_client import TuttiDuct\n\nimport logging\nlogger = logging.getLogger(__name__)\n\nclass MyPlayground:\n def __init__(self):\n self.tutti = TuttiDuct()\n\n async def catchall_event_handler(self, rid, eid, data):\n print(eid, data)\n\n async def on_open(self):\n await self.tutti.controllers[\"resource\"].list_projects()\n\n async def main(self):\n self.tutti.add_onopen_handler(self.on_open)\n self.tutti.event_listeners[\"resource\"].on(\"list_projects\", self.on_list_projects)\n\n await self.tutti.open(\"http://localhost/ducts/wsd\")\n\n async def on_list_projects(self, data, is_error):\n if is_error:\n # handle error here\n\n '''\n data = {\n Status: \"Error\",\n Reason: str,\n Timestamp: {\n \"Requested\": int,\n \"Responded\": int\n }\n }\n '''\n else:\n print(data)\n # do anything here\n\n '''\n data = {\n Contents: {\n ...\n },\n Timestamp: {\n \"Requested\": int,\n \"Responded\": int\n }\n }\n '''\n\n\nif __name__==\"__main__\":\n pg = MyPlayground()\n asyncio.run(pg.main())\n```\n\n## Handling Events with Event Listeners\n\n`tutti.event_listeners[\"{source}\"].on(\"{method}\", handler_func)`\n\n## Executing Methods with Controllers\n\n`tutti.controllers[\"{source}\"].{method}([ ... args])`\n\n## Sources\n\n- `resource` ... Tutti-relevant resources (projects, templates, nanotasks, answers, ...)\n- `mturk` ... Amazon Mechanical Turk-relevant operations (wrapper methods for [Python Boto3 MTurk API](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/mturk.html))\n\n## Methods\n\n### Resource\n\n#### get_event_history\n- Parameters: None\n- Gets all input parameter histories set by setEventHistory.\n\n#### set_event_history\n- Parameters: `eid`, `query`\n- Sets input parameters to a history.\n\n#### list_projects\n- Parameters: None\n- Lists Tutti projects.\n\n#### create_project\n- Parameters: `ProjectName`\n- Creates a Tutti project.\n\n#### list_templates\n- Parameters: `ProjectName`\n- Lists Tutti templates for the specified project.\n\n#### get_responses_for_template\n- Parameters: `ProjectName`, `TemplateName`\n- Lists all worker responses for the specified template.\n\n#### get_responses_for_nanotask\n- Parameters: `NanotaskId`\n\n#### create_templates\n- Parameters: `ProjectName`, `TemplateNames`, `PresetEnvName`, `PresetTemplateName`\n\n#### list_template_presets\n- Parameters: None\n\n#### get_project_scheme\n- Parameters: `ProjectName`, `Cached`\n\n#### get_nanotasks\n- Parameters: `ProjectName`, `TemplateName`\n\n#### delete_nanotasks\n- Parameters: `ProjectName`, `TemplateName`, `NanotaskIds`\n\n#### update_nanotask_num_assignable\n- Parameters: `ProjectName`, `TemplateName`, `NanotaskId`, `NumAssignable`\n\n#### upload_nanotasks\n- Parameters: `ProjectName`, `TemplateName`, `Nanotasks`, `NumAssignable`, `Priority`, `TagName`\n\n#### get_template_node\n- Parameters: `Target`, `WorkSessionId`, `NodeSessionId`\n\n#### create_session\n- Parameters: `ProjectName`, `PlatformWorkerId`, `ClientToken`, `Platform`\n\n#### set_response\n- Parameters: `WorkSessionId`, `NodeSessionId`, `Answers`\n\n#### check_platform_worker_id_existence_for_project\n- Parameters: `ProjectName`, `Platform`, `PlatformWorkerId`\n\n\n \n### MTurk\n\n#### get_credentials\n- Parameters: None\n\n#### set_credentials\n- Parameters: `AccessKeyId`, `SecretAccessKey`\n\n#### set_sandbox\n- Parameters: `Enabled`\n\n#### clear_credentials\n- Parameters: None\n\n#### delete_qualifications\n- Parameters: `QualificationTypeIds`\n\n#### list_qualifications\n- Parameters: None\n\n#### list_workers_with_qualification_type\n- Parameters: `QualificationTypeId`\n\n#### create_qualification\n- Parameters: `QualificationTypeParams`\n\n#### associate_qualifications_with_workers\n- Parameters: `AssociateQualificationParams`\n\n#### list_workers\n- Parameters: None\n\n#### notify_workers\n- Parameters: `Subject`, `MessageText`, `SendEmailWorkerIds`\n\n#### create_hit_type\n- Parameters: `CreateHITTypeParams`, `HITTypeQualificationTypeId`\n\n#### create_hits_with_hit_type\n- Parameters: `ProjectName`, `NumHITs`, `CreateHITsWithHITTypeParams`\n\n#### get_hit_types\n- Parameters: `HITTypeIds`\n\n#### expire_hits\n- Parameters: `HITIds`\n\n#### delete_hits\n- Parameters: `HITIds`\n\n#### list_hits\n- Parameters: `Cached`\n\n#### list_hits_for_hit_type\n- Parameters: `HITTypeId=null`, `Cached=true`\n\n#### list_assignments\n- Parameters: `Cached`\n\n#### list_assignments_for_hits\n- Parameters: `HITIds`\n\n#### approve_assignments\n- Parameters: `AssignmentIds`, `RequesterFeedback`\n\n#### reject_assignments\n- Parameters: `AssignmentIds`, `RequesterFeedback`\n\n#### get_assignments\n- Parameters: `AssignmentIds`\n",
"bugtrack_url": null,
"license": "",
"summary": "Python client library for Tutti.ai",
"version": "0.3.8",
"split_keywords": [
"crowdsourcing",
"annotation",
"framework",
"asyncio"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "1acb90595af4e97fc5bdf845e3d6dcce420930f68bcb29638b9c454c0fc9eaad",
"md5": "f55a1f95c4a97bc60e0d356eacaecd72",
"sha256": "afa23d7e32bbae355603341d6e20b5297c51b019561ac7eed6ee73c2018cfe4d"
},
"downloads": -1,
"filename": "tutti_client-0.3.8-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "f55a1f95c4a97bc60e0d356eacaecd72",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=3.6",
"size": 15364,
"upload_time": "2023-04-17T06:23:04",
"upload_time_iso_8601": "2023-04-17T06:23:04.942481Z",
"url": "https://files.pythonhosted.org/packages/1a/cb/90595af4e97fc5bdf845e3d6dcce420930f68bcb29638b9c454c0fc9eaad/tutti_client-0.3.8-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8ce7a27b024d62ccc33711718b92d937f54605062d5fb60dca16b4a89101af37",
"md5": "d87e2b37a0d83436792054aebf0efba9",
"sha256": "f27e7b6a7d330ca9b30465d3e4eedd584012fef9f23c504fdf398115baee4ca9"
},
"downloads": -1,
"filename": "tutti-client-0.3.8.tar.gz",
"has_sig": false,
"md5_digest": "d87e2b37a0d83436792054aebf0efba9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 18788,
"upload_time": "2023-04-17T06:23:07",
"upload_time_iso_8601": "2023-04-17T06:23:07.536452Z",
"url": "https://files.pythonhosted.org/packages/8c/e7/a27b024d62ccc33711718b92d937f54605062d5fb60dca16b4a89101af37/tutti-client-0.3.8.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-04-17 06:23:07",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "iflb",
"github_project": "tutti-client-python",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "tutti-client"
}