[Zodb-checkins] CVS: Zope3/src/ZConfig/doc - zconfig.tex:1.75
Fred L. Drake, Jr.
fred at zope.com
Fri Oct 3 17:24:33 EDT 2003
Update of /cvs-repository/Zope3/src/ZConfig/doc
In directory cvs.zope.org:/tmp/cvs-serv15710
Modified Files:
zconfig.tex
Log Message:
added documentation for the %import configuration directive
=== Zope3/src/ZConfig/doc/zconfig.tex 1.74 => 1.75 ===
--- Zope3/src/ZConfig/doc/zconfig.tex:1.74 Fri Oct 3 16:37:08 2003
+++ Zope3/src/ZConfig/doc/zconfig.tex Fri Oct 3 17:24:32 2003
@@ -79,8 +79,10 @@
Unlike the \module{ConfigParser} format, sections are typed and can be
organized hierarchically.
% XXX and support delegation of value lookup to other sections.
-Additional files may be included if needed. Though both formats are
-substantially line-oriented, this format is more flexible.
+Additional files may be included if needed. Schema components not
+specified in the application schema can be imported from the
+configuration file. Though both formats are substantially
+line-oriented, this format is more flexible.
The intent of supporting nested section is to allow setting up the
configurations for loosely-associated components in a container. For
@@ -204,6 +206,86 @@
% <\var{section-type} \optional{\var{name}} \optional{(\var{basename})} />
+\subsection{Extending the Configuration Schema}
+
+As we'll see in section~\ref{writing-schema}, ``Writing Configuration
+Schema,'' what can be written in a configuration is controlled by
+schemas which can be built from \emph{components}. These components
+can also be used to extend the set of implementations of objects the
+application can handle. What this means when writing a configuration
+is that third-party implementations of application object types can be
+used wherever those application types are used in the configuration,
+if there's a \module{ZConfig} component available for that
+implementation.
+
+The configuration file can use an \keyword{\%import} directive to load
+a named component:
+
+\begin{verbatim}
+%import Products.Ape
+\end{verbatim}
+
+The text to the right of the \keyword{\%import} keyword must be the
+name of a Python package; the \module{ZConfig} component provided by
+that package will be loaded and incorporated into the schema being
+used to load the configuration file. After the import, section types
+defined in the component may be used in the configuration.
+
+More detail is needed for this to really make sense.
+
+A schema may define section types which are \emph{abstract}; these
+cannot be used directly in a configuration, but multiple concrete
+section types can be defined which \emph{implement} the abstract
+types. Wherever the application allows an abstract type to be used,
+any concrete type which implements that abstract type can be used in
+an actual configuration.
+
+The \keyword{\%import} directive allows loading schema components
+which provide alternate concrete section types which implement the
+abstract types defined by the application. This allows third-party
+implementations of abstract types to be used in place of or in
+addition to implementations provided with the application.
+
+Consider an example application application which supports logging in
+the same way Zope 2 does. There are some parameters which configure
+the general behavior of the logging mechanism, and an arbitrary number
+of \emph{log handlers} may be specified to control how the log
+messages are handled. Several log handlers are provided by the
+application. Here is an example logging configuration:
+
+\begin{verbatim}
+<eventlog>
+ level verbose
+
+ <logfile>
+ path /var/log/myapp/events.log
+ </logfile>
+</eventlog>
+\end{verbatim}
+
+A third-party extension may provide a log handler to send
+high-priority alerts the system administrator's text pager or
+SMS-capable phone. All that's needed is to install the implementation
+so it can be imported by Python, and modify the configuration:
+
+\begin{verbatim}
+%import my.pager.loghandler
+
+<eventlog>
+ level verbose
+
+ <logfile>
+ path /var/log/myapp/events.log
+ </logfile>
+
+ <pager>
+ number 1-800-555-1234
+ message Something broke!
+ </pager>
+</eventlog>
+\end{verbatim}
+
+
\subsection{Textual Substitution in Values}
\module{ZConfig} provides a limited way to re-use portions of a value
@@ -420,13 +502,15 @@
\end{elementdesc}
\begin{elementdesc}{import}{EMPTY}
- Import a schema component.
- Exactly one of the two possible attributes must be specified.
+ Import a schema component. Exactly one of the attributes
+ \attribute{package} and \attribute{src} must be specified.
\begin{attributedesc}{file}{file name without directory information}
Name of the component file within a package; if not specified,
\file{component.xml} is used. This may only be given when
- \attribute{package} is used.
+ \attribute{package} is used. (The \file{component.xml} file is
+ always used when importing via \keyword{\%import} from a
+ configuration file.)
\end{attributedesc}
\begin{attributedesc}{package}{\datatype{dotted-name}}
@@ -662,6 +746,8 @@
Python packages. The component definition is normally stored in the
file \file{component.xml}; an alternate filename may be specified
using the \attribute{file} attribute of the \element{import} element.
+Components imported using the \keyword{\%import} keyword from a
+configuration file must be named \file{component.xml}.
The component defines the types provided by that component; it must
have a \element{component} element as the document element.
More information about the Zodb-checkins
mailing list