{ "info": { "author": "yakobu & shefer", "author_email": "ronenya4321@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Testing" ], "description": "patch_issue\n===========\n\n.. image:: https://travis-ci.org/yakobu/patch-issue.svg?branch=master\n :target: https://travis-ci.org/yakobu/patch-issue\n.. image:: https://coveralls.io/repos/github/yakobu/patch-issue/badge.svg?branch=master\n :target: https://coveralls.io/github/yakobu/patch-issue?branch=master\n.. image:: https://badge.fury.io/py/patch-issue.svg\n :target: https://badge.fury.io/py/patch-issue\n.. image:: https://img.shields.io/packagist/l/doctrine/orm.svg\n :alt: Packagist\n :target: https://github.com/yakobu/patch-issue\n\n\n\nPatch manager for easy tracking with integration in jira.\n\nConcept\n-------\n\nWe've all put patches over patches in our code, for various reasons:\n\n* Hot fixing a currently released version\n* Temporary place-holder\n* Or just because we felt like it - so we wouldn't have to design some \n complex structure.\n\nThis is where ``patch-issue`` comes into play.\nWe wanted to have a way of notifying the programmer that the current code segment\nis a part of a patch - using Jira issue tracking system and some kind of a logger.\nThen, later on, ``patch-issue`` will notify the programmer (in runtime) that\nthe issue is closed and the programmer can remove the patch easily.\n\nImportant Note\n++++++++++++++\n\nWe do not encourge the usage of patches in a code segment. \nThis tool main purpose is to help programmers track their patches, \nso they won't forget the patch in their code (long term wise). \n\nHow to install?\n---------------\n\nSimply run:\n\n.. code-block:: console\n\n $ pip install patch-issue\n\nAnd try to import: \n\n.. code-block:: python\n\n import patch_issue\n\n\n\nOk, So how do I start?\n----------------------\n\nFirst, you need to make a connection to Jira in your code, \nand just for that there is an awesome library called - \nyeah you guessed right - ``jira`` - [jira pypi link](https://pypi.org/project/jira/).\n\nHere is how to make a simple connection: \n``connection.py``\n\n.. code-block:: python\n\n from jira import JIRA\n jira_connection = JIRA(server=\"http://jira/\", basic_auth=(\"username\", \"password\"))\n\nNow you can make a new patch class (``patches.py``):\n\n.. code-block:: python\n\n import logging\n\n from patch_issue import JiraPatchIssue\n\n from connection import jira_connection # from previously made connection\n\n\n class FixDBConnection(JiraPatchIssue):\n ISSUE_KEY = \"APP-1\" # a must have class attribute\n DESCRIPTION = \"Fixes db connection using a mocked password.\"\n WAY_TO_SOLVE = \"Configure the right password.\"\n\n fix_connection = FixDBConnection(jira=jira_connection,\n logger=logging) # there is also a default logger\n\n\nNow you can use your patch freely in your code:\n\n.. code-block:: python\n\n import .config\n from .db import DB\n\n from patches import fix_connection # import your patch instance\n\n ##################################################################\n\n @fix_connection.patch_function # use patch as a function decorator\n def new_connection():\n return DB.make_connection(\"user\", \"password\")\n\n new_connection()\n\n ##################################################################\n\n usename = \"someuser\"\n password = config.get_password()\n\n with fix_connection.patch: # use patch as a context manager\n password = \"1234\"\n\n db = DB.make_connection(username, password)\n\nNow, when your code reaches to the patches, \na message will be logged in your logger! \nYou will never miss your patches again! \n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/yakobu/patch_issue", "keywords": "patch", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "patch-issue", "package_url": "https://pypi.org/project/patch-issue/", "platform": "", "project_url": "https://pypi.org/project/patch-issue/", "project_urls": { "Homepage": "https://github.com/yakobu/patch_issue" }, "release_url": "https://pypi.org/project/patch-issue/1.0.0/", "requires_dist": [ "colored", "property-manager ; extra == 'dev'", "attrdict ; extra == 'dev'", "mock ; extra == 'dev'", "flake8 ; extra == 'dev'", "pytest ; extra == 'dev'", "pytest-cov ; extra == 'dev'" ], "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "summary": "Track your patches easily with Jira integration", "version": "1.0.0" }, "last_serial": 4513340, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "c3ccc9700dfe443d681754321056da98", "sha256": "deeaed5e56112df60bb31ef1e0f5551d47ac2aac77a9d2cd4cb49261f4d0b7c4" }, "downloads": -1, "filename": "patch_issue-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c3ccc9700dfe443d681754321056da98", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*", "size": 3426, "upload_time": "2018-11-05T18:37:48", "url": "https://files.pythonhosted.org/packages/80/85/edc839015557de2df3b846444d1475c454cc1b3777016632dfeb16e48568/patch_issue-0.1.0-py2.py3-none-any.whl" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "5815c5465be0f748316da87baaee648d", "sha256": "ab64fe6ddc27051601337503abced22adac6905e5877504c8867dc514d3bb885" }, "downloads": -1, "filename": "patch_issue-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5815c5465be0f748316da87baaee648d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*", "size": 4510, "upload_time": "2018-11-05T19:15:04", "url": "https://files.pythonhosted.org/packages/8c/d2/61b7cf5a0dd87b32b1dc5a47ce130e84d1460fcfe99180fab9d10a09f4b7/patch_issue-0.1.1-py2.py3-none-any.whl" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "bd6b79fbfe6d41337cce188385a67eef", "sha256": "e2469089af1ca923e04ecb5806850dd199313076ec4ac1ff47ebdbbc3eff7ca3" }, "downloads": -1, "filename": "patch_issue-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bd6b79fbfe6d41337cce188385a67eef", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*", "size": 3525, "upload_time": "2018-11-11T15:09:48", "url": "https://files.pythonhosted.org/packages/f9/be/b0aae7f345bc8712368f40afbb95efe8e7454a9b667b4b07c7025e40ee45/patch_issue-0.2.0-py2.py3-none-any.whl" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "c796525057a5cbcd1d87cd7c39bcf74c", "sha256": "8bf0b115a6e9dbe892fe7375bca96858de3e3c0a18e8a0358c55646affb35dca" }, "downloads": -1, "filename": "patch_issue-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c796525057a5cbcd1d87cd7c39bcf74c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*", "size": 3643, "upload_time": "2018-11-12T11:55:24", "url": "https://files.pythonhosted.org/packages/18/6c/26b85de7cf38dcf324843a08f0039f6bfe84f03c5aeb4146dcdf0e776520/patch_issue-0.4.0-py2.py3-none-any.whl" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "9aacfe27859fce9fb755de86f41478c8", "sha256": "5a526d0cea7263649cf4e5c236ae3ec9b3221c8b1a3aaa550401b643e3556496" }, "downloads": -1, "filename": "patch_issue-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9aacfe27859fce9fb755de86f41478c8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "size": 3713, "upload_time": "2018-11-13T13:35:10", "url": "https://files.pythonhosted.org/packages/60/a4/bdc847a0c6fca2627cf3e2d722660117d3866c979ba37d97fc8242c17af3/patch_issue-0.6.0-py2.py3-none-any.whl" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "2d356dc417186533a8fa45ed42edba07", "sha256": "08dcf222d52bfc850e86b5f6085023d03ac1955fbd8d8126babd10b4727f9f17" }, "downloads": -1, "filename": "patch_issue-0.7.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2d356dc417186533a8fa45ed42edba07", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "size": 3713, "upload_time": "2018-11-14T08:20:54", "url": "https://files.pythonhosted.org/packages/d9/be/a3123f2ff4980e03a1ffaba0fd6b6bd85e86b510a7f82584262746abc1e3/patch_issue-0.7.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5bd3e013293a7503bbee44f97b900188", "sha256": "02273bfce3093e35810645927c96341fa6633420a2f9efe8fefc51f111b4ceb4" }, "downloads": -1, "filename": "patch_issue-0.7.1.tar.gz", "has_sig": false, "md5_digest": "5bd3e013293a7503bbee44f97b900188", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "size": 2752, "upload_time": "2018-11-14T08:20:55", "url": "https://files.pythonhosted.org/packages/ba/23/eb3afce1e9654b3b999216d79b83f476eb21ba94fdbfbf6b0855ec2be774/patch_issue-0.7.1.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "b587c06a7039955dfed5e0fec1ff5982", "sha256": "d9690474a41bbe66272ebcbe43130f47cd42b9972f8b6fa26210987743338cb3" }, "downloads": -1, "filename": "patch_issue-0.7.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b587c06a7039955dfed5e0fec1ff5982", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "size": 3713, "upload_time": "2018-11-15T19:47:25", "url": "https://files.pythonhosted.org/packages/6e/7a/9b687838861e020537a4ab57f3ab8eca22d15197ecee872424885d6af8cc/patch_issue-0.7.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5db9e0fb2479b7a314b150fd37eabf96", "sha256": "0a47848936cdab85fb319dbe455402d1fe24259a98d0f0b43f7b08fea90194cb" }, "downloads": -1, "filename": "patch_issue-0.7.2.tar.gz", "has_sig": false, "md5_digest": "5db9e0fb2479b7a314b150fd37eabf96", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "size": 2757, "upload_time": "2018-11-15T19:47:27", "url": "https://files.pythonhosted.org/packages/26/14/953f7397874e97e0008fb03c3f0e1492a515b38d14d48065fb0916892d6f/patch_issue-0.7.2.tar.gz" } ], "0.7.3": [ { "comment_text": "", "digests": { "md5": "4d9927c9c817e38587649e136a8af562", "sha256": "bc23006f3f8edd0d9f6bcd673e1edf7e8a10d8e560f340d33d6acd10c54bb0e5" }, "downloads": -1, "filename": "patch_issue-0.7.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4d9927c9c817e38587649e136a8af562", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "size": 4950, "upload_time": "2018-11-18T13:56:04", "url": "https://files.pythonhosted.org/packages/30/94/49c45ca86ed9e74f32f56421d15368ddf0af7f2cf2ab5c73b3e41ec45e51/patch_issue-0.7.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5dd9568d00fc425e891bcacdd05ec400", "sha256": "7624874f73afe8feb37b585703602962ad48f45da6c5e4263e59ee4c00387d54" }, "downloads": -1, "filename": "patch_issue-0.7.3.tar.gz", "has_sig": false, "md5_digest": "5dd9568d00fc425e891bcacdd05ec400", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "size": 3258, "upload_time": "2018-11-18T13:56:06", "url": "https://files.pythonhosted.org/packages/2c/ce/b51de80b1ddcdcd47b215eae6b9e3028c76e276e7fc3b33cdd3b6162cbb4/patch_issue-0.7.3.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "73bbe4a4e9d2469f85cdde90acc06186", "sha256": "62705470e534cb732d118370bf08a43b9c967f5b1e748e1649168c86a83a3d3c" }, "downloads": -1, "filename": "patch_issue-0.8.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "73bbe4a4e9d2469f85cdde90acc06186", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "size": 6327, "upload_time": "2018-11-19T20:51:56", "url": "https://files.pythonhosted.org/packages/f8/5a/e1258f76a3059ed8c1a13805095b06bcf8103696bd4de74048dafe91a6b5/patch_issue-0.8.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2565e2f94e7b5dfccaa24c00840ab194", "sha256": "9b5a17c4d8355fb0b43960a71179d833a0b4e44b0351fcb1b65f2f13c4b94adf" }, "downloads": -1, "filename": "patch_issue-0.8.1.tar.gz", "has_sig": false, "md5_digest": "2565e2f94e7b5dfccaa24c00840ab194", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "size": 4951, "upload_time": "2018-11-19T20:51:58", "url": "https://files.pythonhosted.org/packages/27/e9/227ccf3347e2a073deffeb891bd1b6645af8bf6fd5190904c3f4d3fcd675/patch_issue-0.8.1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "2ec357dcf6f08f8d351d95fb8085d070", "sha256": "a7831fe12ae7c0b0df6b6d2899a0722a1a13bca90f43de6e556c93827d155822" }, "downloads": -1, "filename": "patch_issue-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2ec357dcf6f08f8d351d95fb8085d070", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "size": 5101, "upload_time": "2018-11-21T16:27:12", "url": "https://files.pythonhosted.org/packages/e2/18/9e59a46f2db0bee9975fa8f2f9b3f0e13e09151fd4f26bcdb278ffd1018d/patch_issue-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a2718efb26d5340b4d130135d005bb6f", "sha256": "c454e94348dfee1bbb7d4ee179597ed6a37297c8bcbe57521d92cb38bb06aae7" }, "downloads": -1, "filename": "patch_issue-1.0.0.tar.gz", "has_sig": false, "md5_digest": "a2718efb26d5340b4d130135d005bb6f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "size": 4475, "upload_time": "2018-11-21T16:27:13", "url": "https://files.pythonhosted.org/packages/76/14/e928666e5fd124b0550608d791bf643f5ec1170b39a070b5bf8da2ff95fb/patch_issue-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2ec357dcf6f08f8d351d95fb8085d070", "sha256": "a7831fe12ae7c0b0df6b6d2899a0722a1a13bca90f43de6e556c93827d155822" }, "downloads": -1, "filename": "patch_issue-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2ec357dcf6f08f8d351d95fb8085d070", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "size": 5101, "upload_time": "2018-11-21T16:27:12", "url": "https://files.pythonhosted.org/packages/e2/18/9e59a46f2db0bee9975fa8f2f9b3f0e13e09151fd4f26bcdb278ffd1018d/patch_issue-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a2718efb26d5340b4d130135d005bb6f", "sha256": "c454e94348dfee1bbb7d4ee179597ed6a37297c8bcbe57521d92cb38bb06aae7" }, "downloads": -1, "filename": "patch_issue-1.0.0.tar.gz", "has_sig": false, "md5_digest": "a2718efb26d5340b4d130135d005bb6f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", "size": 4475, "upload_time": "2018-11-21T16:27:13", "url": "https://files.pythonhosted.org/packages/76/14/e928666e5fd124b0550608d791bf643f5ec1170b39a070b5bf8da2ff95fb/patch_issue-1.0.0.tar.gz" } ] }