{ "info": { "author": "Ethan Jucovy", "author_email": "ejucovy@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "Create new tickets based on existing tickets\n============================================\n\nDescription\n-----------\n\nThe NewTicketLikeThisPlugin adds a \"Clone\" button to existing tickets,\nwhich lets you create a new ticket whose fields derive from the original\nticket if you have the appropriate permission.\n\nIt is based on the tracopt.ticket.clone.ticketclonebutton extension that\nships with Trac core. Unlike that extension, the NewTicketLikeThisPlugin\ndefines and consumes a pluggable interface for implementing custom policies\nto determine the way in which a new ticket is derived from the original.\nThis allows flexible, customized business logic to be provided based on\nthe needs and workflows of your team. Also, the NewTicketLikeThisPlugin\nallows you to configure the permission required to clone a ticket, whereas\nthe core ``ticketclonebutton`` hard-codes the TICKET_ADMIN permission.\n\nTwo policies are provided by default, in the ``newticketlikethis.policies`` \nmodule:\n\n* ``SimpleTicketCloner`` mimics the behavior of the \n ``core tracopt.ticket.clone.ticketclonebutton`` extension: all fields\n from the original ticket are cloned, and the \"summary\" and \"description\"\n fields are modified to denote the ticket that they were cloned from.\n\n* ``DerivedFieldsTicketCloner`` can ignore certain fields entirely\n based on a configuration setting; can derive new field values from\n the old ticket using Genshi templates, also through configuration;\n and clones all remaining fields from the original ticket verbatim.\n\nMore complex policies might implement custom logic for deriving new ticket\nvalues based on the values of the existing ticket's fields, or use\nalternate cloning policies based on the ticket's type.\n\nConfiguration\n-------------\n\nTo use the plugin, install it in your Trac environment and enable its \ncomponents in ``trac.ini``::\n\n [components]\n newticketlikethis.* = enabled\n\nBy default this will add the \"Clone\" button to the ticket view, and \nwill use the ``SimpleTicketCloner`` component to clone your tickets.\nThe ``TICKET_ADMIN`` permission will be required for cloning tickets.\n\nChoosing a policy\n~~~~~~~~~~~~~~~~~\n\nTo use a different ticket-cloning policy, make sure to enable any\nnecessary components and then set the ``newticketlikethis.ticket_cloner``\noption in ``trac.ini`` to reference the component's name like so::\n\n [newticketlikethis]\n ticket_cloner = ExcludedFieldsTicketCloner\n\n\nUsing an alternate form handler\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nBy default the \"Clone\" button will submit a POST request to the current\nTrac environment's /newticket handler. You can specify an alternate form\nsubmission (such as a different Trac instance's /newticket handler) with::\n\n [newticketlikethis]\n ticket_clone_form_action = http://trac.example.com/main/newticket\n ticket_clone_form_method = GET\n\nEither or both of these options may be omitted.\n\n\nConfiguring permissions\n~~~~~~~~~~~~~~~~~~~~~~~\n\nBy default the \"Clone\" button only appears if the user has the \n``TICKET_ADMIN`` permission. You can change the required permission\nusing the ``newticketlikethis.ticket_clone_permission`` option::\n\n [newticketlikethis]\n ticket_clone_permission = TICKET_CREATE\n\n\n\nDerivedFieldsTicketCloner\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf enabled, the ``DerivedFieldsTicketCloner`` will look for an additional\nconfiguration option ``newticketlikethis.excluded_fields`` to determine\nwhich fields to exclude. This should be a comma-separated list of ticket\nfields. By default, no fields are excluded. \n\nIt will also look for an option ``newticketlikethis.derived_fields`` to \ndetermine how to derive new field values from the existing ticket. This\nshould be a comma-separated list of Genshi templates mapped to new field\nvalues.\n\nFor example, you might use a ``trac.ini`` configuration like::\n\n [newticketlikethis]\n ticket_cloner = DerivedFieldsTicketCloner\n excluded_fields = description, summary, reporter\n derived_fields = $ticket.reporter->cc, milestone:$ticket.milestone component:$ticket.component->keywords\n\nThis would allow you to create cloned tickets with the old ticket's reporter CCed; \nthe old ticket's milestone and component namespaced and set as keywords on the new\nticket; the new ticket's description, summary and reporter left blank; and all other\nfields from the old ticket transferred verbatim to the new ticket.\n\n\nCustomization\n-------------\n\nIt is easy to implement your own custom policies as well. Look at \nthe code in ``newticketlikethis.policies`` for inspiration.\n\nIf you implement a custom policy that you would like to share, \nfeel free to submit it as a patch, so that the ``NewTicketLikeThisPlugin``\ncan ship with a strong library of reusable cloning policies.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://trac-hacks.org/wiki/NewTicketLikeThisPlugin", "keywords": "trac plugin", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "trac-NewTicketLikeThisPlugin", "package_url": "https://pypi.org/project/trac-NewTicketLikeThisPlugin/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/trac-NewTicketLikeThisPlugin/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://trac-hacks.org/wiki/NewTicketLikeThisPlugin" }, "release_url": "https://pypi.org/project/trac-NewTicketLikeThisPlugin/0.2/", "requires_dist": null, "requires_python": null, "summary": "Pluggable framework for 'cloning' Trac tickets according to custom business logic", "version": "0.2" }, "last_serial": 800843, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "d387419b136192fe0a5b8513d1fa9003", "sha256": "02441206d8fe56100f72c740748af9b529de0f8fe28000fdcf08d1365dd09b61" }, "downloads": -1, "filename": "trac-NewTicketLikeThisPlugin-0.1.tar.gz", "has_sig": false, "md5_digest": "d387419b136192fe0a5b8513d1fa9003", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4254, "upload_time": "2012-01-06T16:12:12", "url": "https://files.pythonhosted.org/packages/61/b3/9791be7a89e54ead3e2eb9f5ff51411fd759ce1440e38bfc14d1ac0ce814/trac-NewTicketLikeThisPlugin-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "b20ab6d9d42d32e774982605d82bb291", "sha256": "e565ca9d995e2d784cd7b634c5f651c75a9c4ca47c54d04ceeb95cc43c18a5a7" }, "downloads": -1, "filename": "trac-NewTicketLikeThisPlugin-0.2.tar.gz", "has_sig": false, "md5_digest": "b20ab6d9d42d32e774982605d82bb291", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5087, "upload_time": "2012-11-30T17:16:38", "url": "https://files.pythonhosted.org/packages/51/50/e6d5bbe02a2920b439528f87be170fbe2c0258943dcee2a1300634672010/trac-NewTicketLikeThisPlugin-0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b20ab6d9d42d32e774982605d82bb291", "sha256": "e565ca9d995e2d784cd7b634c5f651c75a9c4ca47c54d04ceeb95cc43c18a5a7" }, "downloads": -1, "filename": "trac-NewTicketLikeThisPlugin-0.2.tar.gz", "has_sig": false, "md5_digest": "b20ab6d9d42d32e774982605d82bb291", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5087, "upload_time": "2012-11-30T17:16:38", "url": "https://files.pythonhosted.org/packages/51/50/e6d5bbe02a2920b439528f87be170fbe2c0258943dcee2a1300634672010/trac-NewTicketLikeThisPlugin-0.2.tar.gz" } ] }