Code

instance -> tracker, node -> item
authorrichard <richard@57a73879-2fb5-44c3-a270-3262357dd7e2>
Tue, 10 Sep 2002 00:15:59 +0000 (00:15 +0000)
committerrichard <richard@57a73879-2fb5-44c3-a270-3262357dd7e2>
Tue, 10 Sep 2002 00:15:59 +0000 (00:15 +0000)
git-svn-id: http://svn.roundup-tracker.org/svnroot/roundup/trunk@1109 57a73879-2fb5-44c3-a270-3262357dd7e2

12 files changed:
doc/FAQ.txt
doc/customizing.txt
doc/design.txt
doc/developers.txt
doc/getting_started.txt
doc/glossary.txt
doc/implementation.txt
doc/installation.txt
doc/security.txt
doc/templating.txt
doc/upgrading.txt
doc/user_guide.txt

index f03e86682d6ced0cc889f5e1e177fbfcd6508c3d..270a3fb8aaafb73b3a37e8abe90f271c888a9a80 100644 (file)
@@ -2,7 +2,7 @@
 Roundup FAQ
 ===========
 
-:Version: $Revision: 1.9 $
+:Version: $Revision: 1.10 $
 
 NOTE: This is just a grabbag, most of this should go into documentation.
 
@@ -12,65 +12,14 @@ NOTE: This is just a grabbag, most of this should go into documentation.
 Changing HTML layout
 --------------------
 
-Note changes to the files in html take place immediatly without
-restart, even when running roundup-server.
-
-Displaying whole messages not only the summary
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Modify instance/html/msg.index change::
-
-   <td><display call="plain('summary')"></td>
-
-to::
-
-   <td><pre><display call="plain('content')"></pre></td>
-
-displays the whole message not only the first line and 'pre'
-prevents the browser from reformatting. 
-
-Getting the nosy list picker instead of textfield
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-In classic template there is plenty of space below the text field.
-So one could modify instance/html/issue.item to use it.
-
-At the file top set 'border=1' to see cell boundaries, then
-replace::
-
-  <td class="form-text"><display call="field('nosy',size=20)"></td>
-  
-by::
-
-  <td rowspan=5 class="form-text"><display call="menu('nosy',height=10)"></td>
-
-and remove the last cell in the next four rows, either by deleting a cell
-or by reducing colspan.
-
-Want to see the issue id (the number) on the issue item display
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The number is really a central information and not an internal one.
-
-In file INSTANCE/html/issue.item displays the creator, so one could add
-the number to it.::
-
-  <td class="form-text"><display call="reldate('creation', pretty=1)">
-      (<display call="plain('creator')">)</td>
-
-to see::
-
-  <td class="form-text"><display call="reldate('creation', pretty=1)">
-      (issue<display call="plain('id')"> by <display call="plain('creator')">)</td>
-
 Installation
 ------------
 
 Living without a mailserver.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Remove the nosy reactor, means delete the file
-'INSTANCE/detectors/nosyreactor.py'.
+Remove the nosy reactor, means delete the tracker file
+'detectors/nosyreactor.py'.
 
 
 Rights issues (MISSING)
@@ -91,42 +40,6 @@ see Troubleshooting_.
 Troubleshooting
 ---------------
 
-AttributeError: '_roundup_instance_1' module has no attribute 'open'
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-For example submitting issues via roundup-mailgw breaks similar to this::
-
-  Command died with status 1:
-  "/usr/local/bin/python /usr/local/bin/roundup-mailgw /home/roundup".
-  Command output: Traceback (most recent call last):  
-    File "/usr/local/bin/roundup-mailgw", line 178, in ? 
-       sys.exit(main(sys.argv))
-    File "/usr/local/bin/roundup-mailgw", line 153, in main 
-      db = instance.open('admin')
-       AttributeError: '_roundup_instance_1' module has no attribute 'open'
-
-Happens if the user which accesses the instance has no read right
-on 'INSTANCE/dbinit.py' or 'pyc'. 
-
-If the user has no rights on the 'INSTANCE/db' the mailgw finishes,
-but is, of course, unable to add the message. A notification to
-the roundup-admin is sent, with a longer trace ending in::
-
-  File "/opt/python/lib/python2.2/dbhash.py", line 16, in open
-    return bsddb.hashopen(file, flag, mode)
-  error: (13, 'Keine Berechtigung')
-
-Replace 'Keine Berechtigung' by 'Not permitted' or ...
-
-An easy way to test whether it's a permissions problem, or some other mail
-server configuration problem is to cat an email-formatted text file
-directly to the roundup-mailgw script as the roundup user.::
-
-  cat issue.txt | /usr/local/bin/roundup-mailgw /home/roundup
-
-If that doesn't raise any errors, the problem is the permissions of the
-MTA. 
-
 -----------------
 
 Back to `Table of Contents`_
index 076e9ceb09611898b0c7f396978671df2533b2a3..03060b7d7d90e03ab0121bdf6aeae6f0bcb6445d 100644 (file)
@@ -2,7 +2,7 @@
 Customising Roundup
 ===================
 
-:Version: $Revision: 1.22 $
+:Version: $Revision: 1.23 $
 
 .. This document borrows from the ZopeBook section on ZPT. The original is at:
    http://www.zope.org/Documentation/Books/ZopeBook/current/ZPT.stx
@@ -15,51 +15,51 @@ What You Can Do
 
 Customisation of Roundup can take one of five forms:
 
-1. `instance configuration`_ file changes
-2. database, or `instance schema`_ changes
+1. `tracker configuration`_ file changes
+2. database, or `tracker schema`_ changes
 3. "definition" class `database content`_ changes
 4. behavioural changes, through detectors_
 5. `access controls`_
 
 The third case is special because it takes two distinctly different forms
-depending upon whether the instance has been initialised or not. The other two
-may be done at any time, before or after instance initialisation. Yes, this
+depending upon whether the tracker has been initialised or not. The other two
+may be done at any time, before or after tracker initialisation. Yes, this
 includes adding or removing properties from classes.
 
 
-Instances in a Nutshell
------------------------
+Trackers in a Nutshell
+----------------------
 
-Instances have the following structure:
+Trackers have the following structure:
 
 +-------------------+--------------------------------------------------------+
-|instance_config.py |Holds the basic instance_configuration                  |
+|config.py          |Holds the basic `tracker configuration`_                |
 +-------------------+--------------------------------------------------------+
-|dbinit.py          |Holds the instance_schema                               |
+|dbinit.py          |Holds the `tracker schema`_                             |
 +-------------------+--------------------------------------------------------+
-|interfaces.py      |Defines the Web and E-Mail interfaces for the instance  |
+|interfaces.py      |Defines the Web and E-Mail interfaces for the tracker   |
 +-------------------+--------------------------------------------------------+
-|select_db.py       |Selects the database back-end for the instance          |
+|select_db.py       |Selects the database back-end for the tracker           |
 +-------------------+--------------------------------------------------------+
-|db/                |Holds the instance's database                           |
+|db/                |Holds the tracker's database                            |
 +-------------------+--------------------------------------------------------+
-|db/files/          |Holds the instance's upload files and messages          |
+|db/files/          |Holds the tracker's upload files and messages           |
 +-------------------+--------------------------------------------------------+
-|detectors/         |Auditors and reactors for this instance                 |
+|detectors/         |Auditors and reactors for this tracker                  |
 +-------------------+--------------------------------------------------------+
 |html/              |Web interface templates, images and style sheets        |
 +-------------------+--------------------------------------------------------+
 
-Instance Configuration
-----------------------
+Tracker Configuration
+---------------------
 
-The instance_config.py located in your instance home contains the basic
+The config.py located in your tracker home contains the basic
 configuration for the web and e-mail components of roundup's interfaces. This
 file is a Python module. The configuration variables available are:
 
 **INSTANCE_HOME** - ``os.path.split(__file__)[0]``
- The instance home directory. The above default code will automatically
- determine the instance home for you.
+ The tracker home directory. The above default code will automatically
+ determine the tracker home for you.
 
 **MAILHOST** - ``'localhost'``
  The SMTP mail host that roundup will use to send e-mail.
@@ -69,22 +69,22 @@ file is a Python module. The configuration variables available are:
 
 **DATABASE** - ``os.path.join(INSTANCE_HOME, 'db')``
  This is the directory that the database is going to be stored in. By default
- it is in the instance home.
+ it is in the tracker home.
 
 **TEMPLATES** - ``os.path.join(INSTANCE_HOME, 'html')``
  This is the directory that the HTML templates reside in. By default they are
- in the instance home.
+ in the tracker home.
 
 **INSTANCE_NAME** - ``'Roundup issue tracker'``
- A descriptive name for your roundup instance. This is sent out in e-mails and
+ A descriptive name for your roundup tracker. This is sent out in e-mails and
  appears in the heading of CGI pages.
 
 **ISSUE_TRACKER_EMAIL** - ``'issue_tracker@%s'%MAIL_DOMAIN``
  The email address that e-mail sent to roundup should go to. Think of it as the
instance's personal e-mail address.
tracker's personal e-mail address.
 
 **ISSUE_TRACKER_WEB** - ``'http://your.tracker.url.example/'``
- The web address that the instance is viewable at. This will be included in
+ The web address that the tracker is viewable at. This will be included in
  information sent to users of the tracker.
 
 **ADMIN_EMAIL** - ``'roundup-admin@%s'%MAIL_DOMAIN``
@@ -172,7 +172,7 @@ file is a Python module. The configuration variables available are:
   Selects the columns that should be displayed. Default is all.
  **FILTERSPEC** - *a dictionary giving the filter specification*
   The ``FILTERSPEC`` gives the filtering arguments. This selects the values
-  the node properties given by propname must have.
+  the item properties given by propname must have.
 
   Where the ``FILTERSPEC`` value is ``'CURRENT USER'``, it will be replaced
   by the id of the logged-in user. For example::
@@ -183,7 +183,7 @@ file is a Python module. The configuration variables available are:
    },
 
 **HEADER_ADD_LINKS** - ``['issue']``
- List the classes that users are able to add nodes to.
+ List the classes that users are able to add items to.
 
 **HEADER_SEARCH_LINKS** - ``['issue']``
  List the classes that users can search.
@@ -206,9 +206,9 @@ file is a Python module. The configuration variables available are:
    Selects which props should be displayed on the filter page. Default is
    all.
 
-The default instance_config.py is given below - as you
+The default config.py is given below - as you
 can see, the MAIL_DOMAIN must be edited before any interaction with the
-instance is attempted.::
+tracker is attempted.::
 
     # roundup home is this package's directory
     INSTANCE_HOME=os.path.split(__file__)[0]
@@ -229,13 +229,13 @@ instance is attempted.::
     # This is the directory that the HTML templates reside in
     TEMPLATES = os.path.join(INSTANCE_HOME, 'html')
 
-    # A descriptive name for your roundup instance
+    # A descriptive name for your roundup tracker
     INSTANCE_NAME = 'Roundup issue tracker'
 
     # The email address that mail to roundup should go to
     ISSUE_TRACKER_EMAIL = 'issue_tracker@%s'%MAIL_DOMAIN
 
-    # The web address that the instance is viewable at
+    # The web address that the tracker is viewable at
     ISSUE_TRACKER_WEB = 'http://your.tracker.url.example/'
 
     # The email address that roundup will complain to if it runs into trouble
