Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
ZODB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kirill Smelkov
ZODB
Commits
ee0b64dd
Commit
ee0b64dd
authored
Oct 03, 2003
by
Fred Drake
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added documentation for the %import configuration directive
parent
2788ac9b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
91 additions
and
5 deletions
+91
-5
trunk/doc/ZConfig/zconfig.tex
trunk/doc/ZConfig/zconfig.tex
+91
-5
No files found.
trunk/doc/ZConfig/zconfig.tex
View file @
ee0b64dd
...
@@ -79,8 +79,10 @@ format, this format supports key-value pairs arranged in sections.
...
@@ -79,8 +79,10 @@ format, this format supports key-value pairs arranged in sections.
Unlike the
\module
{
ConfigParser
}
format, sections are typed and can be
Unlike the
\module
{
ConfigParser
}
format, sections are typed and can be
organized hierarchically.
organized hierarchically.
% XXX and support delegation of value lookup to other sections.
% XXX and support delegation of value lookup to other sections.
Additional files may be included if needed. Though both formats are
Additional files may be included if needed. Schema components not
substantially line-oriented, this format is more flexible.
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
The intent of supporting nested section is to allow setting up the
configurations for loosely-associated components in a container. For
configurations for loosely-associated components in a container. For
...
@@ -204,6 +206,86 @@ sections, but there is no terminator:
...
@@ -204,6 +206,86 @@ sections, but there is no terminator:
% <\var{section-type} \optional{\var{name}} \optional{(\var{basename})} />
% <\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
}
\subsection
{
Textual Substitution in Values
}
\module
{
ZConfig
}
provides a limited way to re-use portions of a value
\module
{
ZConfig
}
provides a limited way to re-use portions of a value
...
@@ -420,13 +502,15 @@ The following elements are used to describe a schema:
...
@@ -420,13 +502,15 @@ The following elements are used to describe a schema:
\end
{
elementdesc
}
\end
{
elementdesc
}
\begin
{
elementdesc
}{
import
}{
EMPTY
}
\begin
{
elementdesc
}{
import
}{
EMPTY
}
Import a schema component.
Import a schema component.
Exactly one of the attributes
Exactly one of the two possible attributes
must be specified.
\attribute
{
package
}
and
\attribute
{
src
}
must be specified.
\begin
{
attributedesc
}{
file
}{
file name without directory information
}
\begin
{
attributedesc
}{
file
}{
file name without directory information
}
Name of the component file within a package; if not specified,
Name of the component file within a package; if not specified,
\file
{
component.xml
}
is used. This may only be given when
\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
}
\end
{
attributedesc
}
\begin
{
attributedesc
}{
package
}{
\datatype
{
dotted
-
name
}}
\begin
{
attributedesc
}{
package
}{
\datatype
{
dotted
-
name
}}
...
@@ -662,6 +746,8 @@ directly reference datatype code. Schema components are provided by
...
@@ -662,6 +746,8 @@ directly reference datatype code. Schema components are provided by
Python packages. The component definition is normally stored in the
Python packages. The component definition is normally stored in the
file
\file
{
component.xml
}
; an alternate filename may be specified
file
\file
{
component.xml
}
; an alternate filename may be specified
using the
\attribute
{
file
}
attribute of the
\element
{
import
}
element.
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
The component defines the types provided by that component; it must
have a
\element
{
component
}
element as the document element.
have a
\element
{
component
}
element as the document element.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment