{ "info": { "author": "Lean Testing", "author_email": "support@crowdsourcedtesting.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: Other/Proprietary License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Software Development :: Build Tools" ], "description": "Lean Testing Python SDK\n=======================\n\n**Python client for `Lean Testing\nAPI `__**\n\nYou can sign up for a Lean Testing account at https://leantesting.com.\n\nRequirements\n------------\n\n- Python 3.0 or greater\n\nInstallation\n------------\n\nYou don't need this source code unless you want to modify the package.\nIf you just want to use the Lean Testing Python SDK, you should run:\n\n::\n\n pip install --upgrade leantesting\n\nor\n\n::\n\n easy_install --upgrade leantesting\n\nSee http://www.pip-installer.org/en/latest/index.html for instructions\non installing pip. If you are on a system with easy\\_install but not\npip, you can use easy\\_install instead. If you're not using virtualenv,\nyou may have to prefix those commands with ``sudo``. You can learn more\nabout virtualenv at http://www.virtualenv.org/\n\nTo install from source, run:\n\n::\n\n python setup.py install\n\nUsage\n-----\n\n- Including Lean Testing Python SDK\n\n .. code:: python\n\n from leantesting.Client import Client as LeanTestingClient\n\n- Creating a new instance\n\n .. code:: python\n\n LT = LeanTestingClient()\n\n--------------\n\n- Get Current **Token**\n\n .. code:: python\n\n leantesting.getCurrentToken()\n\n- Attach New **Token**\n\n .. code:: python\n\n leantesting.attachToken('9ErdKZXpGPnvHuJ9di92eAFqrp14GKvfHMyclGGh')\n\n- Generate **Authorization URL**\n\n .. code:: python\n\n generatedURL = leantesting.auth.generateAuthLink(\n 'DHxaSvtpl91Xos4vb7d0GKkXRu0GJxd5Rdha2HHx',\n 'https://www.example.com/appurl/',\n 'admin',\n 'a3ahdh2iqhdasdasfdjahf26'\n )\n print( generatedURL )\n\n- Exchange Authorization Code For **Access TOKEN**\n\n .. code:: python\n\n token = leantesting.auth.exchangeAuthCode(\n 'DHxaSvtpl91Xos4vb7d0GKkXRu0GJxd5Rdha2HHx',\n 'DpOZxNbeL1arVbjUINoA9pOhgS8FNQsOkpE4CtXU',\n 'authorization_code',\n 'sOgY2DT47B2K0bqashnk0E6wUaYgbbspwdy9kGrk',\n 'https://www.example.com/appurl/'\n )\n print( token )\n\n--------------\n\n- Get **User** Information\n\n .. code:: python\n\n leantesting.user.getInformation()\n\n- Get **User** Organizations\n\n .. code:: python\n\n leantesting.user.organizations.all().toArray()\n\n--------------\n\n- List All **Projects**\n\n .. code:: python\n\n leantesting.projects.all().toArray()\n\n- Create A New **Project**\n\n .. code:: python\n\n newProject = leantesting.projects.create({\n 'name': 'Project135',\n 'organization_id': 5779\n })\n print( newProject.data )\n\n- Retrieve An Existing **Project**\n\n .. code:: python\n\n leantesting.projects.find(3515).data\n\n- List **Project Sections**\n\n .. code:: python\n\n leantesting.projects.find(3515).sections.all().toArray()\n\n- Adding A **Project Section**\n\n .. code:: python\n\n newSection = leantesting.projects.find(3515).sections.create({\n 'name': 'SectionName'\n })\n print( newSection.data )\n\n- List **Project Versions**\n\n .. code:: python\n\n leantesting.projects.find(3515).versions.all().toArray()\n\n- Adding A **Project Version**\n\n .. code:: python\n\n newVersion = leantesting.projects.find(3515).versions.create({\n 'number': 'v0.3.1104'\n })\n print( newVersion.data )\n\n- List **Project Users**\n\n .. code:: python\n\n leantesting.projects.find(3515).users.all().toArray()\n\n- List **Bug Type Scheme**\n\n .. code:: python\n\n leantesting.projects.find(3515).bugTypeScheme.all().toArray()\n\n- List **Bug Status Scheme**\n\n .. code:: python\n\n leantesting.projects.find(3515).bugStatusScheme.all().toArray()\n\n- List **Bug Severity Scheme**\n\n .. code:: python\n\n leantesting.projects.find(3515).bugSeverityScheme.all().toArray()\n\n- List **Bug Reproducibility Scheme**\n\n .. code:: python\n\n leantesting.projects.find(3515).bugReproducibilityScheme.all().toArray()\n\n--------------\n\n- List All **Bugs** In A Project\n\n .. code:: python\n\n leantesting.projects.find(3515).bugs.all().toArray()\n\n- Create A New **Bug**\n\n .. code:: python\n\n newBug = leantesting.projects.find(3515).bugs.create({\n 'title': 'Something bad happened...',\n 'status_id': 1,\n 'severity_id': 2,\n 'project_version_id': 10242\n })\n print( newBug.data )\n\n- Retrieve Existing **Bug**\n\n .. code:: python\n\n leantesting.bugs.find(38483).data\n\n- Update A **Bug**\n\n .. code:: python\n\n updatedBug = leantesting.bugs.update(118622, {\n 'title': 'Updated title',\n 'status_id': 1,\n 'severity_id': 2,\n 'project_version_id': 10242\n })\n print( updatedBug.data )\n\n- Delete A **Bug**\n\n .. code:: python\n\n leantesting.bugs.delete(118622)\n\n--------------\n\n- List Bug **Comments**\n\n .. code:: python\n\n leantesting.bugs.find(38483).comments.all().toArray()\n\n--------------\n\n- List Bug **Attachments**\n\n .. code:: python\n\n leantesting.bugs.find(38483).attachments.all().toArray()\n\n- Upload An **Attachment**\n\n .. code:: python\n\n filePath = '/place/Downloads/Images/1370240743_2294218.jpg'\n newAttachment = leantesting.bugs.find(38483).attachments.upload(filePath)\n print( newAttachment.data )\n\n- Retrieve An Existing **Attachment**\n\n .. code:: python\n\n leantesting.attachments.find(21515).data\n\n- Delete An **Attachment**\n\n .. code:: python\n\n leantesting.attachments.delete(75258)\n\n--------------\n\n- List **Platform Types**\n\n .. code:: python\n\n leantesting.platform.types.all().toArray()\n\n- Retrieve **Platform Type**\n\n .. code:: python\n\n leantesting.platform.types.find(1).data\n\n- List **Platform Devices**\n\n .. code:: python\n\n leantesting.platform.types.find(1).devices.all().toArray()\n\n- Retrieve Existing **Device**\n\n .. code:: python\n\n leantesting.platform.devices.find(11).data\n\n- List **OS**\n\n .. code:: python\n\n leantesting.platform.os.all().toArray()\n\n- Retrieve Existing **OS**\n\n .. code:: python\n\n leantesting.platform.os.find(1).data\n\n- List **OS Versions**\n\n .. code:: python\n\n leantesting.platform.os.find(1).versions.all().toArray()\n\n- List **Browsers**\n\n .. code:: python\n\n leantesting.platform.browsers.all().toArray()\n\n- Retrieve Existing **Browser**\n\n .. code:: python\n\n leantesting.platform.browsers.find(1).data\n\n- List **Browser Versions**\n\n .. code:: python\n\n leantesting.platform.browsers.find(1).versions.all().toArray()\n\n--------------\n\n- Using **Filters**\n\n .. code:: python\n\n leantesting.projects.find(3515).bugs.all({'limit': 2, 'page': 5}).toArray()\n\n- **Entity List** Functions\n\n .. code:: python\n\n browsers = leantesting.platform.browsers.all()\n print( browsers.total() )\n print( browsers.totalPages() )\n print( browsers.count() )\n print( browsers.toArray() )\n\n- **Entity List** Iterator When used in for loops, entity lists will\n automatically cycle to first page, regardless of ``page`` filter.\n After ending the loop, the entity list will **NOT** revert to first\n page or the initial instancing ``page`` filter setting in order not\n to cause useless API request calls.\n\n .. code:: python\n\n comments = leantesting.bugs.find(38483).comments.all({'limit': 1})\n for page in comments:\n print( page )\n\n- **Entity List** Manual Iteration \\`\\`\\`python comments =\n leantesting.bugs.find(38483).comments.all({'limit': 1}) print(\n comments.toArray() )\n\nWill return false if unable to move forwards\n============================================\n\ncomments.next(); print( comments.toArray() )\n\nWill return false if already on last page\n=========================================\n\ncomments.last(); print( comments.toArray() )\n\nWill return false if unable to move backwards\n=============================================\n\ncomments.previous(); print( comments.toArray() )\n\nWill return false if already on first page\n==========================================\n\ncomments.first(); print( comments.toArray() ) \\`\\`\\`\n\nSecurity\n--------\n\nNeed to report a security vulnerability? Send us an email to\nsupport@crowdsourcedtesting.com or go directly to our security bug\nbounty site https://hackerone.com/leantesting.\n\nDevelopment\n-----------\n\nInstall dependencies:\n\n.. code:: bash\n\n pip install -e .\n\nTests\n-----\n\nInstall dependencies as mentioned above, then you can run the test\nsuite:\n\n.. code:: bash\n\n python -m unittest2 discover\n\nContributing\n------------\n\nPlease see\n`CONTRIBUTING `__\nfor details.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/crowdsourcedtesting/leantesting-python", "keywords": "development api bug tracker", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "leantesting", "package_url": "https://pypi.org/project/leantesting/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/leantesting/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/crowdsourcedtesting/leantesting-python" }, "release_url": "https://pypi.org/project/leantesting/1.2.0/", "requires_dist": null, "requires_python": null, "summary": "Lean Testing Python SDK", "version": "1.2.0" }, "last_serial": 2460263, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "c2ad82e32a4dc5166d66a48243004300", "sha256": "6f6f6f02b2a319ef81a6b4d9d8ce581bed6541816b2abc2b9ddd8e1bb1503014" }, "downloads": -1, "filename": "leantesting-1.0.0.tar.gz", "has_sig": false, "md5_digest": "c2ad82e32a4dc5166d66a48243004300", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20256, "upload_time": "2015-11-27T22:40:47", "url": "https://files.pythonhosted.org/packages/67/65/538b4619f6edd8ff376c38fab79b520a74cc35fd77364b12237189724e13/leantesting-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "c87450d558a9c538959fb2378daefed5", "sha256": "90cbcc4a0854f90aecd01938add4cecf5e35b200c1de6397bccf629e45f2e8c8" }, "downloads": -1, "filename": "leantesting-1.1.0.tar.gz", "has_sig": false, "md5_digest": "c87450d558a9c538959fb2378daefed5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21269, "upload_time": "2016-04-12T15:38:38", "url": "https://files.pythonhosted.org/packages/f6/eb/3afab9f3bf05332e76e3cd9a34b932752980f0d0e3bf6b6ef7ea93371103/leantesting-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "9a273580c6d957cb8a054e8bfd242a70", "sha256": "3fa51d3e83e268990a811d889e5dc6983764a1c53357af0d7200ec7f392c42c5" }, "downloads": -1, "filename": "leantesting-1.2.0.tar.gz", "has_sig": false, "md5_digest": "9a273580c6d957cb8a054e8bfd242a70", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23500, "upload_time": "2016-11-14T19:38:30", "url": "https://files.pythonhosted.org/packages/b1/7d/5eb1ca7dd06179a6ee078399c65b3d234ac369d951fdbc0d99d983a9411b/leantesting-1.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9a273580c6d957cb8a054e8bfd242a70", "sha256": "3fa51d3e83e268990a811d889e5dc6983764a1c53357af0d7200ec7f392c42c5" }, "downloads": -1, "filename": "leantesting-1.2.0.tar.gz", "has_sig": false, "md5_digest": "9a273580c6d957cb8a054e8bfd242a70", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23500, "upload_time": "2016-11-14T19:38:30", "url": "https://files.pythonhosted.org/packages/b1/7d/5eb1ca7dd06179a6ee078399c65b3d234ac369d951fdbc0d99d983a9411b/leantesting-1.2.0.tar.gz" } ] }