@@ -286,14 +286,14 @@ instance is attempted.::
     MAIL_DEFAULT_CLASS = 'issue'   # use "issue" class by default
     #MAIL_DEFAULT_CLASS = ''        # disable (or just comment the var out)
 
-Instance Schema
----------------
+Tracker Schema
+--------------
 
 Note: if you modify the schema, you'll most likely need to edit the
       `web interface`_ HTML template files and `detectors`_ to reflect
       your changes.
 
-An instance schema defines what data is stored in the instance's database. The
+A tracker schema defines what data is stored in the tracker's database. The
 two schemas shipped with Roundup turn it into a typical software bug tracker
 (the extended schema allowing for support issues as well as bugs). Schemas are
 defined using Python code. The "classic" schema looks like this::
@@ -325,7 +325,7 @@ defined using Python code. The "classic" schema looks like this::
         organisation=String())
     user.setkey("username")
     user.create(username="admin", password=adminpw,
-        address=instance_config.ADMIN_EMAIL)
+        address=config.ADMIN_EMAIL)
 
     msg = FileClass(db, "msg", author=Link("user"), recipients=Multilink
         ("user"), date=Date(), summary=String(), files=Multilink("file"))
@@ -342,7 +342,7 @@ XXX security definitions
 Classes and Properties - creating a new information store
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-In the instance above, we've defined 7 classes of information:
+In the tracker above, we've defined 7 classes of information:
 
   priority
       Defines the possible levels of urgency for issues.
@@ -378,10 +378,10 @@ Class and Nodes
 
 A Class defines a particular class (or type) of data that will be stored in the
 database. A class comprises one or more properties, which given the information
-about the class nodes.
+about the class items.
 The actual data entered into the database, using class.create() are called
-nodes. They have a special immutable property called id. We sometimes refer to
-this as the nodeid.
+items. They have a special immutable property called id. We sometimes refer to
+this as the itemid.
 
 Properties
 ::::::::::
@@ -392,10 +392,10 @@ A Class is comprised of one or more properties of the following types:
       default encoding is defined on the roundup.password.Password class.
     * Date properties store date-and-time stamps. Their values are Timestamp
       objects.
-    * A Link property refers to a single other node selected from a specified
+    * A Link property refers to a single other item selected from a specified
       class. The class is part of the property; the value is an integer, the id
-      of the chosen node.
-    * A Multilink property refers to possibly many nodes in a specified class.
+      of the chosen item.
+    * A Multilink property refers to possibly many items in a specified class.
       The value is a list of integers.
 
 FileClass
@@ -405,7 +405,7 @@ FileClasses save their "content" attribute off in a separate file from the rest
 of the database. This reduces the number of large entries in the database,
 which generally makes databases more efficient, and also allows us to use
 command-line tools to operate on the files. They are stored in the files sub-
-directory of the db directory in your instance.
+directory of the db directory in your tracker.
 
 IssueClass
 ::::::::::
@@ -420,17 +420,17 @@ directory) handles this action. The superceder link indicates an issue which
 has superceded this one.
 They also have the dynamically generated "creation", "activity" and "creator"
 properties.
-The value of the "creation" property is the date when a node was created, and
-the value of the "activity" property is the date when any property on the node
+The value of the "creation" property is the date when a item was created, and
+the value of the "activity" property is the date when any property on the item
 was last edited (equivalently, these are the dates on the first and last
-records in the node's journal). The "creator" property holds a link to the user
+records in the item's journal). The "creator" property holds a link to the user
 that created the issue.
 
 setkey(property)
 ::::::::::::::::
 
 Select a String property of the class to be the key property. The key property
-muse be unique, and allows references to the nodes in the class by the content
+muse be unique, and allows references to the items in the class by the content
 of the key property. That is, we can refer to users by their username, e.g.
 let's say that there's an issue in roundup, issue 23. There's also a user,
 richard who happens to be user 2. To assign an issue to him, we could do either
@@ -447,7 +447,7 @@ Note, the same thing can be done in the web and e-mail interfaces.
 create(information)
 :::::::::::::::::::
 
-Create a node in the database. This is generally used to create nodes in the
+Create a item in the database. This is generally used to create items in the
 "definitional" classes like "priority" and "status".
 
 
@@ -461,9 +461,9 @@ Detectors - adding behaviour to your tracker
 --------------------------------------------
 .. _detectors:
 
-The detectors in your instance fire before (*auditors*) and after (*reactors*)
+The detectors in your tracker fire before (*auditors*) and after (*reactors*)
 changes to the contents of your database. They are Python modules that sit in
-your instance's ``detectors`` directory. You will have some installed by
+your tracker's ``detectors`` directory. You will have some installed by
 default - have a look. You can write new detectors or modify the existing
 ones. The existing detectors installed for you are:
 
@@ -476,7 +476,7 @@ ones. The existing detectors installed for you are:
   This provides the ``chatty`` auditor which changes the issue status from
   ``unread`` or ``closed`` to ``chatting`` if new messages appear. It also
   provides the ``presetunread`` auditor which pre-sets the status to
-  ``unread`` on new nodes if the status isn't explicitly defined.
+  ``unread`` on new items if the status isn't explicitly defined.
 
 See the detectors section in the `design document`__ for details of the
 interface for detectors.
@@ -496,21 +496,21 @@ Database Content
 ----------------
 
 Note: if you modify the content of definitional classes, you'll most likely
-       need to edit the instance `detectors`_ to reflect your changes.
+       need to edit the tracker `detectors`_ to reflect your changes.
 
 Customisation of the special "definitional" classes (eg. status, priority,
-resolution, ...) may be done either before or after the instance is
+resolution, ...) may be done either before or after the tracker is
 initialised. The actual method of doing so is completely different in each
 case though, so be careful to use the right one.
 
-**Changing content before instance initialisation**
-    Edit the dbinit module in your instance to alter the nodes created in using
+**Changing content before tracker initialisation**
+    Edit the dbinit module in your tracker to alter the items created in using
     the create() methods.
 
 
-**Changing content after instance initialisation**
+**Changing content after tracker initialisation**
     Use the roundup-admin interface's create, set and retire methods to add,
-    alter or remove nodes from the classes in question.
+    alter or remove items from the classes in question.
 
 
 
@@ -518,17 +518,17 @@ Web Interface
 -------------
 
 The web interface works behind the cgi-bin/roundup.cgi or roundup-server
-scripts. In both cases, the scripts determine which instance is being accessed
+scripts. In both cases, the scripts determine which tracker is being accessed
 (the first part of the URL path inside the scope of the CGI handler) and pass
-control on to the instance interfaces.Client class which handles the rest of
+control on to the tracker interfaces.Client class which handles the rest of
 the access through its main() method. This means that you can do pretty much
-anything you want as a web interface to your instance.
+anything you want as a web interface to your tracker.
 
 Figuring out what is displayed
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Most customisation of the web view can be done by modifying the templates in
-the instance **html** directory. There are several types of files in there:
+the tracker **html** directory. There are several types of files in there:
 
 page
   defines the overall look of your tracker. When you
@@ -581,7 +581,7 @@ Determining web context
 ~~~~~~~~~~~~~~~~~~~~~~~
 
 To determine the "context" of a request, we look at the URL and the special
-request variable ``:template``. The URL path after the instance identifier
+request variable ``:template``. The URL path after the tracker identifier
 is examined. Typical URL paths look like:
 
 1.  ``/tracker/issue``
@@ -590,7 +590,7 @@ is examined. Typical URL paths look like:
 4.  ``/cgi-bin/roundup.cgi/tracker/file1``
 5.  ``/cgi-bin/roundup.cgi/tracker/file1/kitten.png``
 
-where the "instance identifier" is "tracker" in the above cases. That means
+where the "tracker identifier" is "tracker" in the above cases. That means
 we're looking at "issue", "issue1", "_file/style.css", "file1" and
 "file1/kitten.png" in the cases above. The path is generally only one
 entry long - longer paths are handled differently.
@@ -599,7 +599,7 @@ a. if there is no path, then we are in the "home" context.
 b. if the path starts with "_file" (as in example 3,
    "/tracker/_file/style.css"), then the additional path entry,
    "style.css" specifies the filename of a static file we're to serve up
-   from the instance "html" directory. Raises a SendStaticFile
+   from the tracker "html" directory. Raises a SendStaticFile
    exception.
 c. if there is something in the path (as in example 1, "issue"), it identifies
    the tracker class we're to display.
@@ -644,13 +644,13 @@ edit
  elements you may use:
 
  :link=designator:property and :multilink=designator:property
-  The value specifies a node designator and the property on that
-  node to add _this_ node to as a link or multilink.
__note
-  Create a message and attach it to the current node's
+  The value specifies an item designator and the property on that
+  item to add _this_ item to as a link or multilink.
:note
+  Create a message and attach it to the current item's
   "messages" property.
__file
-  Create a file and attach it to the current node's
:file
+  Create a file and attach it to the current item's
   "files" property. Attach the file to the message created from
   the __note if it's supplied.
  :required=property,property,...
@@ -677,7 +677,7 @@ search
 
 Each of the actions is implemented by a corresponding *actionAction* (where
 "action" is the name of the action) method on
-the roundup.cgi.Client class, which also happens to be in your instance as
+the roundup.cgi.Client class, which also happens to be in your tracker as
 interfaces.Client. So if you need to define new actions, you may add them
 there (see `definining new web actions`_).
 
@@ -713,10 +713,10 @@ search
  Base behaviour is to check the user can view this class.
 
 
-Repurcussions of changing the instance schema
+Repurcussions of changing the tracker schema
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-If you choose to change the `instance schema`_ you will need to ensure the web
+If you choose to change the `tracker schema`_ you will need to ensure the web
 interface knows about it:
 
 1. Index, item and search pages for the relevant classes may need to have
@@ -727,12 +727,7 @@ interface knows about it:
 Overall Look - "page" template
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-The "page" template in your instances
-roundup.cgi_client.Class. This class is mixed-in to your instance through the
-instance's interfaces module. This means you can override the header and
-footer with your own code. This allows you to use a sidebar navigation scheme,
-for example.
-
+XXX
 
 How the templates work
 ~~~~~~~~~~~~~~~~~~~~~~
@@ -873,12 +868,12 @@ The following variables are available to templates.
    - the current index information (``filterspec``, ``filter`` args,
      ``properties``, etc) parsed out of the form. 
    - methods for easy filterspec link generation
-   - *user*, the current user node as an HTMLItem instance
+   - *user*, the current user item as an HTMLItem instance
    - *form*
      The current CGI form information as a mapping of form argument
      name to value
-*instance*
-  The current instance
+*tracker*
+  The current tracker
 *db*
   The current database, through which db.config may be reached.
 *nothing*
@@ -920,7 +915,7 @@ Variable    Holds
 form        the CGI form as a cgi.FieldStorage
 env         the CGI environment variables
 url         the current URL path for this request
-base        the base URL for this instance
+base        the base URL for this tracker
 user        a HTMLUser instance for this user
 classname   the current classname (possibly None)
 template    the current template (suffix, also possibly None)
@@ -975,9 +970,9 @@ added for clarity)::
 
 The index view is determined by two parts of the specifier: the layout part and
 the filter part. The layout part consists of the query parameters that begin
