1997-05-26 17:15:09 -03:00
|
|
|
FAQ Wizard
|
|
|
|
----------
|
|
|
|
|
|
|
|
Author: Guido van Rossum <guido@python.org>
|
1997-12-21 03:05:32 -04:00
|
|
|
Version: 0.9.0
|
|
|
|
Date: 21 December 1997
|
1997-05-26 17:15:09 -03:00
|
|
|
|
|
|
|
|
|
|
|
This is a CGI program that maintains a user-editable FAQ. It uses RCS
|
|
|
|
to keep track of changes to individual FAQ entries. It is fully
|
|
|
|
configurable; everything you might want to change when using this
|
|
|
|
program to maintain some other FAQ than the Python FAQ is contained in
|
|
|
|
the configuration module, faqconf.py.
|
|
|
|
|
1997-06-02 20:10:06 -03:00
|
|
|
Note that the bulk of the code is not an executable script; it's an
|
|
|
|
importable module. The actual script in cgi-bin is minimal.
|
1997-05-26 17:15:09 -03:00
|
|
|
|
|
|
|
Files:
|
|
|
|
|
|
|
|
faqw.py executable script to be edited and installed in cgi-bin
|
1997-12-09 12:04:46 -04:00
|
|
|
faqwiz.py main module, lives in same directory as FAQ entry files
|
1997-05-26 17:15:09 -03:00
|
|
|
faqconf.py main configuration module
|
|
|
|
faqcust.py additional local customization module (optional)
|
|
|
|
|
1997-12-21 03:05:32 -04:00
|
|
|
|
|
|
|
What's New?
|
|
|
|
-----------
|
|
|
|
|
|
|
|
Version 0.9.0 uses the re module (Perl style regular expressions) for
|
|
|
|
all its regular expression needs, instead of the regex and regsub
|
|
|
|
modules (Emacs style). This affects the syntax for regular
|
|
|
|
expressions entered by the user as search strings (with "regular
|
|
|
|
expression" checked), hence the version number jump.
|
|
|
|
|
|
|
|
|
1997-06-02 20:10:06 -03:00
|
|
|
Setup Information
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
This assumes you are familiar with Python, with your http server, and
|
|
|
|
with running CGI scripts under your http server. You need Python 1.4
|
1997-08-27 23:38:01 -03:00
|
|
|
or better.
|
|
|
|
|
|
|
|
Select a place where the Python modules that constitute the FAQ wizard
|
|
|
|
will live (the directory where you unpacked it is an obvious choice).
|
|
|
|
This will be called the SRCDIR. This directory should not be writable
|
|
|
|
by other users of your system (since they would be able to execute
|
|
|
|
arbitrary code by invoking the FAQ wizard's CGI script).
|
1997-06-02 20:10:06 -03:00
|
|
|
|
|
|
|
Create a dedicated working directory, preferably one that's not
|
1997-08-27 23:38:01 -03:00
|
|
|
directly reachable from your http server. This will be called the
|
|
|
|
FAQDIR. Create a subdirectory named RCS. Make both the working
|
|
|
|
directory and the RCS subdirectory wrld-writable. (This is essential,
|
|
|
|
since the FAQ wizard runs as use nobody, and needs to create
|
|
|
|
additional files here!)
|
1997-06-02 20:10:06 -03:00
|
|
|
|
|
|
|
Edit faqconf.py to reflect your setup. You only need to edit the top
|
|
|
|
part, up till the line of all dashes. The comments should guide you
|
1997-08-27 23:38:54 -03:00
|
|
|
in your edits. (Actually, you can also choose to add your changes to
|
|
|
|
faqcust.py and leave faqconf.py alone. This is essential if you are
|
|
|
|
maintaining multiple FAQs; see below.)
|
1997-06-02 20:10:06 -03:00
|
|
|
|
|
|
|
Don't forget to edit the SECTION_TITLES variables to reflect the set
|
|
|
|
of section titles for your FAQ!
|
|
|
|
|
|
|
|
Next, edit faqw.py to reflect the pathname of your Python interpreter
|
1997-08-27 23:38:01 -03:00
|
|
|
and the values for SRCDIR and FAQDIR that you just chose. Then
|
|
|
|
install faqw.py in your cgi-bin directory. Make sure that it is
|
|
|
|
world-executable. You should now be able to connect to the FAQ wizard
|
|
|
|
by entering the following URL in your web client (subsituting the
|
|
|
|
appropriate host and port for "your.web.server", and perhaps
|
|
|
|
specifying a different directory for "cgi-bin" if local conventions so
|
|
|
|
dictate):
|
1997-06-02 20:10:06 -03:00
|
|
|
|
|
|
|
http://your.web.server/cgi-bin/faqw.py
|
|
|
|
|
|
|
|
If you are unable to get this working, check your server's error_log
|
|
|
|
file. The documentation for Python's cgi module in the Python Library
|
|
|
|
Reference Manual gives plentyu additional information about installing
|
|
|
|
and debugging CGI scripts, including setup debugging. This
|
|
|
|
documentation is repeated in the doc string in the cgi module; try
|
|
|
|
``import cgi; print cgi.__doc__''.
|
|
|
|
|
1997-08-27 23:38:01 -03:00
|
|
|
Assuming this works, you should now be able to add the first entry to
|
1997-06-02 20:10:06 -03:00
|
|
|
your FAQ using the FAQ wizard interface. This creates a file
|
|
|
|
faq01.001.htp in your working directory and an RCS revision history
|
|
|
|
file faq01.001.htp,v in the RCS subdirectory. You can now exercise
|
|
|
|
the other FAQ wizard features (search, index, whole FAQ, what's new,
|
1997-08-27 23:38:01 -03:00
|
|
|
roulette, and so on).
|
1997-05-30 09:01:24 -03:00
|
|
|
|
1997-12-21 03:05:32 -04:00
|
|
|
|
1997-08-27 23:38:54 -03:00
|
|
|
Maintaining Multiple FAQs
|
|
|
|
-------------------------
|
|
|
|
|
|
|
|
If you have multiple FAQs, you need a separate FAQDIR per FAQ, and a
|
|
|
|
different customization file per FAQ. The easiest thing to do would
|
|
|
|
be to have the faqcust.py for each FAQ live in the FAQDIR for that
|
|
|
|
FAQ, but that creates some security concerns, since the FAQDIR must be
|
|
|
|
world writable: *if* someone who breaks into your system (or a
|
|
|
|
legitimate user) manages to edit the faqcust.py file they can get
|
|
|
|
arbitrary code to execute through the FAQ wizard. Therefore, you will
|
|
|
|
need a more complex setup.
|
|
|
|
|
|
|
|
The best way is probably to have a directory that is only writable by
|
|
|
|
you for each FAQ, where you place the copy of faqcust.py for that FAQ,
|
|
|
|
and have a world-writable subdirectory DATA for the data. You then
|
|
|
|
set FAQDIR to point to the DATA directory and change the faqw.py
|
|
|
|
bootstrap script to add FAQDIR/.. to sys.path (in front of SRCDIR, so
|
|
|
|
the dummy faqcust.py from SRCDIR is ignored).
|
|
|
|
|
1997-05-26 17:15:09 -03:00
|
|
|
--Guido van Rossum (home page: http://www.python.org/~guido/)
|