+ +
+

PyAMS site management

+

PyAMS site management is based on the ZODB.

+

On application startup, if PyAMS_utils package is included into Pyramid configuration, several operations take +place:

+
+
    +
  • a custom site factory is defined
  • +
  • custom request methods are defined
  • +
  • a custom traverser handling namespaces is defined
  • +
  • a custom subscribers predicate based on interfaces support is defined
  • +
  • several adapters are registered, to handle annotations and key references
  • +
  • custom TALES extensions are registered.
  • +
+
+

The site factory is an important component in this process. It is this factory which will define the application root +and create a local site manager.

+

Pyramid application is loaded from ZODB’s root via a key defined in Pyramid’s configuration file; the key is named +pyams.application_name and it’s default value is application.

+

If the application can’t be found, PyAMS is looking for an application class name in Pyramid’s configuration file; the +class name configuration key is called pyams.application_factory and defined by default as +pyams_utils.site.BaseSiteRoot. PyAMS default site factory will then create the application, and add a local site +manager to it (see Managing ZCA with PyAMS).

+

After application creation, a NewLocalSiteCreatedEvent is +notified. Custom packages can subscribe to this event to register custom components.

+
+

pyams_upgrade command line script

+

Pyramid allows to define custom command line scripts for application management. A script called pyams_upgrade is +provided by PyAMS_utils package; this script apply the same process as PyAMS site factory, but can also be used to +manage database generations. The idea behind this is just to allow custom packages to provide a way to check and +upgrade database configuration away from application startup process:

+
# ./bin/pyams_upgrade webapp/development.ini
+
+
+

A site generation checker is just a named utility providing pyams_utils.interfaces.site.ISiteGenerations +interface. For example, pyams_security package provides such utility, to make sure that local site manager +contains a PyAMS security manager and a principal annotation utility:

+
from pyams_utils.site import check_required_utilities
+
+REQUIRED_UTILITIES = ((ISecurityManager, '', SecurityManager, 'Security manager'),
+                      (IPrincipalAnnotationUtility, '', PrincipalAnnotationUtility, 'User profiles'))
+
+@utility_config(name='PyAMS security', provides=ISiteGenerations)
+class SecurityGenerationsChecker(object):
+"""I18n generations checker"""
+
+    generation = 1
+
+    def evolve(self, site, current=None):
+        """Check for required utilities"""
+        check_required_utilities(site, REQUIRED_UTILITIES)
+
+
+

check_required_utilities is a PyAMS_utils utility function which +can to used to verify that a set of local utilities are correctly registered with the given names and interfaces.

+
+
+ + +