-with colons, and it determines the way that the properties of selected nodes
+with colons, and it determines the way that the properties of selected items
 are displayed. The filter part consists of all the other query parameters, and
-it determines the criteria by which nodes are selected for display.
+it determines the criteria by which items are selected for display.
 The filter part is interactively manipulated with the form widgets displayed in
 the filter section. The layout part is interactively manipulated by clicking on
 the column headings in the table.
@@ -986,7 +981,7 @@ The filter part selects the union of the sets of items with values matching any
 specified Link properties and the intersection of the sets of items with values
 matching any specified Multilink properties.
 
-The example specifies an index of "issue" nodes. Only items with a "status" of
+The example specifies an index of "issue" items. Only items with a "status" of
 either "unread" or "in-progres" or "resolved" are displayed, and only items
 with "topic" values including both "security" and "ui" are displayed. The items
 are grouped by priority, arranged in ascending order; and within groups, sorted
@@ -1066,13 +1061,13 @@ template issue item edit form - from the "issue.item" template)::
  <tr>
   <th nowrap>Change Note</th>
   <td colspan=3>
-   <textarea name="__note" wrap="hard" rows="5" cols="60"></textarea>
+   <textarea name=":note" wrap="hard" rows="5" cols="60"></textarea>
   </td>
  </tr>
  
  <tr>
   <th nowrap>File</th>
-  <td colspan=3><input type="file" name="__file" size="40"></td>
+  <td colspan=3><input type="file" name=":file" size="40"></td>
  </tr>
  
  <tr>
@@ -1086,7 +1081,7 @@ template issue item edit form - from the "issue.item" template)::
 
 When a change is submitted, the system automatically generates a message
 describing the changed properties. As shown in the example, the editor
-template can use the "__note" and "__file" fields, which are added to the
+template can use the ":note" and ":file" fields, which are added to the
 standard change note message generated by Roundup.
 
 Spool Section
@@ -1108,7 +1103,7 @@ This is generally generated with the template::
 
 *To be done:*
 
-*The actual history entries of the node may be accessed for manual templating
+*The actual history entries of the item may be accessed for manual templating
 through the "journal" method of the item*::
 
  <tal:block tal:repeat="entry context/journal">
@@ -1160,18 +1155,18 @@ email users get, for example to not give them access to the web interface if
 they register through email.
 
 You may use the ``roundup-admin`` "``security``" command to display the
-current Role and Permission configuration in your instance.
+current Role and Permission configuration in your tracker.
 
 Adding a new Permission
 ~~~~~~~~~~~~~~~~~~~~~~~
 
 When adding a new Permission, you will need to:
 
-1. add it to your instance's dbinit so it is created
+1. add it to your tracker's dbinit so it is created
 2. enable it for the Roles that should have it (verify with
    "``roundup-admin security``")
 3. add it to the relevant HTML interface templates
-4. add it to the appropriate xxxPermission methods on in your instance
+4. add it to the appropriate xxxPermission methods on in your tracker
    interfaces module
 
 
index 1c7de7b144335cf4bd5739333372c7ad1f7e9aca..27a29646db42e3247b96030831d315e6193a550d 100644 (file)
@@ -54,7 +54,7 @@ Hyperdatabase
 The lowest-level component to be implemented is the hyperdatabase.
 The hyperdatabase is intended to be
 a flexible data store that can hold configurable data in
-records which we call nodes.
+records which we call items.
 
 The hyperdatabase is implemented on top of the storage layer,
 an external module for storing its data.  The storage layer could
@@ -194,24 +194,24 @@ Nodes and Classes
 
 Nodes contain data in properties.  To Python, these
 properties are presented as the key-value pairs of a dictionary.
-Each node belongs to a class which defines the names
+Each item belongs to a class which defines the names
 and types of its properties.  The database permits the creation
-and modification of classes as well as nodes.
+and modification of classes as well as items.
 
 Identifiers and Designators
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Each node has a numeric identifier which is unique among
-nodes in its class.  The nodes are numbered sequentially
+Each item has a numeric identifier which is unique among
+items in its class.  The items are numbered sequentially
 within each class in order of creation, starting from 1.
 The designator
-for a node is a way to identify a node in the database, and
-consists of the name of the node's class concatenated with
-the node's numeric identifier.
+for an item is a way to identify an item in the database, and
+consists of the name of the item's class concatenated with
+the item's numeric identifier.
 
 For example, if "spam" and "eggs" are classes, the first
-node created in class "spam" has id 1 and designator "spam1".
-The first node created in class "eggs" also has id 1 but has
+item created in class "spam" has id 1 and designator "spam1".
+The first item created in class "eggs" also has id 1 but has
 the distinct designator "eggs1".  Node designators are
 conventionally enclosed in square brackets when mentioned
 in plain text.  This permits a casual mention of, say,
@@ -234,11 +234,11 @@ A property may be one of five basic types:
 - Date properties store date-and-time stamps.
   Their values are Timestamp objects.
 
-- A Link property refers to a single other node
+- A Link property refers to a single other item
   selected from a specified class.  The class is part of the property;
-  the value is an integer, the id of the chosen node.
+  the value is an integer, the id of the chosen item.
 
-- A Multilink property refers to possibly many nodes
+- A Multilink property refers to possibly many items
   in a specified class.  The value is a list of integers.
 
 *None* is also a permitted value for any of these property
@@ -275,19 +275,19 @@ specifying what properties belong in classes::
     class Link:
         def __init__(self, classname, do_journal='yes'):
             """An object designating a Link property that links to
-            nodes in a specified class.
+            items in a specified class.
 
             If the do_journal argument is not 'yes' then changes to
-            the property are not journalled in the linked node.
+            the property are not journalled in the linked item.
             """
 
     class Multilink:
         def __init__(self, classname, do_journal='yes'):
             """An object designating a Multilink property that links
-            to nodes in a specified class.
+            to items in a specified class.
 
             If the do_journal argument is not 'yes' then changes to
-            the property are not journalled in the linked node(s).
+            the property are not journalled in the linked item(s).
             """
 
 
@@ -324,7 +324,7 @@ Here is the interface provided by the hyperdatabase::
             """
 
     class Class:
-        """The handle to a particular class of nodes in a hyperdatabase."""
+        """The handle to a particular class of items in a hyperdatabase."""
 
         def __init__(self, db, classname, **properties):
             """Create a new class with a given name and property specification.
@@ -334,10 +334,10 @@ Here is the interface provided by the hyperdatabase::
             must map names to property objects, or a TypeError is raised.
             """
 
-        # Editing nodes:
+        # Editing items:
 
         def create(self, **propvalues):
-            """Create a new node of this class and return its id.
+            """Create a new item of this class and return its id.
 
             The keyword arguments in 'propvalues' map property names to values.
             The values of arguments must be acceptable for the types of their
@@ -346,43 +346,43 @@ Here is the interface provided by the hyperdatabase::
             collide with other key strings or a ValueError is raised.  Any other
             properties on this class that are missing from the 'propvalues'
             dictionary are set to None.  If an id in a link or multilink
-            property does not refer to a valid node, an IndexError is raised.
+            property does not refer to a valid item, an IndexError is raised.
             """
 
-        def get(self, nodeid, propname):
-            """Get the value of a property on an existing node of this class.
+        def get(self, itemid, propname):
+            """Get the value of a property on an existing item of this class.
 
-            'nodeid' must be the id of an existing node of this class or an
+            'itemid' must be the id of an existing item of this class or an
             IndexError is raised.  'propname' must be the name of a property
             of this class or a KeyError is raised.
             """
 
-        def set(self, nodeid, **propvalues):
-            """Modify a property on an existing node of this class.
+        def set(self, itemid, **propvalues):
+            """Modify a property on an existing item of this class.
             
-            'nodeid' must be the id of an existing node of this class or an
+            'itemid' must be the id of an existing item of this class or an
             IndexError is raised.  Each key in 'propvalues' must be the name
             of a property of this class or a KeyError is raised.  All values
             in 'propvalues' must be acceptable types for their corresponding
             properties or a TypeError is raised.  If the value of the key
             property is set, it must not collide with other key strings or a
             ValueError is raised.  If the value of a Link or Multilink
-            property contains an invalid node id, a ValueError is raised.
+            property contains an invalid item id, a ValueError is raised.
             """
 
-        def retire(self, nodeid):
-            """Retire a node.
+        def retire(self, itemid):
+            """Retire an item.
             
-            The properties on the node remain available from the get() method,
-            and the node's id is never reused.  Retired nodes are not returned
-            by the find(), list(), or lookup() methods, and other nodes may
+            The properties on the item remain available from the get() method,
+            and the item's id is never reused.  Retired items are not returned
+            by the find(), list(), or lookup() methods, and other items may
             reuse the values of their key properties.
             """
 
-        def history(self, nodeid):
-            """Retrieve the journal of edits on a particular node.
+        def history(self, itemid):
+            """Retrieve the journal of edits on a particular item.
 
-            'nodeid' must be the id of an existing node of this class or an
+            'itemid' must be the id of an existing item of this class or an
             IndexError is raised.
 
             The returned list contains tuples of the form
@@ -394,42 +394,42 @@ Here is the interface provided by the hyperdatabase::
             'action' may be:
 
                 'create' or 'set' -- 'params' is a dictionary of property values
-                'link' or 'unlink' -- 'params' is (classname, nodeid, propname)
+                'link' or 'unlink' -- 'params' is (classname, itemid, propname)
                 'retire' -- 'params' is None
             """
 
-        # Locating nodes:
+        # Locating items:
 
         def setkey(self, propname):
             """Select a String property of this class to be the key property.
 
             'propname' must be the name of a String property of this class or
             None, or a TypeError is raised.  The values of the key property on
-            all existing nodes must be unique or a ValueError is raised.
+            all existing items must be unique or a ValueError is raised.
             """
 
         def getkey(self):
             """Return the name of the key property for this class or None."""
 
         def lookup(self, keyvalue):
-            """Locate a particular node by its key property and return its id.
+            """Locate a particular item by its key property and return its id.
 
             If this class has no key property, a TypeError is raised.  If the
             'keyvalue' matches one of the values for the key property among
-            the nodes in this class, the matching node's id is returned;
+            the items in this class, the matching item's id is returned;
             otherwise a KeyError is raised.
             """
 
-        def find(self, propname, nodeid):
-            """Get the ids of nodes in this class which link to the given nodes.
+        def find(self, propname, itemid):
+            """Get the ids of items in this class which link to the given items.
 
-            'propspec' consists of keyword args propname={nodeid:1,}   
+            'propspec' consists of keyword args propname={itemid:1,}   
             'propname' must be the name of a property in this class, or a
             KeyError is raised.  That property must be a Link or Multilink
             property, or a TypeError is raised.
 
-            Any node in this class whose 'propname' property links to any of the
-            nodeids will be returned. Used by the full text indexing, which
+            Any item in this class whose 'propname' property links to any of the
+            itemids will be returned. Used by the full text indexing, which
             knows that "foo" occurs in msg1, msg3 and file7, so we have hits
             on these issues:
 
@@ -437,20 +437,20 @@ Here is the interface provided by the hyperdatabase::
             """
 
         def filter(self, search_matches, filterspec, sort, group):
