{ "info": { "author": "Andy Altepeter", "author_email": "aaltepet@bethel.edu", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Zope2", "Programming Language :: Python", "Topic :: Internet :: WWW/HTTP" ], "description": "bethel.silva.purge\n==================\n\n.. contents:: Table of Contents\n\nIntroduction\n------------\n\nThis package is a wrapper around `plone.cachepurging `__, providing purge support for\nfor Silva content. Purges of Silva content are triggered when that content is \nchanged or published.\n\nMany Silva sites sit behind a caching proxy server (e.g. varnish, squid,\npound, etc). The cache server will cache Silva content until it expires. For\nthe most part this is positive and a good thing, so long as the caching\nheaders are set correctly in Silva. \n\nThere becomes a problem, however, when a cached page is republished or\nclosed. The caching server will continue to serve the cached page until it\nexpires, even though there is newer content in Silva. The old content on\nthe caching server is referred to as 'stale'.\n\nThis extension adds a PurgingService to the Silva root. This service has\noptions to enable purging, specifying the caching servers, and configuring \nplone.cachepurging-style simple virtualhosting (renamed to domain translations).\nThere is also support for complex virtualhost situations, where many \nvirtualhosts are served from different areas of a single Silva root (this is\ncalled path translations).\n\nThe actual PURGE requests occur AFTER the request is finished, via a \nZPublisher.pubevents.PubSuccess event. Each PURGE path is put into a queue\nand multiple worker threads operate on the queue until empty. This is a sweet\nfeature of plone.cachepurging, as it does not slow down the response to the\nclient.\n\nNote: while installing and configuring this extension is easy, do you homework!\nRead through the plone.cachepurging documentation and make sure you understand\nthe fundamentals of PURGE.\n\n\nOperation in Silva\n------------------\n\nWhen content is modified or published in Silva, a Purge event is triggered.\n\n\nOn modification\n~~~~~~~~~~~~~~~\n\nThis package markes SilvaObject with the IPurgeable interface. This enables\npurging on IObjectMovedEvent and IObjectModifiedEvent. This ought to include \ncontainers (e.g. saving a container's metadata). FMI see: \n`purging objects automatically `__\n\nIf the object event is for an index document, the container is also purged.\n\n\nOn Publish\n~~~~~~~~~~\n\nIVersions have an IPublishingEvent subscriber, which is triggered on every\npublishing event (publish, approval requesting, expires, approved, etc). While\nthis will cause PURGEs to occur on events which to not affect the published\nversion, the only effect is that the content is purged and needs to be \nre-fetched.\n\nThis causes a Purge of the IContent object, NOT the IVersion object, since the version\nisn't cached.\n\nIf the object event is for an index document, the container is also purged.\n\n\nWhat PURGE urls are generated?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nMultiple PURGE urls are generated for each event. The following illustrates the\npaths generated BEFORE being translated by domain or path.\n\n\nObject Events\n*************\n\n1. Standard plone.cachepurging path: the full rooted path to object. For\n publishable content, this would be the path to the version, e.g. \n \n /silva/example.com/doc/1.\n\n2. [with path translations enabled] Index objects will add paths for the container, \n both with and without a trailing slash. e.g. for an event on /silva/example.com/folder/index:\n \n /silva/example.com/folder\n /silva/example.com/folder/\n\n3. [with domain translations enabled] The path relative to the silva root. e.g. for\n /silva/folder/doc:\n\n /folder/doc\n\n\nPublishing Events\n*****************\n\n1. Standard plone.cachepurging path: the full rooted path to object. For \n publishable content, this would be the path to the version, e.g.:\n \n /silva/example.com/doc/1\n\n2. [with path translations enabled] Path to IContent, e.g.:\n \n /silva/example.com/doc\n\n3. [with path translations enabled] Index objects will add paths for the \n container, both with and without a trailing slash. e.g. for an event on \n /silva/example.com/folder/index:\n \n /silva/example.com/folder\n /silva/example.com/folder/\n\n4. [with domain translations enabled] The path relative to the silva root. \n e.g. for /silva/folder/doc:\n \n /folder/doc\n\n\nInstallation\n------------\n\nTo install the service, activate the \"Silva Purging Service' extension in the \nservice_extensions. Installing this extension installs a `plone.registry `__ into \nthe silva root and registers it as a local utility. The registry is used by \nplone.cachepurging to store it's configuration.\n\n\nConfiguration\n-------------\n\nThe service is configured via a ZMI management screen. Configuration will\nchange the plone.registry settings for plone.cachepurging, and configure the\npath translations for complex vhosting.\n\n\n1. Enable the service\n~~~~~~~~~~~~~~~~~~~~~\n\nThis field represents the value of plone.cachepurging.interfaces.ICacheSettings.enabled.\n\nChecking this will enable cache purging.\n\n\n2. Set Cache Proxies\n~~~~~~~~~~~~~~~~~~~~\n\nAll frontend caching servers need to be added to this field. The format for each\nis a URI, e.g. http://cachingserver.example.com:6081\n\n\n3. Complex Virtual Hosting (a.k.a. Path Translations)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nSome Silva installations may serve multiple domains from within a single Silva \nroot. These domains may be located underneath the Silva root, e.g. \n/silva_root/domain1, /silva_root/domain2, etc. When this is the case, \nplone.cachepurging vhosting support is not sufficient. Path Translations need\nto be used instead.\n\nA path translation is simply an rule on how to translate a rooted path into\na virtualhosting string.\n\nTo enable complex vhosting, check the \"use path translations\" field.\n\nConfigure the path translations by adding them one per line. The format for\neach line is the \"rooted path + ' ' + translated path\". As an example, let's say\nthere is a vhost at /silva/example.com/. This is accessed from the domain\nhttp://example.com. The line for this path translation would then be:\n\n /silva/example.com /VirtualHostBase/http/example.com:80/silva/www/VirtualHostRoot\n\nPath Translations support multiple vhosts to the same root. If www.example.com \nalso points /silva/example.com, an additional line can be added:\n\n /silva/example.com /VirtualHostBase/http/www.example.com:80/silva/www/VirtualHostRoot\n\nAdditionally https vhosts can be supplied:\n\n /silva/example.com /VirtualHostBase/https/www.example.com:443/silva/www/VirtualHostRoot\n\nSupport for inside-out hosting (using _vh_ segments) is supported, and in fact\nany string can be supplied as the \"translated path\". The critical thing here\nis that the path generated match the path cached by the caching server, or no\ncontent will be purged.\n\nWhen purging urls are being generated, any matching paths will have the matching\npart replaced with the vhost string, for all matches. The search for matching\\\npaths begins with the full path to the object then proceeds down the path, \nremoving the last path component on each pass.\n\n\n4. Domain Translations\n~~~~~~~~~~~~~~~~~~~~~~\n\nConfigures plone.cachepurging virtual host support. This package includes two \ntypes of virtual hosting support, so the plone.cachepurging style is renamed \nto 'domain translations'. This approach rewrites the path from the silva root \nto a virtual hosting url.\n\nTo enable, check \"Use domain translations\", and add the domains in the \"Domains\"\nfield.\n\nFor more information on how this type of virtualhost works, see the\n`plone.cachepurging documentation `__.\n\n\n\nbethel.silva.purge changes\n==========================\n\nbethel.silva.purge 1.0b (2012-05-29)\n------------------------------------\n\n* initial release for bethel.silva.purge", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/pypi/bethel.silva.purge", "keywords": "silva varnish cache purge", "license": "GPL", "maintainer": "", "maintainer_email": "", "name": "bethel.silva.purge", "package_url": "https://pypi.org/project/bethel.silva.purge/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/bethel.silva.purge/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://pypi.python.org/pypi/bethel.silva.purge" }, "release_url": "https://pypi.org/project/bethel.silva.purge/1.0b/", "requires_dist": null, "requires_python": null, "summary": "Send HTTP PURGE to caching servers on content publishing events", "version": "1.0b" }, "last_serial": 786819, "releases": { "1.0b": [ { "comment_text": "", "digests": { "md5": "315916250f2e15dfbcac5a2b088490e6", "sha256": "9fdb36fd41344b227f5ab496e9dec9248a6fe00f7260c257e30889f6366836d5" }, "downloads": -1, "filename": "bethel.silva.purge-1.0b-py2.6.egg", "has_sig": false, "md5_digest": "315916250f2e15dfbcac5a2b088490e6", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 38196, "upload_time": "2012-05-29T16:57:45", "url": "https://files.pythonhosted.org/packages/73/37/385f2afd3c96e5b210fbab18e3e0e644c56ad6fe2e8c0e3e194308d08709/bethel.silva.purge-1.0b-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "a548418f35c0db7776bb308cec429d1e", "sha256": "0522e2830ee5a68fde4dde35949c87ef771e5693de0863d93808011b898fdac4" }, "downloads": -1, "filename": "bethel.silva.purge-1.0b.tar.gz", "has_sig": false, "md5_digest": "a548418f35c0db7776bb308cec429d1e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19144, "upload_time": "2012-05-29T16:57:44", "url": "https://files.pythonhosted.org/packages/dc/9e/8e974f0d4bf9ffea26a6e53a0e22e36b6986ed8a131506b196345f76eb2d/bethel.silva.purge-1.0b.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "315916250f2e15dfbcac5a2b088490e6", "sha256": "9fdb36fd41344b227f5ab496e9dec9248a6fe00f7260c257e30889f6366836d5" }, "downloads": -1, "filename": "bethel.silva.purge-1.0b-py2.6.egg", "has_sig": false, "md5_digest": "315916250f2e15dfbcac5a2b088490e6", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 38196, "upload_time": "2012-05-29T16:57:45", "url": "https://files.pythonhosted.org/packages/73/37/385f2afd3c96e5b210fbab18e3e0e644c56ad6fe2e8c0e3e194308d08709/bethel.silva.purge-1.0b-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "a548418f35c0db7776bb308cec429d1e", "sha256": "0522e2830ee5a68fde4dde35949c87ef771e5693de0863d93808011b898fdac4" }, "downloads": -1, "filename": "bethel.silva.purge-1.0b.tar.gz", "has_sig": false, "md5_digest": "a548418f35c0db7776bb308cec429d1e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19144, "upload_time": "2012-05-29T16:57:44", "url": "https://files.pythonhosted.org/packages/dc/9e/8e974f0d4bf9ffea26a6e53a0e22e36b6986ed8a131506b196345f76eb2d/bethel.silva.purge-1.0b.tar.gz" } ] }