{ "info": { "author": "Malthe Borch", "author_email": "mborch@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Plone", "Framework :: Plone :: 4.3", "Framework :: Plone :: 5.0", "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7" ], "description": "The system is an integrated solution, with a headless instance\nprocessing items in the background.\n\nZEO or other shared storage is required.\n\nCompatibility: Plone 4+, Plone 5\n\n\nSetup\n=====\n\nAdd the package to your buildout, then install the add-on from inside\nPlone.\n\nNext, set up an instance to run the link checking processor. This can\nbe an existing instance, or a separate one::\n\n $ bin/instance linkcheck\n\nThis process should always be running, but may be stopped and started\nat any time without data loss.\n\n\nControl panel\n=============\n\nOnce the system is up and running, interaction happens through the\n\"Link validity\" control panel::\n\n http://localhost:8080/site/@@linkcheck-controlpanel\n\nIt's available from Plone's control panel overview.\n\n*Reporting*\n\n The report tab lists current problems.\n\n*Notification*\n\n An alert system is provided in the form of an RSS-feed::\n\n http://localhost:8080/site/++linkcheck++feed.rss\n\n Note that this view requires the \"Manage portal\" permission. To allow\n integration with other services, a self-authenticating link is\n available from the report screen:\n\n RSS-feed available. Click the orange icon |rss|\n\n To set up e-mail notification, configure an RSS-driven newsletter\n with this feed and adjust the frequency to match the update\n interval (i.e. every morning). There's probably a lot of choice\n here. `MailChimp `_ makes it very easy.\n\n*Settings*\n\n The settings tab on the control panel provides configuration for\n concurrency level, checking interval and link expiration, as well as\n statistics about the number of links that are currently active and the\n queue size.\n\n There is also a setting available that lets the processor use the\n publisher to test internal link validity (at the cost of\n additional system resources). If this mode is enabled, the\n processor will attempt to publish the internal link and check that\n the response is good.\n\n From the controlpanel you can also crawl the entire site for broken links.\n You can constrain the content that is checked by type and workflow-state.\n Beware that this can take a very long time!\n\n*Export*\n\n You can export the report about broken links in various formats.\n Call @@linkcheck-export?export_type=csv for the export.\n Supported formats are: csv, xlsx, xls, tsv, yaml, html and json.\n\n\n.. |RSS| image:: http://plone.org/rss.png\n\n\nHow does it work?\n=================\n\nWhen the add-on is installed, Plone will pass each HTML response\nthrough a collection step that keeps track of:\n\n1. The status code of outgoing HTML responses;\n2. The hyperlinks which appear in the response body, if available.\n\nThis happens very quickly. The `lxml\n`_ library is used to parse and\nsearch the response document for links.\n\nThe benefit of the approach is that we don't need to spend additional\nresources to check the validity of pages that we've already rendered.\n\nThere's an assumption here that the site is visited regularly and\nexhaustively by a search robot or other crawling service. This is\ntypically true for a public site.\n\n\nLink status\n-----------\n\nA good status is either ``200 OK`` or ``302 Moved Temporarily``; a\nneutral status is a good link which has turned bad, or not been\nchecked; a bad status is everything else, including ``301 Moved\nPermanently``.\n\nIn any case, the status of an external link is updated only once per\nthe configured interval (24 hours by default).\n\n\nHistory\n-------\n\nLink validity checking has previously been a core functionality in\nPlone, but starting from the 4.x-series, there is no such\ncapability. It's been proposed to bring it back into the core (see\n`PLIP #10987 `_), but the idea has\nsince been retired.\n\nThere's a 3rd party product available, `gocept.linkchecker\n`_ which\nrelies on a separate process written in the `Grok\n`_ framework to perform external\nlink-checking. It communicates with Plone via XML-RPC. There's a Plone\n4 `compatibility branch\n`_\navailable. This product demands significantly more resources (both CPU\nand memory) because it publishes all internal links at a regular\ninterval.\n\n\nPerformance\n===========\n\nIn the default configuration, the system should not incur significant\noverhead.\n\nThat said, we've put the data into a Zope 2 tool to allow easily\nmounting it into a separate database.\n\n\nKeeping a separate database for updates\n---------------------------------------\n\nUsing the ``plone.recipe.zope2instance`` recipe for buildout, this is\nhow you would configure a mount point for a Plone site located at\n``/site``::\n\n zope-conf-additional =\n \n mount-point /site/portal_linkcheck\n container-class collective.linkcheck.tool.LinkCheckTool\n \n server ${zeo:zeo-address}\n storage linkcheck\n \n \n\nThis should match a ``plone.recipe.zeoserver`` part::\n\n zeo-conf-additional =\n \n path ${buildout:directory}/var/filestorage/linkcheck.fs\n \n\nNote that you must add the mount point using the ZMI before installing\nthe add-on for it to work.\n\n\nLicense\n=======\n\nGPLv3 (http://www.gnu.org/licenses/gpl.html).\n\n\nAuthor\n======\n\nMalthe Borch \n\n\n\nContributors\n============\n\n- Malthe Borch, mborch@gmail.com\n- Philip Bauer, bauer@starzel.de\n- J\u00f6rg Kubaile\n- lewicki\n- petschki\n- Toni Fischer\n\n\nChanges\n=======\n\n1.5 (2017-10-10)\n----------------\n\n- Update german translations\n [pbauer]\n\n- Clear before crawling site\n [pbauer]\n\n- Catch error when auth is empty\n [pbauer]\n\n- Add fallbacks when trying to remove empty entries\n [pbauer]\n\n\n1.4.dev1_gww (2017-03-22)\n-------------------------\n\n- Nothing changed yet.\n\n\n1.3.dev1_gww (2017-03-22)\n-------------------------\n\n- Allow to export the report about broken links report in various formats.\n Call @@linkcheck-export?export_type=json for the view. Supported formats are\n csv, xlsx, xls, tsv, yaml, html and json.\n [pbauer]\n\n- Add a setting to select workflow-states to check on crawl and update.\n [pbauer]\n\n- Add timeout setting.\n [pbauer]\n\n- Allow recent versions of Requests.\n [pbauer]\n\n- Add a setting to select portal_types to check on crawl and update.\n [lewicki]\n\n- Add a view @@linkcheck to check links from object context\n [lewicki]\n\n- Add setting to disable event triggering on each request.\n [lewicki]\n\n- Handle mailto links\n [J\u00f6rg Kubaile]\n\n- Handle relative urls\n [Toni Fischer]\n\n- Add link to remove entry from the report list\n [J\u00f6rg Kubaile]\n\n- Added german translations\n [petschki]\n\n- Added .gitignore\n [petschki]\n\n- Add upgrade step for new registry entry\n [petschki]\n\n1.2 (2012-11-22)\n----------------\n\n- Fixed an issue where URLs containing unquotable characters would\n cause the controlpanel to break.\n\n- Discard anchor (#) and query string (?) URL components.\n\n- Resolve links with parent pointers (\"../\") to avoid duplicate\n indexing.\n\n- Always enter run loop and routinely poll for new sites.\n\n- Fixed issue where the composite queue implementation would be used\n incorrectly.\n\n1.1 (2012-06-25)\n----------------\n\n- Don't store path (location in document) information; it's useless\n and it takes up too much disk space.\n\n- Added option to limit number of referers to store (default: 5).\n\n- Datastructure optimization.\n\n Use bucket-based data types when possible, and avoid copying strings\n (instead using an integer-based lookup table).\n\n Note: Migration required. Please run the upgrade step.\n\n1.0.2 (2012-06-15)\n------------------\n\n- Add whitelist (ignore) option. This is a list of regular expressions\n that match on links to prevent them from being recorded by the tool.\n\n- Make report sortable.\n\n1.0.1 (2012-05-10)\n------------------\n\n- Quote URLs passed to the \"Enqueue\" action.\n\n- Added support for HEAD request.\n\n- Use ``gzip`` library to correctly read and decompress\n zlib-compressed responses.\n\n1.0 (2012-05-10)\n----------------\n\n- Initial public release.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://pypi.python.org/pypi/collective.linkcheck", "keywords": "Python Plone", "license": "GPL version 2", "maintainer": "", "maintainer_email": "", "name": "collective.linkcheck", "package_url": "https://pypi.org/project/collective.linkcheck/", "platform": "", "project_url": "https://pypi.org/project/collective.linkcheck/", "project_urls": { "Homepage": "https://pypi.python.org/pypi/collective.linkcheck" }, "release_url": "https://pypi.org/project/collective.linkcheck/1.5/", "requires_dist": null, "requires_python": "", "summary": "Add-on for Plone that provides link validity checking and reporting.", "version": "1.5" }, "last_serial": 3239387, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "dffc54f850ef851d46e6047fdbe4d618", "sha256": "89574bc7abd6fcad8a51a25ee74a6b67777678dd694ee4f217d4ae09c1e9fb90" }, "downloads": -1, "filename": "collective.linkcheck-1.0.tar.gz", "has_sig": false, "md5_digest": "dffc54f850ef851d46e6047fdbe4d618", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16725, "upload_time": "2012-05-10T11:12:19", "url": "https://files.pythonhosted.org/packages/ef/d0/7c0b29610e8e32d8cfe47b2c18c7e3482c86dd85bbbcebec3c75970296ea/collective.linkcheck-1.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "b9c082ce87a784879667a8f0711b4f4d", "sha256": "855e739df2d8ed2fbbead434d18a19935f69a67ec7c3a273d040f9c7d7ea965b" }, "downloads": -1, "filename": "collective.linkcheck-1.0.1.tar.gz", "has_sig": false, "md5_digest": "b9c082ce87a784879667a8f0711b4f4d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17362, "upload_time": "2012-05-10T14:00:48", "url": "https://files.pythonhosted.org/packages/80/47/04f0808235a9017027de4e4efab73066426571b7409514b1a3b6f14b8464/collective.linkcheck-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "3998932268a6e56eaec11f355a77d9c4", "sha256": "0329c7fd8aafaa97924ec336c7289635e6c6728e2fd3c9d014dbb736040497d6" }, "downloads": -1, "filename": "collective.linkcheck-1.0.2.tar.gz", "has_sig": false, "md5_digest": "3998932268a6e56eaec11f355a77d9c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17979, "upload_time": "2012-06-15T12:14:06", "url": "https://files.pythonhosted.org/packages/23/12/b872b3e849e6a4a748143f1d06980c39434d2c7670abf9e8f2e94864aaf4/collective.linkcheck-1.0.2.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "484ea40d56ebe97e9fe71faca8687852", "sha256": "919463c84ece3f1c3f30e04e878727e55b4b0f1b708b010f5d1fd35142f0625e" }, "downloads": -1, "filename": "collective.linkcheck-1.1.tar.gz", "has_sig": false, "md5_digest": "484ea40d56ebe97e9fe71faca8687852", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20507, "upload_time": "2012-06-25T15:14:35", "url": "https://files.pythonhosted.org/packages/26/53/8140b43b0953b66cc47273a5c2832eb80cb1c5f6036c45cea895c37a19dd/collective.linkcheck-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "0133b461843cb65a9527ba0dae56bcb6", "sha256": "26ce4d757c41ad6da5d6bbf2db6aefc195dc12c00b7477157edfd8f6b1414588" }, "downloads": -1, "filename": "collective.linkcheck-1.2.tar.gz", "has_sig": false, "md5_digest": "0133b461843cb65a9527ba0dae56bcb6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21658, "upload_time": "2012-11-22T08:41:42", "url": "https://files.pythonhosted.org/packages/35/4c/860221914d7ad304e2fd3552b3b514ae37a6170e70d78f5b59e0ae9579ee/collective.linkcheck-1.2.tar.gz" } ], "1.5": [ { "comment_text": "", "digests": { "md5": "88bb3d51fa96959328db520b6fd8627d", "sha256": "9abac892e88797e58a5bf4ad40d0960e00922c661ed8299342858c7b0aa95491" }, "downloads": -1, "filename": "collective.linkcheck-1.5.tar.gz", "has_sig": false, "md5_digest": "88bb3d51fa96959328db520b6fd8627d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39665, "upload_time": "2017-10-10T13:42:13", "url": "https://files.pythonhosted.org/packages/f1/84/7b52f9d4406048b5016650cad384cfc1406e765c715a2c8f41870ff55d5d/collective.linkcheck-1.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "88bb3d51fa96959328db520b6fd8627d", "sha256": "9abac892e88797e58a5bf4ad40d0960e00922c661ed8299342858c7b0aa95491" }, "downloads": -1, "filename": "collective.linkcheck-1.5.tar.gz", "has_sig": false, "md5_digest": "88bb3d51fa96959328db520b6fd8627d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39665, "upload_time": "2017-10-10T13:42:13", "url": "https://files.pythonhosted.org/packages/f1/84/7b52f9d4406048b5016650cad384cfc1406e765c715a2c8f41870ff55d5d/collective.linkcheck-1.5.tar.gz" } ] }