-            ''' Return a list of the ids of the active nodes in this class that
+            ''' Return a list of the ids of the active items in this class that
                 match the 'filter' spec, sorted by the group spec and then the
                 sort spec.
             '''
 
         def list(self):
-            """Return a list of the ids of the active nodes in this class."""
+            """Return a list of the ids of the active items in this class."""
 
         def count(self):
-            """Get the number of nodes in this class.
+            """Get the number of items in this class.
 
-            If the returned integer is 'numnodes', the ids of all the nodes
-            in this class run from 1 to numnodes, and numnodes+1 will be the
-            id of the next node to be created in this class.
+            If the returned integer is 'numitems', the ids of all the items
+            in this class run from 1 to numitems, and numitems+1 will be the
+            id of the next item to be created in this class.
             """
 
         # Manipulating properties:
@@ -467,21 +467,21 @@ Here is the interface provided by the hyperdatabase::
             is raised before any properties have been added.
             """
 
-        def getnode(self, nodeid, cache=1):
-            ''' Return a Node convenience wrapper for the node.
+        def getitem(self, itemid, cache=1):
+            ''' Return a Node convenience wrapper for the item.
 
-            'nodeid' must be the id of an existing node of this class or an
+            'itemid' must be the id of an existing item of this class or an
             IndexError is raised.
 
             'cache' indicates whether the transaction cache should be queried
-            for the node. If the node has been modified and you need to
+            for the item. If the item has been modified and you need to
             determine what its values prior to modification are, you need to
             set cache=0.
             '''
 
     class Node:
-        ''' A convenience wrapper for the given node. It provides a mapping
-            interface to a single node's properties
+        ''' A convenience wrapper for the given item. It provides a mapping
+            interface to a single item's properties
         '''
 
 Hyperdatabase Implementations
@@ -563,12 +563,12 @@ Here is an example of how the hyperdatabase module would work in practice::
 
 
 For the purposes of journalling, when a Multilink property is
-set to a new list of nodes, the hyperdatabase compares the old
+set to a new list of items, the hyperdatabase compares the old
 list to the new list.
-The journal records "unlink" events for all the nodes that appear
+The journal records "unlink" events for all the items that appear
 in the old list but not the new list,
 and "link" events for
-all the nodes that appear in the new list but not in the old list.
+all the items that appear in the new list but not in the old list.
 
 
 Roundup Database
@@ -578,19 +578,19 @@ The Roundup database layer is implemented on top of the
 hyperdatabase and mediates calls to the database.
 Some of the classes in the Roundup database are considered
 issue classes.
-The Roundup database layer adds detectors and user nodes,
+The Roundup database layer adds detectors and user items,
 and on issues it provides mail spools, nosy lists, and superseders.
 
 Reserved Classes
 ~~~~~~~~~~~~~~~~
 
 Internal to this layer we reserve three special classes
-of nodes that are not issues.
+of items that are not issues.
 
 Users
 """""
 
-Users are stored in the hyperdatabase as nodes of
+Users are stored in the hyperdatabase as items of
 class "user".  The "user" class has the definition::
 
     hyperdb.Class(db, "user", username=hyperdb.String(),
@@ -601,14 +601,14 @@ class "user".  The "user" class has the definition::
 Messages
 """"""""
 
-E-mail messages are represented by hyperdatabase nodes of class "msg".
+E-mail messages are represented by hyperdatabase items of class "msg".
 The actual text content of the messages is stored in separate files.
 (There's no advantage to be gained by stuffing them into the
 hyperdatabase, and if messages are stored in ordinary text files,
 they can be grepped from the command line.)  The text of a message is
-saved in a file named after the message node designator (e.g. "msg23")
+saved in a file named after the message item designator (e.g. "msg23")
 for the sake of the command interface (see below).  Attachments are
-stored separately and associated with "file" nodes.
+stored separately and associated with "file" items.
 The "msg" class has the definition::
 
     hyperdb.Class(db, "msg", author=hyperdb.Link("user"),
@@ -618,7 +618,7 @@ The "msg" class has the definition::
                              files=hyperdb.Multilink("file"))
 
 The "author" property indicates the author of the message
-(a "user" node must exist in the hyperdatabase for any messages
+(a "user" item must exist in the hyperdatabase for any messages
 that are stored in the system).
 The "summary" property contains a summary of the message for display
 in a message index.
@@ -627,9 +627,9 @@ Files
 """""
 
 Submitted files are represented by hyperdatabase
-nodes of class "file".  Like e-mail messages, the file content
+items of class "file".  Like e-mail messages, the file content
 is stored in files outside the database,
-named after the file node designator (e.g. "file17").
+named after the file item designator (e.g. "file17").
 The "file" class has the definition::
 
     hyperdb.Class(db, "file", user=hyperdb.Link("user"),
@@ -674,7 +674,7 @@ changes and additional methods::
 
     class Database:
         def getuid(self):
-            """Return the id of the "user" node associated with the user
+            """Return the id of the "user" item associated with the user
             that owns this connection to the hyperdatabase."""
 
     class Class:
@@ -682,7 +682,7 @@ changes and additional methods::
 
         def create(self, **propvalues):
         def set(self, **propvalues):
-        def retire(self, nodeid):
+        def retire(self, itemid):
             """These operations trigger detectors and can be vetoed.  Attempts
             to modify the "creation" or "activity" properties cause a KeyError.
             """
@@ -702,25 +702,25 @@ changes and additional methods::
             dictionary attempts to specify any of these properties or a
             "creation" or "activity" property, a ValueError is raised."""
 
-        def get(self, nodeid, propname):
+        def get(self, itemid, propname):
         def getprops(self):
-            """In addition to the actual properties on the node, these
+            """In addition to the actual properties on the item, these
             methods provide the "creation" and "activity" properties."""
 
         # New methods:
 
-        def addmessage(self, nodeid, summary, text):
+        def addmessage(self, itemid, summary, text):
             """Add a message to an issue's mail spool.
 
-            A new "msg" node is constructed using the current date, the
+            A new "msg" item is constructed using the current date, the
             user that owns the database connection as the author, and
             the specified summary text.  The "files" and "recipients"
             fields are left empty.  The given text is saved as the body
-            of the message and the node is appended to the "messages"
+            of the message and the item is appended to the "messages"
             field of the specified issue.
             """
 
-        def sendmessage(self, nodeid, msgid):
+        def sendmessage(self, itemid, msgid):
             """Send a message to the members of an issue's nosy list.
 
             The message is sent only to users on the nosy list who are not
@@ -789,8 +789,8 @@ provide it a chance to register its detectors.
 
 There are two kinds of detectors:
 
-1. an auditor is triggered just before modifying an node
-2. a reactor is triggered just after an node has been modified
+1. an auditor is triggered just before modifying an item
+2. a reactor is triggered just after an item has been modified
 
 When the Roundup database is about to perform a
 ``create()``, ``set()``, or ``retire()``
@@ -808,7 +808,7 @@ Detector Interface Specification
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 The ``audit()`` and ``react()`` methods
-register detectors on a given class of nodes::
+register detectors on a given class of items::
 
     class Class:
         def audit(self, event, detector):
@@ -827,15 +827,15 @@ register detectors on a given class of nodes::
 
 Auditors are called with the arguments::
 
-    audit(db, cl, nodeid, newdata)
+    audit(db, cl, itemid, newdata)
 
 where ``db`` is the database, ``cl`` is an
 instance of Class or IssueClass within the database, and ``newdata``
 is a dictionary mapping property names to values.
 
 For a ``create()``
-operation, the ``nodeid`` argument is None and newdata
-contains all of the initial property values with which the node
+operation, the ``itemid`` argument is None and newdata
+contains all of the initial property values with which the item
 is about to be created.
 
 For a ``set()`` operation, newdata
@@ -846,21 +846,21 @@ For a ``retire()`` operation, newdata is None.
 
 Reactors are called with the arguments::
 
-    react(db, cl, nodeid, olddata)
+    react(db, cl, itemid, olddata)
 
 where ``db`` is the database, ``cl`` is an
 instance of Class or IssueClass within the database, and ``olddata``
 is a dictionary mapping property names to values.
 
 For a ``create()``
-operation, the ``nodeid`` argument is the id of the
-newly-created node and ``olddata`` is None.
+operation, the ``itemid`` argument is the id of the
+newly-created item and ``olddata`` is None.
 
 For a ``set()`` operation, ``olddata``
 contains the names and previous values of properties that were changed.
 
-For a ``retire()`` operation, ``nodeid`` is the
-id of the retired node and ``olddata`` is None.
+For a ``retire()`` operation, ``itemid`` is the
+id of the retired item and ``olddata`` is None.
 
 Detector Example
 ~~~~~~~~~~~~~~~~
@@ -901,7 +901,7 @@ a project proceeds when it has three approvals::
         db.project.react("set", approve_project)
 
 Here is another example of a detector that can allow or prevent
-the creation of new nodes.  In this scenario, patches for a software
+the creation of new items.  In this scenario, patches for a software
 project are submitted by sending in e-mail with an attached file,
 and we want to ensure that there are text/plain attachments on
 the message.  The maintainer of the package can then apply the
@@ -963,18 +963,18 @@ and in the printed results:
   time zone, and accepted in the full format or any of the partial
   formats explained above.
 
-- Link values are printed as node designators.  When given as
-  an argument, node designators and key strings are both accepted.
+- Link values are printed as item designators.  When given as
+  an argument, item designators and key strings are both accepted.
 
-- Multilink values are printed as lists of node designators
-  joined by commas.  When given as an argument, node designators
-  and key strings are both accepted; an empty string, a single node,
-  or a list of nodes joined by commas is accepted.
+- Multilink values are printed as lists of item designators
+  joined by commas.  When given as an argument, item designators
+  and key strings are both accepted; an empty string, a single item,
+  or a list of items joined by commas is accepted.
 
-When multiple nodes are specified to the
+When multiple items are specified to the
 roundup get or roundup set
 commands, the specified properties are retrieved or set
-on all the listed nodes.
+on all the listed items.
 
 When multiple results are returned by the roundup get
 or roundup find commands, they are printed one per
@@ -1025,12 +1025,12 @@ extracted and examined.  In a multipart/alternative
 message or part, we look for a text/plain subpart and
 ignore the other parts.  The text/plain subparts are
 assembled to form the textual body of the message, to
-be stored in the file associated with a "msg" class node.
+be stored in the file associated with a "msg" class item.
 Any parts of other types are each stored in separate
-files and given "file" class nodes that are linked to
-the "msg" node.
+files and given "file" class items that are linked to
+the "msg" item.
 
-The "summary" property on message nodes is taken from
+The "summary" property on message items is taken from
 the first non-quoting section in the message body.
 The message body is divided into sections by blank lines.
 Sections where the second and all subsequent lines begin
@@ -1039,18 +1039,18 @@ sections".  The first line of the first non-quoting
 section becomes the summary of the message.
 
 All of the addresses in the To: and Cc: headers of the
-incoming message are looked up among the user nodes, and
+incoming message are looked up among the user items, and
 the corresponding users are placed in the "recipients"
-property on the new "msg" node.  The address in the From:
+property on the new "msg" item.  The address in the From:
 header similarly determines the "author" property of the
-new "msg" node.
+new "msg" item.
 The default handling for
 addresses that don't have corresponding users is to create
 new users with no passwords and a username equal to the
 address.  (The web interface does not permit logins for
 users with no passwords.)  If we prefer to reject mail from
 outside sources, we can simply register an auditor on the
-"user" class that prevents the creation of user nodes with
+"user" class that prevents the creation of user items with
 no passwords.
 
 The subject line of the incoming message is examined to
@@ -1060,19 +1060,19 @@ in square brackets is sought as the first thing on the
 subject line (after skipping any "Fwd:" or "Re:" prefixes).
 
 If an issue designator (class name and id number) is found
-there, the newly created "msg" node is added to the "messages"
-property for that issue, and any new "file" nodes are added to
+there, the newly created "msg" item is added to the "messages"
+property for that issue, and any new "file" items are added to
 the "files" property for the issue.
 
 If just an issue class name is found there, we attempt to
 create a new issue of that class with its "messages" property
-initialized to contain the new "msg" node and its "files"
-property initialized to contain any new "file" nodes.
+initialized to contain the new "msg" item and its "files"
+property initialized to contain any new "file" items.
 
 Both cases may trigger detectors (in the first case we
 are calling the set() method to add the message to the
 issue's spool; in the second case we are calling the
-create() method to create a new node).  If an auditor
+create() method to create a new item).  If an auditor
 raises an exception, the original message is bounced back to
 the sender with the explanatory message given in the exception.
 
@@ -1144,7 +1144,7 @@ be displayed in an editable field.
 The display of a property is handled by functions in
 a displayers module.  Each function accepts at
 least three standard arguments -- the database, class name,
-and node id -- and returns a chunk of HTML.
+and item id -- and returns a chunk of HTML.
 
 Displayer functions are triggered by <display>
 tags in templates.  The call attribute of the tag
@@ -1172,7 +1172,7 @@ Function  Description
 plain     display a String property directly;
           display a Date property in a specified time zone with an option
           to omit the time from the date stamp; for a Link or Multilink
-          property, display the key strings of the linked nodes (or the
+          property, display the key strings of the linked items (or the
           ids if the linked class has no key property)
 field     display a property like the
           plain displayer above, but in a text field
@@ -1180,8 +1180,8 @@ field     display a property like the
 menu      for a Link property, display
           a menu of the available choices
 link      for a Link or Multilink property,
-          display the names of the linked nodes, hyperlinked to the
-          issue views on those nodes
+          display the names of the linked items, hyperlinked to the
+          issue views on those items
 count     for a Multilink property, display
           a count of the number of links in the list
 reldate   display a Date property in terms
@@ -1222,9 +1222,9 @@ The index view is determined by two parts of the
 specifier: the layout part and the filter part.
 The layout part consists of the query parameters that
 begin with colons, and it determines the way that the
-properties of selected nodes are displayed.
+properties of selected items are displayed.
 The filter part consists of all the other query parameters,
-and it determines the criteria by which node
+and it determines the criteria by which item
 are selected for display.
 
 The filter part is interactively manipulated with
@@ -1238,7 +1238,7 @@ properties and the intersection of the sets
 of issues with values matching any specified Multilink
 properties.
 
-The example specifies an index of "issue" nodes.
+The example specifies an index of "issue" items.
 Only issues with a "status" of either
 "unread" or "in-progres" or "resolved" are displayed,
 and only issues with "topic" values including both
@@ -1309,9 +1309,9 @@ Sorting
 
 String and Date values are sorted in the natural way.
 Link properties are sorted according to the value of the
-"order" property on the linked nodes if it is present; or
-otherwise on the key string of the linked nodes; or
-finally on the node ids.  Multilink properties are
+"order" property on the linked items if it is present; or
+otherwise on the key string of the linked items; or
+finally on the item ids.  Multilink properties are
 sorted according to how many links are present.
 
 Issue Views
@@ -1393,7 +1393,7 @@ Spool Section
 
 The spool section lists messages in the issue's "messages"
 property.  The index of messages displays the "date", "author",
-and "summary" properties on the message nodes, and selecting a
+and "summary" properties on the message items, and selecting a
 message takes you to its content.
 
 Access Control
@@ -1411,9 +1411,9 @@ Roles. These definitions are not persistent - they're defined when the
 application initialises.
 
 There will be two levels of Permission. The Class level permissions define
-logical permissions associated with all nodes of a particular class (or all
+logical permissions associated with all items of a particular class (or all
 classes). The Node level permissions define logical permissions associated
-with specific nodes by way of their user-linked properties.
+with specific items by way of their user-linked properties.
 
 
 Access Control Interface Specification
@@ -1457,13 +1457,13 @@ The security module defines::
                 "permission" is there for the specified classname.
             '''
 
