{"action":"created","issue":{"url":"https://api.github.com/repos/msabramo/unittest2/issues/1","labels_url":"https://api.github.com/repos/msabramo/unittest2/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/msabramo/unittest2/issues/1/comments","events_url":"https://api.github.com/repos/msabramo/unittest2/issues/1/events","html_url":"https://github.com/msabramo/unittest2/pull/1","id":32955680,"number":1,"title":"Support Python 2 and Python 3 with single source","user":{"login":"msabramo","id":305268,"avatar_url":"https://avatars.githubusercontent.com/u/305268?v=3","gravatar_id":"","url":"https://api.github.com/users/msabramo","html_url":"https://github.com/msabramo","followers_url":"https://api.github.com/users/msabramo/followers","following_url":"https://api.github.com/users/msabramo/following{/other_user}","gists_url":"https://api.github.com/users/msabramo/gists{/gist_id}","starred_url":"https://api.github.com/users/msabramo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/msabramo/subscriptions","organizations_url":"https://api.github.com/users/msabramo/orgs","repos_url":"https://api.github.com/users/msabramo/repos","events_url":"https://api.github.com/users/msabramo/events{/privacy}","received_events_url":"https://api.github.com/users/msabramo/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":7,"created_at":"2014-05-07T05:00:16Z","updated_at":"2015-01-13T16:54:00Z","closed_at":"2015-01-13T16:51:05Z","pull_request":{"url":"https://api.github.com/repos/msabramo/unittest2/pulls/1","html_url":"https://github.com/msabramo/unittest2/pull/1","diff_url":"https://github.com/msabramo/unittest2/pull/1.diff","patch_url":"https://github.com/msabramo/unittest2/pull/1.patch"},"body":"Travis CI: [![Build Status](https://travis-ci.org/msabramo/unittest2.svg?branch=py2_and_py3_single_source)](https://travis-ci.org/msabramo/unittest2)\r\nDrone.io: [![Build Status](https://drone.io/bitbucket.org/msabramo/unittest2/status.png)](https://drone.io/bitbucket.org/msabramo/unittest2/latest)\r\n\r\nRight now you have to install [`unittest2`](https://pypi.python.org/pypi/unittest2) for Python 2 and [`unittest2py3k`](https://pypi.python.org/pypi/unittest2py3k) for Python 3.\r\n\r\nThis is a little clunky when using pip requirements files and tox because you have to have two separate requirements files and two separate tox targets. E.g.:\r\n\r\n```ini\r\n# test-requirements-py2.txt\r\nunittest2\r\nmock\r\nlxml\r\n```\r\n\r\n```ini\r\n# test-requirements-py3.txt\r\nunittest2py3k\r\nmock\r\nlxml\r\n```\r\n\r\n```ini\r\n# tox.ini\r\n[testenv]\r\ndeps = -r{toxinidir}/test-requirements-py2.txt\r\ncommands = python -m discover\r\n\r\n[testenv:py33]\r\ndeps = -r{toxinidir}/test-requirements-py3.txt\r\n\r\n[testenv:py34]\r\ndeps = -r{toxinidir}/test-requirements-py3.txt\r\n```\r\n\r\nIt would be nice if there were one package that supported both.\r\n\r\nGoogle Code issue: https://code.google.com/p/unittest-ext/issues/detail?id=81\r\nBitbucket (hg) branch: https://bitbucket.org/msabramo/unittest2/branch/py2_and_py3_single_source\r\nGitHub branch: https://github.com/msabramo/unittest2/tree/bm/py2_and_py3_single_source\r\n\r\n```\r\n$ /Library/Frameworks/Python.framework/Versions/2.5/bin/tox -e py24,py25\r\n...\r\n[TOX] py24: commands succeeded\r\n[TOX] py25: commands succeeded\r\n[TOX] congratulations :)\r\n```\r\n\r\n```\r\n$ /Library/Frameworks/Python.framework/Versions/3.1/bin/pip freeze\r\nargparse==1.2.1\r\nbackports.ssl-match-hostname==3.4.0.1\r\npy==1.4.20\r\ntox==1.3\r\nvirtualenv==1.6.4\r\nwsgiref==0.1.2\r\n\r\n$ /Library/Frameworks/Python.framework/Versions/3.1/bin/tox \\\r\n       -e py24,py25,py26,py27,py30,py31,py32,pypy\r\n...\r\n[TOX] py24: commands succeeded\r\n[TOX] py25: commands succeeded\r\n[TOX] py26: commands succeeded\r\n[TOX] py27: commands succeeded\r\n[TOX] py30: commands succeeded\r\n[TOX] py31: commands succeeded\r\n[TOX] py32: commands succeeded\r\n[TOX] pypy: commands succeeded\r\n[TOX] congratulations :)\r\n```\r\n\r\n```\r\n$ tox -e py26,py27,py33,py34,pypy\r\n...\r\n  py26: commands succeeded\r\n  py27: commands succeeded\r\n  py33: commands succeeded\r\n  py34: commands succeeded\r\n  pypy: commands succeeded\r\n  congratulations :)\r\n```\r\n\r\nSuccessful Drone.io build: https://drone.io/bitbucket.org/msabramo/unittest2/5\r\n\r\nPassing Travis CI build: https://travis-ci.org/msabramo/unittest2/builds/24631644\r\n\r\n:smile:\r\n\r\nCc: @voidspace"},"comment":{"url":"https://api.github.com/repos/msabramo/unittest2/issues/comments/69777197","html_url":"https://github.com/msabramo/unittest2/pull/1#issuecomment-69777197","issue_url":"https://api.github.com/repos/msabramo/unittest2/issues/1","id":69777197,"user":{"login":"iElectric","id":126339,"avatar_url":"https://avatars.githubusercontent.com/u/126339?v=3","gravatar_id":"","url":"https://api.github.com/users/iElectric","html_url":"https://github.com/iElectric","followers_url":"https://api.github.com/users/iElectric/followers","following_url":"https://api.github.com/users/iElectric/following{/other_user}","gists_url":"https://api.github.com/users/iElectric/gists{/gist_id}","starred_url":"https://api.github.com/users/iElectric/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/iElectric/subscriptions","organizations_url":"https://api.github.com/users/iElectric/orgs","repos_url":"https://api.github.com/users/iElectric/repos","events_url":"https://api.github.com/users/iElectric/events{/privacy}","received_events_url":"https://api.github.com/users/iElectric/received_events","type":"User","site_admin":false},"created_at":"2015-01-13T16:54:00Z","updated_at":"2015-01-13T16:54:00Z","body":":beers:"}}