[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