-        def hasNodePermission(self, classname, nodeid, **propspec):
-            ''' Check the named properties of the given node to see if the
+        def hasNodePermission(self, classname, itemid, **propspec):
+            ''' Check the named properties of the given item to see if the
                 userid appears in them. If it does, then the user is granted
                 this permission check.
 
                 'propspec' consists of a set of properties and values that
-                must be present on the given node for access to be granted.
+                must be present on the given item for access to be granted.
 
                 If a property is a Link, the value must match the property
                 value. If a property is a Multilink, the value must appear
@@ -1507,11 +1507,11 @@ Detectors may also define roles in their init() function::
         p = db.security.addPermission(name="May Resolve", klass="issue")
         security.addToRole('Manager', p)
 
-The instance dbinit module then has in ``open()``::
+The tracker dbinit module then has in ``open()``::
 
     # open the database - it must be modified to init the Security class
     # from security.py as db.security
-    db = Database(instance_config, name)
+    db = Database(config, name)
 
     # add some extra permissions and associate them with roles
     ei = db.security.addPermission(name="Edit", klass="issue",
@@ -1525,7 +1525,7 @@ In the dbinit ``init()``::
 
     # create the two default users
     user.create(username="admin", password=Password(adminpw),
-                address=instance_config.ADMIN_EMAIL, roles='Admin')
+                address=config.ADMIN_EMAIL, roles='Admin')
     user.create(username="anonymous", roles='Anonymous')
 
 Then in the code that matters, calls to ``hasPermission`` and
@@ -1535,7 +1535,7 @@ to perform some action::
     if db.security.hasPermission('issue', 'Edit', userid):
         # all ok
 
-    if db.security.hasNodePermission('issue', nodeid, assignedto=userid):
+    if db.security.hasNodePermission('issue', itemid, assignedto=userid):
         # all ok
 
 Code in the core will make use of these methods, as should code in auditors in
@@ -1553,7 +1553,7 @@ where:
 - the permission attribute gives a comma-separated list of permission names.
   These are checked in turn using ``hasPermission`` and requires one to
   be OK.
-- the other attributes are lookups on the node using ``hasNodePermission``. If
+- the other attributes are lookups on the item using ``hasNodePermission``. If
   the attribute value is "$userid" then the current user's userid is tested.
 
 Any of these tests must pass or the ``<require>`` check will fail. The section
@@ -1615,7 +1615,7 @@ Deployment Scenarios
 The design described above should be general enough
 to permit the use of Roundup for bug tracking, managing
 projects, managing patches, or holding discussions.  By
-using nodes of multiple types, one could deploy a system
+using items of multiple types, one could deploy a system
 that maintains requirement specifications, catalogs bugs,
 and manages submitted patches, where patches could be
 linked to the bugs and requirements they address.
index 3e51a09266eed669486fc8b90ea3b05c8f84ae09..620d9a6eaa142c4d19c552bf1fb594256d8abf28 100644 (file)
@@ -2,7 +2,7 @@
 Developing Roundup
 ==================
 
-:Version: $Revision: 1.3 $
+:Version: $Revision: 1.4 $
 
 Note: the intended audience of this document is the developers of the core
 Roundup code. If you just wish to alter some behaviour of your Roundup
@@ -49,7 +49,7 @@ relaxed sometimes). In short:
 Other project rules:
 
 - New functionality must be documented, even briefly (so at least we know
-  where there's missing documentation) and changes to instance configuration
+  where there's missing documentation) and changes to tracker configuration
   must be logged in the upgrading document.
 - subscribe to roundup-checkins to receive checkin notifications from the
   other developers with CVS access
index 15a6c249cbb2392800f1398c22b1d3eef26916a8..d58bbea74b4c1fece22cdca5ccb527867c083017 100644 (file)
@@ -2,7 +2,7 @@
 Getting Started
 ===============
 
-:Version: $Revision: 1.5 $
+:Version: $Revision: 1.6 $
 
 .. contents::
 
@@ -14,10 +14,10 @@ haven't, you may still proceed - just run the commands as
 "``PYTHONPATH=. python roundup/scripts/roundup_server.py``" for
 ``roundup-server``.
 
-The Instance
-------------
+The Tracker
+-----------
 
-We'll be referring to the term instance a lot from now on. An instance is a
+We'll be referring to the term tracker a lot from now on. A tracker is a
 directory in your filesystem that is where all the information about a live
 issue
 tracker database is stored. The data that is entered as issues, the users who
@@ -29,32 +29,32 @@ Hyperdatabase
 
 Database schema
    This describes the content of the hyperdatabase - what fields are stored
-   for issues, what user information, etc. Being stored in the instance,
+   for issues, what user information, etc. Being stored in the tracker,
    this allows it to be customised for a particular application. It also
    means that changes in the Roundup core code do not affect a running
-   instance.
+   tracker.
 
 Web Interface
-   The web interface templates are defined in the instance too - and the
+   The web interface templates are defined in the tracker too - and the
    actual CGI interface class is defined (mostly using base classes in the
    Roundup core code) so it, like the database, may be customised for each
-   instance in use.
+   tracker in use.
 
-Instances are created using the ``roundup-admin`` tool.
+Trackers are created using the ``roundup-admin`` tool.
 
 Command Line Tool
 -----------------
 
-To set up a new instance, run "``roundup-admin install``". You will be
+To set up a new tracker, run "``roundup-admin install``". You will be
 asked a few questions:
 
-1. Instance home directory
+1. Tracker home directory
 2. Schema to use
 3. Database back-end to use
 
-Once you've chosen these, roundup will install the instance for you. It will
+Once you've chosen these, roundup will install the tracker for you. It will
 then indicate that you should configure some more information in the
-file "``instance_config.py``" in the instance home.  It
+file "``config.py``" in the tracker home.  It
 should be edited before roundup is initialised, and may have the following
 variable declarations:
 
@@ -76,15 +76,15 @@ ADMIN_EMAIL: ``roundup-admin@MAIL_DOMAIN``
 You may also alter the default schema - see the `customisation`_ documentation
 for more info on both configuration variables and schema modifications.
 
-Once you're happy (and note that you can change any of this after the instance
+Once you're happy (and note that you can change any of this after the tracker
 is initialised too!) you must run "``roundup-admin initialise``".
 
 You should also think about whether there is going to be controlled access
 to the
-instance on the machine the instance is running on. That is, who can
+tracker on the machine the tracker is running on. That is, who can
 actually make
 changes to the database using the roundup-admin tool. See the section on
-Users_and_Access_Control for information on how to secure your instance from the
+Users_and_Access_Control for information on how to secure your tracker from the
 start.
 
 E-Mail Interface
