@@ -37,6 +37,14 @@ Trackers in a Nutshell
3737
3838Trackers have the following structure:
3939
40+ .. index::
41+ single: tracker; structure db directory
42+ single: tracker; structure detectors directory
43+ single: tracker; structure extensions directory
44+ single: tracker; structure html directory
45+ single: tracker; structure html directory
46+ single: tracker; structure lib directory
47+
4048=================== ========================================================
4149Tracker File Description
4250=================== ========================================================
@@ -56,6 +64,9 @@ lib/ optional common imports for detectors and extensions
5664=================== ========================================================
5765
5866
67+ .. index:: config.ini
68+ .. index:: configuration; see config.ini
69+
5970Tracker Configuration
6071=====================
6172
@@ -100,7 +111,7 @@ Example configuration settings are below. This is a partial
100111list. Documentation on all the settings is included in the
101112``config.ini`` file.
102113
103- .. index:: configuration ; sections main
114+ .. index:: config.ini ; sections main
104115
105116Section **main**
106117 database -- ``db``
@@ -186,6 +197,8 @@ Section **main**
186197 get the error 'Error: field larger than field limit' during
187198 import.
188199
200+ .. index:: config.ini; sections tracker
201+
189202Section **tracker**
190203 name -- ``Roundup issue tracker``
191204 A descriptive name for your roundup instance.
@@ -205,7 +218,7 @@ Section **tracker**
205218 language is determined by the environment variable LANGUAGE, LC_ALL,
206219 LC_MESSAGES, or LANG, in that order of preference.
207220
208- .. index:: configuration ; sections web
221+ .. index:: config.ini ; sections web
209222
210223Section **web**
211224 allow_html_file -- ``no``
@@ -233,6 +246,9 @@ Section **web**
233246 in the user's browser rather than emailing them to the
234247 tracker admin."),
235248
249+ .. index:: config.ini; sections rdbms
250+ single: config.ini; database settings
251+
236252Section **rdbms**
237253 Settings in this section are used to set the backend and configure
238254 addition settings needed by RDBMs like SQLite, Postgresql and
@@ -286,6 +302,9 @@ Section **rdbms**
286302 Size of the node cache (in elements) used to keep most recently used
287303 data in memory.
288304
305+ .. index:: config.ini; sections logging
306+ see: logging; config.ini, sections logging
307+
289308Section **logging**
290309 config -- default *blank*
291310 Path to configuration file for standard Python logging module. If this
@@ -304,6 +323,8 @@ Section **logging**
304323 option is set, this option has no effect.
305324 Allowed values: ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``
306325
326+ .. index:: config.ini; sections mail
327+
307328Section **mail**
308329 Outgoing email options. Used for nosy messages, password reset and
309330 registration approval requests.
@@ -369,6 +390,10 @@ Section **mail**
369390 only the name of the actor is added which protects the mail address
370391 of the actor from being exposed at mail archives, etc.
371392
393+ .. index:: config.ini; sections mailgw
394+ single: mailgw; config
395+ see: mail gateway; mailgw
396+
372397Section **mailgw**
373398 Roundup Mail Gateway options
374399
@@ -449,6 +474,8 @@ Section **mailgw**
449474 parts of the multipart/alternative are ignored. The default
450475 is to keep all parts and attach them to the issue.
451476
477+ .. index:: config.ini; sections php
478+
452479Section **pgp**
453480 OpenPGP mail processing options
454481
@@ -463,6 +490,9 @@ Section **pgp**
463490 Location of PGP directory. Defaults to $HOME/.gnupg if not
464491 specified.
465492
493+
494+ .. index:: config.ini; sections nosy
495+
466496Section **nosy**
467497 Nosy messages sending
468498
@@ -515,6 +545,9 @@ Configuration variables may be referred to in lower or upper case. In code,
515545variables not in the "main" section are referred to using their section and
516546name, so "domain" in the section "mail" becomes MAIL_DOMAIN.
517547
548+ .. index:: pair: configuration; extensions
549+ pair: configuration; detectors
550+
518551Extending the configuration file
519552--------------------------------
520553
@@ -571,6 +604,7 @@ tracker. It’s called exactly once - by the ``roundup-admin initialise``
571604command. See the start of the section on database content for more
572605info about how this works.
573606
607+ .. index:: schema; classic - description of
574608
575609The "classic" schema
576610--------------------
@@ -606,6 +640,7 @@ specifying (default) labelling and ordering of classes.)::
606640 priority=Link("priority"))
607641 issue.setkey('title')
608642
643+ .. index:: schema; allowed changes
609644
610645What you can't do to the schema
611646-------------------------------
@@ -691,6 +726,8 @@ called items. They have a special immutable property called ``'id'``. We
691726sometimes refer to this as the *itemid*.
692727
693728
729+ .. index:: schema; property types
730+
694731Properties
695732~~~~~~~~~~
696733
@@ -726,6 +763,10 @@ A Class is comprised of one or more properties of the following types:
726763Properties can have additional attributes to change the default
727764behaviour:
728765
766+ .. index:: triple: schema; property attributes; required
767+ triple: schema; property attributes; default_value
768+ triple: schema; property attributes; quiet
769+
729770* All properties support the following attributes:
730771
731772 - ``required``: see `design documentation`_. Adds the property to
@@ -747,26 +788,39 @@ behaviour:
747788 number of times an issue was reopened or reassigned etc.) should
748789 not be displayed to the user as they can be confusing.
749790
791+ .. index:: triple: schema; property attributes; indexme
792+
750793* String properties can have an ``indexme`` attribute that defines if the
751794 property should be part of the full text index. The default is 'no' but this
752795 can be set to 'yes' to allow a property's contents to be in the full
753796 text index.
797+
798+ .. index:: triple: schema; property attributes; use_double
799+
754800* Number properties can have a ``use_double`` attribute that, when set
755801 to ``True``, will use double precision floating point in the database.
756802* Link and Multilink properties can have several attributes:
757-
803+
804+ .. index:: triple: schema; property attributes; do_journal
805+
758806 - ``do_journal``: By default, every change of a link property is
759807 recorded in the item being linked to (or being unlinked). A typical
760808 use-case for setting ``do_journal='no'`` would be to turn off
761809 journalling of nosy list, message author and message recipient link
762810 and unlink events to prevent the journal from clogged with these
763811 events.
812+
813+ .. index:: triple: schema; property attributes; try_id_parsing
814+
764815 - ``try_id_parsing`` is turned on by default. If entering a number
765816 into a Link or Multilink field, roundup interprets this number as an
766817 ID of the item to link to. Sometimes items can have numeric names
767818 (like, e.g., product codes). For these roundup needs to match the
768819 numeric name and should never match an ID. In this case you can set
769820 ``try_id_parsing='no'``.
821+
822+ .. index:: triple: schema; property attributes; rev_multilink
823+
770824 - The ``rev_multilink`` option takes a property name to be inserted
771825 into the linked-to class. This property is a Multilink property that
772826 links back to the current class. The new Multilink is read-only (it
@@ -820,6 +874,8 @@ behaviour:
820874 This makes it easy to list all issues that the user is responsible
821875 for (aka assigned_to).
822876
877+ .. index:: triple: schema; property attributes; msg_header_property
878+
823879 - The ``msg_header_property`` is used by the mail gateway when sending
824880 out messages. When a link or multilink property of an issue changes,
825881 roundup creates email headers of the form::
@@ -883,6 +939,11 @@ behaviour:
883939 If this property is set to the empty string "", it will prevent
884940 the header from being generated on outgoing mail.
885941
942+ .. index:: triple: schema; class property; creator
943+ triple: schema; class property; creation
944+ triple: schema; class property; actor
945+ triple: schema; class property; activity
946+
886947All Classes automatically have a number of properties by default:
887948
888949*creator*
@@ -895,6 +956,9 @@ All Classes automatically have a number of properties by default:
895956 Date the item was last modified.
896957
897958
959+ .. index:: triple: schema; class property; content
960+ triple: schema; class property; type
961+
898962FileClass
899963~~~~~~~~~
900964
@@ -906,6 +970,10 @@ stored in the files sub-directory of the ``'db'`` directory in your
906970tracker. FileClasses also have a "type" attribute to store the MIME
907971type of the file.
908972
973+ .. index:: triple: schema; class property; messages
974+ triple: schema; class property; files
975+ triple: schema; class property; nosy
976+ triple: schema; class property; superseder
909977
910978IssueClass
911979~~~~~~~~~~
@@ -929,6 +997,7 @@ property on the item was last edited (equivalently, these are the dates
929997on the first and last records in the item's journal). The "creator"
930998property holds a link to the user that created the issue.
931999
1000+ .. index: triple: schema; class method; setkey
9321001
9331002setkey(property)
9341003~~~~~~~~~~~~~~~~
@@ -948,6 +1017,8 @@ or::
9481017
9491018Note, the same thing can be done in the web and e-mail interfaces.
9501019
1020+ .. index: triple: schema; class method; setlabelprop
1021+
9511022setlabelprop(property)
9521023~~~~~~~~~~~~~~~~~~~~~~
9531024
@@ -969,6 +1040,8 @@ the id property for a class. If the property can not be viewed by a
9691040user, looping over items in the class (e.g. messages attached to an
9701041issue) will not work.
9711042
1043+ .. index: triple: schema; class method; setorderprop
1044+
9721045setorderprop(property)
9731046~~~~~~~~~~~~~~~~~~~~~~
9741047
@@ -985,12 +1058,15 @@ for the order property:
9851058So in most cases you can get away without specifying setorderprop
9861059explicitly.
9871060
1061+ .. index: triple: schema; class method; create
1062+
9881063create(information)
9891064~~~~~~~~~~~~~~~~~~~
9901065
9911066Create an item in the database. This is generally used to create items
9921067in the "definitional" classes like "priority" and "status".
9931068
1069+ .. index: schema; item ordering
9941070
9951071A note about ordering
9961072~~~~~~~~~~~~~~~~~~~~~
@@ -1075,6 +1151,11 @@ __ design.html
10751151Detector API
10761152------------
10771153
1154+ .. index:: pair: detectors; auditors
1155+ single: auditors; function signature
1156+ single: auditors; defining
1157+ single: auditors; arguments
1158+
10781159Auditors are called with the arguments::
10791160
10801161 audit(db, cl, itemid, newdata)
@@ -1092,6 +1173,11 @@ properties that are about to be changed.
10921173
10931174For a ``retire()`` or ``restore()`` operation, newdata is None.
10941175
1176+ .. index:: pair: detectors; reactor
1177+ single: reactors; function signature
1178+ single: reactors; defining
1179+ single: reactors; arguments
1180+
10951181Reactors are called with the arguments::
10961182
10971183 react(db, cl, itemid, olddata)
@@ -1144,6 +1230,9 @@ to use one, copy it to the ``'detectors'`` of your tracker instance:
11441230 information, see the detector code - it has a length explanation.
11451231
11461232
1233+ .. index:: auditors; rules for use
1234+ single: reactors; rules for use
1235+
11471236Auditor or Reactor?
11481237-------------------
11491238
@@ -1195,6 +1284,9 @@ is not required - this is referred to as a "System Message" because it
11951284comes from "the system" and not a user).
11961285
11971286
1287+ .. index:: extensions
1288+ .. index:: extensions; add python functions to tracker
1289+
11981290Extensions - adding capabilities to your tracker
11991291================================================
12001292.. _extensions:
@@ -1267,9 +1359,12 @@ path in the tracker's `config.ini`. In the example above:
12671359
12681360Note that a file name match overrides the mime type settings.
12691361
1362+
12701363Example: Implement password complexity checking
12711364-----------------------------------------------
12721365
1366+ .. index:: tracker; lib directory (example)
1367+
12731368This example uses the zxcvbn_ module that you can place in the zxcvbn
12741369subdirectory of your tracker's lib directory.
12751370
@@ -4769,6 +4864,9 @@ So you could reimplement this as something like::
47694864Changes to Tracker Behaviour
47704865----------------------------
47714866
4867+ .. index:: single: auditors; how to register (example)
4868+ single: reactors; how to register (example)
4869+
47724870Preventing SPAM
47734871~~~~~~~~~~~~~~~
47744872
@@ -5294,7 +5392,8 @@ Scalability
52945392 many users this will be a serious performance bottleneck.
52955393 A way out would be to link from the keywords to the users who
52965394 selected these keywords as nosy keywords. This will eliminate the
5297- loop over all users.
5395+ loop over all users. See the ``rev_multilink`` attribute to make
5396+ this easier.
52985397
52995398Restricting updates that arrive by email
53005399~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 commit comments