{"id":26927,"library":"edx-tincan-py35","title":"edx-tincan-py35","description":"A Python 3 library for implementing the Tin Can API (Experience API). Version 2.0.0 is released with basic support for creating and sending statements. Low activity; last release in 2016. Use with caution as it appears to be in maintenance mode.","status":"maintenance","version":"2.0.0","language":"python","source_language":"en","source_url":"https://github.com/edx/edx-tincan-py35","tags":["tincan","xapi","learning","edx","experience-api"],"install":[{"cmd":"pip install edx-tincan-py35","lang":"bash","label":"pip install"}],"dependencies":[],"imports":[{"note":"","wrong":"","symbol":"RemoteLRS","correct":"from tincan import RemoteLRS"},{"note":"","wrong":"","symbol":"Statement","correct":"from tincan import Statement"},{"note":"","wrong":"","symbol":"Agent","correct":"from tincan import Agent"},{"note":"","wrong":"","symbol":"Activity","correct":"from tincan import Activity"}],"quickstart":{"code":"from tincan import RemoteLRS, Statement, Agent, Activity\n\nlrs = RemoteLRS(\n    endpoint='https://example.com/xapi/',\n    username='user',\n    password='pass'\n)\nagent = Agent(name='Test User', mbox='mailto:test@example.com')\nactivity = Activity(id='http://example.com/activity', definition={'name': {'en-US': 'Test Activity'}})\nstatement = Statement(\n    actor=agent,\n    verb={'id': 'http://adlnet.gov/expapi/verbs/experienced', 'display': {'en-US': 'experienced'}},\n    object=activity\n)\nresponse = lrs.save_statement(statement)\nprint(response.data)","lang":"python","description":"Create and send a simple Tin Can statement to a remote LRS."},"warnings":[{"fix":"Use `import tincan` (or `from tincan import ...`)","message":"Library name: edx-tincan-py35 but the Python package import is `tincan`. Many users mistakenly try to import `edx_tincan_py35` which does not work.","severity":"gotcha","affected_versions":"all"},{"fix":"Consider using modern alternatives like `xapi-python` or `tincanpython` if you need active support.","message":"The library is not actively maintained; last release in 2016. It may not work with Python 3.6+ without patches.","severity":"deprecated","affected_versions":">=2.0.0"},{"fix":"Use Python 3.4 or 3.5 explicitly, or upgrade to a maintained fork.","message":"The library does not support Python 2.x but the name suggests py35. It only supports Python 3.4 and 3.5. In Python 3.6+ some features like `OrderedDict` usage may break.","severity":"gotcha","affected_versions":"2.0.0"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Use import tincan or from tincan import ...","cause":"Package name in pip is 'edx-tincan-py35', but the import namespace is 'tincan'.","error":"ModuleNotFoundError: No module named 'edx_tincan_py35'"},{"fix":"Run 'pip install edx-tincan-py35' and ensure the environment is Python 3.5 or compatible.","cause":"Package not installed or installed in wrong environment.","error":"ImportError: No module named 'tincan'"},{"fix":"Use correct constructor: Activity(id='...', definition={'name': {'en-US': '...'}})","cause":"In older versions of the library, Activity's definition may be passed differently. In v2.0.0, definition is a dict, not a separate object.","error":"TypeError: __init__() got an unexpected keyword argument 'definition'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}