@@ -94,14 +94,14 @@ Setup 1: As a mail alias pipe process
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Set up a mail alias called "issue_tracker" as (include the quote marks):
-"``|/usr/bin/python /usr/local/bin/roundup-mailgw <instance_home>``"
+"``|/usr/bin/python /usr/local/bin/roundup-mailgw <tracker_home>``"
 
 In some installations (e.g. RedHat 6.2 I think) you'll need to set up smrsh so
 sendmail will accept the pipe command. In that case, symlink
 ``/etc/smrsh/roundup-mailgw`` to "``/usr/local/bin/roundup-mailgw``" and change
 the command to::
 
-    |roundup-mailgw <instance_home>
+    |roundup-mailgw <tracker_home>
  
 To test the mail gateway on unix systems, try::
 
@@ -113,7 +113,7 @@ Setup 2: As a regular cron job using a mailbox source
 
 Set ``roundup-mailgw`` up to run every 10 minutes or so. For example::
 
-  10 * * * * /usr/local/bin/roundup-mailgw <instance_home> mailbox <mail_spool_file>
+  10 * * * * /usr/local/bin/roundup-mailgw <tracker_home> mailbox <mail_spool_file>
 
 Where the ``mail_spool_file`` argument is the location of the roundup submission
 user's mail spool. On most systems, the spool for a user "issue_tracker"
@@ -124,7 +124,7 @@ Setup 3: As a regular cron job using a POP source
 
 To retrieve from a POP mailbox, use a similar cron entry to the mailbox one::
 
-  10 * * * * /usr/local/bin/roundup-mailgw <instance_home> pop <pop_spec>
+  10 * * * * /usr/local/bin/roundup-mailgw <tracker_home> pop <pop_spec>
     
 where pop_spec is "``username:password@server``" that specifies the roundup
 submission user's POP account name, password and server.
@@ -137,12 +137,12 @@ This software will work through apache or stand-alone.
 
 Stand-alone:
   1. Edit roundup-server at the top - ``ROUNDUP_INSTANCE_HOMES`` needs to know
-     about your instance. You may also specify the values for
+     about your tracker. You may also specify the values for
      ``ROUNDUP_INSTANCE_HOMES`` on the command-line using "name=home" pairs.
     
-  2. "``roundup-server [-p port] (name=instance_home)*``" (hostname may be "")
+  2. "``roundup-server [-p port] (name=tracker_home)*``" (hostname may be "")
   
-  3. Load up the page "``/<instance name>/index``" where instance name is the name
+  3. Load up the page "``/<tracker name>/index``" where tracker name is the name
      you nominated in ``ROUNDUP_INSTANCE_HOMES``.
 
 Apache:
@@ -150,21 +150,21 @@ Apache:
      distribution.
      
   2. Make sure roundup.cgi is executable. Edit it at the top -
-     ``ROUNDUP_INSTANCE_HOMES`` needs to know about your instance.
+     ``ROUNDUP_INSTANCE_HOMES`` needs to know about your tracker.
      
   3. Edit your "``/etc/httpd/conf/httpd.conf``" and make sure that the
      "``/home/httpd/html/roundup/roundup.cgi``" script will be treated as a CGI script.
      
   4. Re-start your apache to re-load the config if necessary.
   
-  5. Load up the page "``/roundup/roundup.cgi/index/``" where instance name is the
+  5. Load up the page "``/roundup/roundup.cgi/index/``" where tracker name is the
      name you nominated in ``ROUNDUP_INSTANCE_HOMES``.
      
   6. To use the CGI script unchanged, which allows much easier updates, add
      these directives to your "httpd.conf"::
      
          SetEnv ROUNDUP_LOG "/var/log/roundup.log"
-         SetEnv ROUNDUP_INSTANCE_HOMES "Default=/usr/local/share/roundup/instances/Default"
+         SetEnv ROUNDUP_INSTANCE_HOMES "Default=/usr/local/share/roundup/trackers/Default"
          SetEnv ROUNDUP_DEBUG "0"
 
   7. On Windows, write a batch file "roundup.bat" similar to the one below and
@@ -172,7 +172,7 @@ Apache:
       
          @echo off
          set ROUNDUP_LOG=c:\Python21\share\roundup\cgi.log
-         set ROUNDUP_INSTANCE_HOMES=Default=c:\Python21\share\roundup\instances\Default;
+         set ROUNDUP_INSTANCE_HOMES=Default=c:\Python21\share\roundup\trackers\Default;
          set ROUNDUP_DEBUG=0
          c:\Python21\python.exe c:\Python21\share\roundup\cgi-bin\roundup.cgi
 
@@ -183,7 +183,7 @@ Users
 Users and permissions
 ~~~~~~~~~~~~~~~~~~~~~
 
-By default, roundup automatically creates one user when the instance database is
+By default, roundup automatically creates one user when the tracker database is
 initialised (using roundup-admin init). The user is "admin" and the password is
 the one you supply at that time.
 
@@ -200,17 +200,17 @@ Command-line interface
 
     1. Add a new user and group to your system (e.g. "issue_tracker")
     
-    2. When creating a new instance home, use the following commands
-       (substituting instance_home for the directory you want to use)::
+    2. When creating a new tracker home, use the following commands
+       (substituting tracker_home for the directory you want to use)::
        
-       mkdir instance_home
-       chown issue_tracker:issue_tracker instance_home
-       chmod g+rwxs instance_home
-       roundup-admin -i instance_home init
+           mkdir tracker_home
+           chown issue_tracker:issue_tracker tracker_home
+           chmod g+rwxs tracker_home
+           roundup-admin -i tracker_home init
        
     3. Now, edit the /etc/group line for the issue_tracker group so it
        includes the unix logins of all the users who are going to
-       administer your roundup instance. If you're running the web or mail
+       administer your roundup tracker. If you're running the web or mail
        gateways, then be sure to include those users in the group too (on
        some Linux systems, these users are "www" or "apache" and "mail".)
        
@@ -232,12 +232,12 @@ Adding users
 
 To add users, use one of the following interfaces:
   
-1. On the web, access the URL .../<instance name>/newuser to bring up a form
+1. On the web, access the URL .../<tracker name>/newuser to bring up a form
    which may be used to add a new user.
     
 2. On the command-line, use::
 
-    roundup-admin -i <instance home> create user username=bozo password=bozo
+    roundup-admin -i <tracker home> create user username=bozo password=bozo
     address=richard@clown.org
     
    Supply the admin username and password. roundup-admin will print the id
@@ -253,12 +253,12 @@ Issues
 
 To add issues, use one of the following interfaces:
 
-1. On the web, access the URL .../<instance name>/newissue to bring up a
+1. On the web, access the URL .../<tracker name>/newissue to bring up a
    form which may be used to add a new issue.
   
 2. On the command-line, use::
 
-     roundup-admin -i <instance home> create issue title="test issue"
+     roundup-admin -i <tracker home> create issue title="test issue"
 
    Supply the admin username and password. roundup-admin will print the id
    of the new issue.
index 001470f9ae156969bf35222821a7486c519fa044..b0ed7aea6f49e292e958ab78af4405882fef0e5c 100644 (file)
@@ -2,26 +2,26 @@
 Roundup Glossary
 ================
 
-:Version: $Revision: 1.2 $
+:Version: $Revision: 1.3 $
 
 .. contents::
 
 
 class
-   a definition of the properties and behaviour of a set of nodes
+   a definition of the properties and behaviour of a set of items
 db
-   a collection of nodes
+   a collection of items
 designator
-   a combined class + nodeid reference to any node in the hyperdb
-nodeid
-   a numeric reference to a particular node of one class
-node
+   a combined class + itemid reference to any item in the hyperdb
+itemid
+   a numeric reference to a particular item of one class
+item
    a collection of data that forms one entry in the hyperdb.
 property
-   one element of data that makes up a node
+   one element of data that makes up an item
 schema
-   the definition of all the classes that make up an instance
-instance
+   the definition of all the classes that make up an tracker
+tracker
    I've defined this well somewhere else...
 
 
index 168222429ac8768efba95d4ff2d4647465a935e4..520f454a62d6846894cf7c5fe643a6ec2deb4d66 100644 (file)
@@ -2,7 +2,7 @@
 Implementation notes
 ====================
 
-:Version: $Revision: 1.4 $
+:Version: $Revision: 1.5 $
 
 [see also the roundup package docstring]
 
@@ -30,7 +30,7 @@ In short:
     pass on to the templating mechanism, but the file class _always_ does
     downloading. It'll probably stay this way too...
 
- template - call="link(property)" may be used to link "the current node"
+ template - call="link(property)" may be used to link "the current item"
     (from an index) - the link text is the property specified.
 
  template - added functions that I found very useful: List, History and
index 00a29c0431e85233af6a948f6dc4e3821b6d8dd4..b9f05ad29e895ee5673f4b1f53f108c7d3877188 100644 (file)
@@ -2,7 +2,7 @@
 Installing Roundup
 ==================
 
-:Version: $Revision: 1.21 $
+:Version: $Revision: 1.22 $
 
 .. contents::
 
@@ -20,10 +20,10 @@ Roundup scripts
  These include the email gateway, the roundup
  HTTP server, the roundup administration command-line interface, etc.
 
-Roundup instances
Instances consist of core support files, issues
- (be they bug reports or otherwise), instance configuration file(s),
- etc.  Roundup instances also adhere to a specific "Template" which
+Roundup trackers
Trackers consist of core support files, issues
+ (be they bug reports or otherwise), tracker configuration file(s),
+ etc.  Roundup trackers also adhere to a specific "Template" which
  defines the fields usable/assignable on a per-issue basis.  A
  description of the provided templates follows.
 
@@ -48,7 +48,7 @@ The priorty class has different default entries too: "fatal-bug", "bug",
 "usability" and "feature".
 
 Users of this template will want to change the contents of the product
-class as soon as the instance is created.
+class as soon as the tracker is created.
 
 
 Prerequisites
@@ -99,7 +99,7 @@ be a trusted one.
 
 
 Basic Installation Steps
-~~~~~~~~~~~~~~~~~~~~~~~~
+------------------------
 
 1. To install the Roundup support code into your Python tree and
    Roundup scripts into /usr/local/bin::
@@ -113,14 +113,14 @@ Basic Installation Steps
 
        python setup.py install --install-scripts=/opt/roundup/bin
 
-2. To create a Roundup instance (necessary to do before you can
+2. To create a Roundup tracker (necessary to do before you can
    use the software in any real fashion):
 
-   a. (Optional) If you intend to keep your roundup instances
+   a. (Optional) If you intend to keep your roundup trackers
       under one top level directory which does not exist yet,
       you should create that directory now.  Example:
 
-         mkdir /opt/roundup/instances
+         mkdir /opt/roundup/trackers
 
    b. Either add the Roundup script location to your ``PATH``
       environment variable or specify the full path to
@@ -131,27 +131,27 @@ Basic Installation Steps
       You will be asked a series of questions.  A description of
       the Roundup-provided templates can be found under the Overview_::
 
-          Enter instance home: /opt/roundup/instances/support
+          Enter tracker home: /opt/roundup/trackers/support
           Templates: classic, extended
           Select template [classic]: classic
           Back ends: anydbm, bsddb
           Select backend [anydbm]: anydbm
 
-      You will now be directed to edit the instance configuration and
+      You will now be directed to edit the tracker configuration and
       initial schema. See `Customising Roundup`_ for details on configuration
       and schema changes. Note that you may change any of the configuration
-      after you've initialised the instance - it's just better to have valid
+      after you've initialised the tracker - it's just better to have valid
       values for this stuff now.
 
    d.  ``roundup-admin initialise``
 
-      This step initialises the instance database. You will need to supply
+      This step initialises the tracker database. You will need to supply
       an admin password at this step. You will be prompted::
 
           Admin Password:
                  Confirm:
 
-      Once this is done, the instance has been created.
+      Once this is done, the tracker has been created.
 
 3. XXX Set up the CGI interface
 
@@ -159,15 +159,15 @@ Basic Installation Steps
 
 
 Shared Environment Steps
-~~~~~~~~~~~~~~~~~~~~~~~~
+------------------------
 
-Each instance ideally should have its own UNIX group, so create
+Each tracker ideally should have its own UNIX group, so create
 a UNIX group (edit ``/etc/group`` or your appropriate NIS map if
 you're using NIS).  To continue with my examples so far, I would
 create the UNIX group 'support', although the name of the UNIX
-group does not have to be the same as the instance name.  To this
+group does not have to be the same as the tracker name.  To this
 'support' group I then add all of the UNIX usernames who will be
-working with this Roundup instance.  In addition to 'real' users,
+working with this Roundup tracker.  In addition to 'real' users,
 the Roundup email gateway will need to have permissions to this
 area as well, so add the user your mail service runs as to the
 group.  The UNIX group might then look like::
@@ -180,7 +180,7 @@ My group now looks like this::
 
      support:*:1002:jblaine,samh,geezer,mail,apache
 
-The instance "db" directory should be chmod'ed g+sw so that the group can
+The tracker "db" directory should be chmod'ed g+sw so that the group can
 write to the database, and any new files created in the database will be owned
 by the group.
 
@@ -194,15 +194,15 @@ responsibility of running roundup. This user:
    may actually login and play with the roundup setup.
 
 Internet Setup
-~~~~~~~~~~~~~~
+--------------
 
 1. There are two supported ways to get emailed issues into the
-   Roundup instance.  You should pick ONE of the following, both
+   Roundup tracker.  You should pick ONE of the following, both
    of which will continue my example setup from above:
 
    a. Set up a mail alias called "support" as::
 
-       "|/opt/roundup/bin/roundup-mailgw /opt/roundup/instances/support"
+       "|/opt/roundup/bin/roundup-mailgw /opt/roundup/trackers/support"
 
       If you use Sendmail's ``smrsh`` mechanism, please read the notes
       under 'Platform-Specific Notes'
@@ -212,10 +212,10 @@ Internet Setup
       line)::
 
        10 * * * * /opt/roundup/bin/roundup-mailgw
-                /opt/roundup/instances/support /var/mail/support
+                /opt/roundup/trackers/support /var/mail/support
 
    If you don't want to use the email component of Roundup, then remove the
-   "``nosyreator.py``" module from your instance "``detectors``" directory.
+   "``nosyreator.py``" module from your tracker "``detectors``" directory.
 
 2. Test the email gateway.  Under most flavors of UNIX, this
    can be done by::
@@ -230,7 +230,7 @@ Upgrading
 =========
 
 Read the separate `upgrading document`_, which describes the steps needed to
-upgrade existing tracker instances for each version of Roundup that is
+upgrade existing tracker trackers for each version of Roundup that is
 released.
 
 
@@ -243,11 +243,11 @@ ZRoundup installs as a regular Zope product. Copy the ZRoundup directory to
 your Products directory either in an INSTANCE_HOME/Products or the Zope
 code tree lib/python/Products.
 
-You will need to create the instance using the roundup-admin tool (step 2 in
+You will need to create the tracker using the roundup-admin tool (step 2 in
 installation_).
 
 When you next (re)start up Zope, you will be able to add a ZRoundup object
-that interfaces to your new instance.
+that interfaces to your new tracker.
 
 
 Further Reading
@@ -274,7 +274,7 @@ This is usually done via the following 2 steps:
    which points to the full path of your actual ``roundup-mailgw``
    script.
 
-2. change your alias to ``"|roundup-mailgw <instance_home>"``
+2. change your alias to ``"|roundup-mailgw <tracker_home>"``
 
 
 Linux
index 93c64f9e852adddee22018f301bd9dc8b71fc6a7..10dedbab868494510de25ac9f981dd1d27ac26b4 100644 (file)
@@ -2,7 +2,7 @@
 Security Mechanisms
 ===================
 
-:Version: $Revision: 1.15 $
+:Version: $Revision: 1.16 $
 
 Current situation
 =================
@@ -51,8 +51,8 @@ Possible approaches
 
 Security controls in Roundup could be approached in three ways:
 
-1) at the hyperdb level, with read/write/modify permissions on classes, nodes
-   and node properties for all or specific transitions.
+1) at the hyperdb level, with read/write/modify permissions on classes, items
+   and item properties for all or specific transitions.
 2) at the user interface level, with access permissions on CGI interface
    methods, mailgw methods, roundup-admin methods, and so on.
 3) at a logical permission level, checked as needed.
@@ -66,7 +66,7 @@ Hyperdb-level control
 ---------------------
 
 Control is implemented at the Class.get, Class.set and Class.create level. All
-other methods must access nodes through these methods. Since all accesses go
+other methods must access items through these methods. Since all accesses go
 through the database, we can implement deny by default.
 
 Pros:
@@ -79,7 +79,7 @@ Cons:
    - harder to determine the relationship between user interaction and hyperdb
      permission.
    - a lot of work to define
-   - must special-case to handle by-node permissions (editing user details,
+   - must special-case to handle by-item permissions (editing user details,
      having private messages)
 
 
index e303a1a245e85e4805f8fa24a7c15fe57849aa8e..0a750d9ae9539d958dbd98ce1199dac8b8d17ac7 100644 (file)
@@ -2,7 +2,7 @@
 HTML Templating Mechanisms
 ==========================
 
-:Version: $Revision: 1.13 $
+:Version: $Revision: 1.14 $
 
 Current Situation and Issues
 ============================
@@ -53,7 +53,7 @@ Templates
 We should also take this opportunity to open up the flexibility of the
 templates through:
 
-1. allowing the instance to define a "page" template, which holds the overall
+1. allowing the tracker to define a "page" template, which holds the overall
    page structure, including header and footer
 
 
@@ -139,17 +139,17 @@ I'm envisaging an infrastructure layer where each template has the following
 defined:
 
 *klass*
-  The current class of node being displayed as an HTMLClass instance. Name is
+  The current class of item being displayed as an HTMLClass instance. Name is
   mangled so it can be used in Python expressions.
 
 *item*
-  The current node from the database, if we're viewing a specific node, as an
+  The current item from the database, if we're viewing a specific item, as an
   HTMLItem instance. If it doesn't exist, then we're on a new item page.
 
 (*classname*)
   this is one of two things:
 
-  1. the *item* is also available under its classname, so a *user* node
+  1. the *item* is also available under its classname, so a *user* item
      would also be available under the name *user*. This is also an HTMLItem
      instance.
   2. if there's no *item* then the current class is available through this
@@ -170,10 +170,10 @@ defined:
    - the current index information (``filterspec``, ``filter`` args,
      ``properties``, etc) parsed out of the form. 
    - methods for easy filterspec link generation
-   - *user*, the current user node as an HTMLItem instance
+   - *user*, the current user item as an HTMLItem instance
 
-*instance*
-  The current instance
+*tracker*
+  The current tracker
 
 *db*
   The current open database
@@ -301,7 +301,7 @@ page
  of special template types:
 
  [classname].index
-  This template is used when the URL specifies only the class, and not a node
+  This template is used when the URL specifies only the class, and not an item
   designator.  It displays a list of [classname] items from the database, and
   a "filter refinement" form.
   Would perform a TAL ``repeat`` command using the list supplied by
index 6620e6a111779f433ca4e50b2eb6b8e2a2c89c66..ce6ae6dfaa91843df66e4ec1df283eeefd269eb8 100644 (file)
@@ -2,7 +2,7 @@
 Upgrading to newer versions of Roundup
 ======================================
 
-Please read each section carefully and edit your instance home files
+Please read each section carefully and edit your tracker home files
 accordingly.
 
 .. contents::
@@ -24,18 +24,38 @@ This has been a fairly major revision of Roundup:
    define your own Permissions that may be checked in CGI transactions.
 4. Journalling has been made less storage-hungry, so has been turned on
    by default *except* for author, recipient and nosy link/unlink events. You
-   are advised to turn it off in your instances too.
-5. Because of the above changes, the instance configuration has seen some
+   are advised to turn it off in your trackers too.
+5. We've changed the terminology from "instance" to "tracker", to ease the
+   learning curve/impact for new users.
+6. Because of the above changes, the tracker configuration has seen some
    major changes. See below for the details.
 
 Please, *back up your database* before you start the migration process. This
 is as simple as copying the "db" directory and all its contents from your
-instance to somewhere safe.
+tracker to somewhere safe.
 
 
 0.5.0 Configuration
 -------------------
 
+First up, rename your ``instance_config.py`` file to just ``config.py``.
+
+Then edit your tracker's ``__init__.py`` module. It'll currently look
+like this::
+
+ from instance_config import *
+ try:
+     from dbinit import *
+ except ImportError:
+     pass # in installdir (probably :)
+ from interfaces import *
+
+and it needs to be::
+
+ import config
+ from dbinit import open, init
+ from interfaces import Client, MailGW
+
 Due to the new templating having a top-level ``page`` that defines links for
 searching, indexes, adding items etc, the following variables are no longer
 used:
@@ -50,7 +70,7 @@ used:
 - ISSUE_FILTER
 
 The new security implementation will require additions to the dbinit module,
-but also removes the need for the following instance config variables:
+but also removes the need for the following tracker config variables:
 
 - ANONYMOUS_ACCESS
 - ANONYMOUS_REGISTER
@@ -75,7 +95,7 @@ documentation`_ for more information.
 0.5.0 Database backend changes
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Your select_db module in your instance has changed a fair bit. Where it used
+Your select_db module in your tracker has changed a fair bit. Where it used
 to contain::
 
  # WARNING: DO NOT EDIT THIS FILE!!!
@@ -89,7 +109,7 @@ it must now contain::
 Yes, I realise the irony of the "DO NOT EDIT THIS FILE" statement :)
 Note the addition of the Class, FileClass, IssueClass imports. These are very
 important, as they're going to make the next change work too. You now need to
-modify the top of the dbinit module in your instance from::
+modify the top of the dbinit module in your tracker from::
 
  import instance_config
  from roundup import roundupdb
@@ -109,16 +129,17 @@ modify the top of the dbinit module in your instance from::
      '''
      pass
 
+to::
 
-
-to just::
-
- import instance_config
+ import config
  from select_db import Database, Class, FileClass, IssueClass
 
 Yes, remove the Database and IssueClass definitions and those other imports.
 They're not needed any more!
 
+Look for places in dbinit.py where ``instance_config`` is used too, and
+rename them ``config``.
+
 
 0.5.0 Journalling changes
 ~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -213,8 +234,8 @@ process:
 4. Roundup checks that users have appropriate Permissions at appropriate times
    (like editing issues).
 
-Your instance dbinit module's *open* function now has to define any
-Permissions that are specific to your instance, and also the assignment
+Your tracker dbinit module's *open* function now has to define any
+Permissions that are specific to your tracker, and also the assignment
 of Permissions to Roles. At the moment, your open function
 ends with::
 
@@ -320,7 +341,7 @@ The admin user should get "Admin", the anonymous user "Anonymous"
 and all other users "User". The ``fixroles.py`` script in the tools directory
 will do this. Run it like so (where python is your python 2+ binary)::
 
-  python tools/fixroles.py -i <instance home>
+  python tools/fixroles.py -i <tracker home>
 
 
 
@@ -328,7 +349,7 @@ will do this. Run it like so (where python is your python 2+ binary)::
 ---------------------------
 
 The CGI interface code was completely reorganised and largely rewritten. The
-end result is that this section of your instance interfaces module will need
+end result is that this section of your tracker interfaces module will need
 changing from::
 
  from roundup import mailgw
@@ -358,9 +379,9 @@ cgi-bin directory if you're using it.
 0.5.0 HTML templating
 ---------------------
 
-You'll want to make a backup of your current instance html directory. You
+You'll want to make a backup of your current tracker html directory. You
 should then copy the html directory from the Roundup source template that you
-used to create your instance, and modify it according to your local schema
+used to create your tracker, and modify it according to your local schema
 changes.
 
 If you need help with the new templating system, please ask questions on the
@@ -371,8 +392,8 @@ sourceforge, http://roundup.sf.net/)
 0.5.0 Detectors
 ---------------
 
-The nosy reactor has been updated to handle the instance not having an
-"assignedto" property on issues. You may want to copy it into your instance's
+The nosy reactor has been updated to handle the tracker not having an
+"assignedto" property on issues. You may want to copy it into your tracker's
 detectors directory. Chances are you've already fixed it though :)
 
 
@@ -428,7 +449,7 @@ There's also a bug or two fixed in the nosyreactor code.
 0.4.2 HTML templating changes
 -----------------------------
 The link() htmltemplate function now has a "showid" option for links and
-multilinks. When true, it only displays the linked node id as the anchor
+multilinks. When true, it only displays the linked item id as the anchor
 text. The link value is displayed as a tooltip using the title anchor
 attribute. To use in eg. the superseder field, have something like this::
 
index fed58e1aa7a0088193920a4de44ec883ff7b64bb..ed410575d2b200e2c46454e5e9e71bf49b92ace3 100644 (file)
@@ -2,7 +2,7 @@
 User Guide
 ==========
 
-:Version: $Revision: 1.5 $
+:Version: $Revision: 1.6 $
 
 .. contents::
 
@@ -28,7 +28,7 @@ Index views may be modified by the following arguments:
 | :columns  | selects the columns that should be displayed.                |
 |           | Default is all.                                              |
 +-----------+--------------------------------------------------------------+
-| propname  | selects the values the node properties given by propname     |
+| propname  | selects the values the item properties given by propname     |
 |           | must have (very basic search/filter).                        |
 +-----------+--------------------------------------------------------------+
 
@@ -71,13 +71,13 @@ looking at case 1 or 2 above. Note that any "re:" or "fwd:" prefixes are
 stripped off the subject line before we start looking for real information.
 
 If an item designator (class name and id number, for example ``issue123``)
-is found there, a new "msg" node is added to the "messages" property for
-that item, and any new "file" nodes are added to the "files" property for
+is found there, a new "msg" item is added to the "messages" property for
+that item, and any new "file" items are added to the "files" property for
 the item.
 
 If just an item class name is found there, we attempt to create a new item of
 that class with its "messages" property initialized to contain the new "msg"
-node and its "files" property initialized to contain any new "file" nodes.
+item and its "files" property initialized to contain any new "file" items.
 
 The third case above - where no ``[information]`` is provided, the tracker's
 ``MAIL_DEFAULT_CLASS`` configuration variable defines what class of item
@@ -126,8 +126,8 @@ To do this, incoming messages are examined for multiple parts:
 * In a multipart/mixed message or part, each subpart is extracted and
   examined. The text/plain subparts are assembled to form the textual body
   of the message, to be stored in the file associated with a "msg" class
-  node. Any parts of other types are each stored in separate files and
-  given "file" class nodes that are linked to the "msg" node.
+  item. Any parts of other types are each stored in separate files and
+  given "file" class items that are linked to the "msg" item.
 * In a multipart/alternative message or part, we look for a text/plain
   subpart and ignore the other parts.
 
@@ -138,7 +138,7 @@ sections, then these will be stripped out of the message if the
 Message summary
 :::::::::::::::
 
-The "summary" property on message nodes is taken from the first non-quoting
+The "summary" property on message items is taken from the first non-quoting
 section in the message body. The message body is divided into sections by blank
 lines. Sections where the second and all subsequent lines begin with a ">" or
 "|" character are considered "quoting sections". The first line of the first
@@ -152,8 +152,8 @@ All of the addresses in the ``To:`` and ``Cc:`` headers of the incoming
 message are
 looked up among the tracker users, and the corresponding users are placed
 in the
-"recipients" property on the new "msg" node. The address in the ``From:`` header
-similarly determines the "author" property of the new "msg" node. The default
+"recipients" property on the new "msg" item. The address in the ``From:`` header
+similarly determines the "author" property of the new "msg" item. The default
 handling for addresses that don't have corresponding users is to create new
 users with no passwords and a username equal to the address.
 
@@ -192,11 +192,11 @@ to determine if they get a nosy list copy of the message too.
 Command Line Tool
 -----------------
 
-Usage: ``roundup-admin [-i instance home] [-u login] [-c] <command> <arguments>``
+Usage: ``roundup-admin [-i tracker home] [-u login] [-c] <command> <arguments>``
 
 Options:
 
--i          instance home specify the issue tracker "home directory" to administer
+-i          tracker home specify the issue tracker "home directory" to administer
 -u          the ``user[:password]`` to use for commands
 -c          when outputting lists of data, comma-separate them
 
@@ -218,7 +218,7 @@ Options:
 +-------------+---------------------------------------------------------------+
 |display      |Usage: display designator                                      |
 |             |This lists the properties and their associated values for the  |
-|             |given node.                                                    |
+|             |given item.                                                    |
 +-------------+---------------------------------------------------------------+
 |export       |Usage: export class[,class] destination dir                    |
 |             |This action exports the current data from the database into    |
@@ -227,13 +227,13 @@ Options:
 |             |directory. The journals are not exported.                      |
 +-------------+---------------------------------------------------------------+
 |find         |Usage: find classname propname=value ...                       |
-|             |Find the nodes of the given class with a given link property   |
+|             |Find the items of the given class with a given link property   |
 |             |value. The                                                     |
-|             |value may be either the nodeid of the linked node, or its key  |
+|             |value may be either the itemid of the linked item, or its key  |
 |             |value.                                                         |
 +-------------+---------------------------------------------------------------+
 |get          |Usage: get property designator[,designator]*                   |
-|             |Retrieves the property value of the nodes specified by the     |
+|             |Retrieves the property value of the items specified by the     |
 |             |designators.                                                   |
 +-------------+---------------------------------------------------------------+
 |help         |Usage: help topic                                              |
@@ -243,13 +243,13 @@ Options:
 |             |all       -- all available help                                |
 +-------------+---------------------------------------------------------------+
 |history      |Usage: history designator                                      |
-|             |Lists the journal entries for the node identified by the       |
+|             |Lists the journal entries for the item identified by the       |
 |             |designator.                                                    |
 +-------------+---------------------------------------------------------------+
 |import       |Usage: import class file                                       |
 |             |The file must define the same properties as the class          |
 |             |(including having                                              |
-|             |a "header" line with those property names.) The new nodes are  |
+|             |a "header" line with those property names.) The new items are  |
 |             |added to                                                       |
 |             |the existing database - if you want to create a new database   |
 |             |using the                                                      |
@@ -258,7 +258,7 @@ Options:
 |             |the old data.)                                                 |
 +-------------+---------------------------------------------------------------+
 |initialise   |Usage: initialise [template [backend [admin password]]]        |
-|             |The command will prompt for the instance home directory (if not|
+|             |The command will prompt for the tracker home directory (if not |
 |             |supplied                                                       |
 |             |through INSTANCE HOME or the -i option. The template, backend  |
 |             |and admin                                                      |
@@ -269,14 +269,14 @@ Options:
 |             |See also initopts help.                                        |
 +-------------+---------------------------------------------------------------+
 |list         |Usage: list classname [property]                               |
-|             |Lists all instances of the given class. If the property is not |
+|             |Lists all trackers of the given class. If the property is not |
 |             |specified, the  "label" property is used. The label property is|
 |             |tried                                                          |
 |             |in order: the key, "name", "title" and then the first property,|
 |             |alphabetically.                                                |
 +-------------+---------------------------------------------------------------+
 |retire       |Usage: retire designator[,designator]*                         |
-|             |This action indicates that a particular node is not to be      |
+|             |This action indicates that a particular item is not to be      |
 |             |retrieved by                                                   |
 |             |the list or find commands, and its key value may be re-used.   |
 +-------------+---------------------------------------------------------------+
@@ -293,7 +293,7 @@ Options:
 |             |This lists the properties for a given class.                   |
 +-------------+---------------------------------------------------------------+
 |table        |Usage: table classname [property[,property]*]                  |
-|             |Lists all instances of the given class. If the properties are  |
+|             |Lists all trackers of the given class. If the properties are  |
 |             |not                                                            |
 |             |specified, all properties are displayed. By default, the column|
 |             |widths                                                         |
@@ -310,13 +310,14 @@ Options:
 +-------------+---------------------------------------------------------------+
 
 
-All commands (except help) require an instance specifier. This is just the path to
-the roundup instance you're working with. A roundup instance is where roundup
+All commands (except help) require a tracker specifier. This is just the path to
+the roundup tracker you're working with. A roundup tracker is where roundup
 keeps the database and configuration file that defines an issue tracker. It may be
 thought of as the issue tracker's "home directory". It may be specified in the
-environment variable ``ROUNDUP_INSTANCE`` or on the command line as "``-i instance``".
+environment variable ``ROUNDUP_INSTANCE`` or on the command line as "``-i
+tracker``".
 
-A designator is a classname and a nodeid concatenated, eg. bug1, user10, ...
+A designator is a classname and an itemid concatenated, eg. bug1, user10, ...
 Property values are represented as strings in command arguments and in the printed
 results:
 
@@ -336,15 +337,15 @@ results:
     "8:47:11"          yyyy-mm-dd.13:47:11
     "."                "right now"
     
-- Link values are printed as node designators. When given as an argument,
-  node designators and key strings are both accepted.
-- Multilink values are printed as lists of node designators joined by
-  commas. When given as an argument, node designators and key strings are
-  both accepted; an empty string, a single node, or a list of nodes joined
+- Link values are printed as item designators. When given as an argument,
+  item designators and key strings are both accepted.
+- Multilink values are printed as lists of item designators joined by
+  commas. When given as an argument, item designators and key strings are
+  both accepted; an empty string, a single item, or a list of items joined
   by commas is accepted.
   
-When multiple nodes are specified to the roundup get or roundup set commands, the
-specified properties are retrieved or set on all the listed nodes.  When multiple
+When multiple items are specified to the roundup get or roundup set commands, the
+specified properties are retrieved or set on all the listed items.  When multiple
 results are returned by the roundup get or roundup find commands, they are printed
 one per line (default) or joined by commas (with the "``-c``" option).