Mercurial > p > roundup > code
comparison doc/customizing.txt @ 6168:de9d602c8ce6
more index entries and CHANGES.txt update for them.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Thu, 14 May 2020 22:18:18 -0400 |
| parents | c2fd254c9257 |
| children | 53a674b5910f |
comparison
equal
deleted
inserted
replaced
| 6167:81ae33038ec5 | 6168:de9d602c8ce6 |
|---|---|
| 34 | 34 |
| 35 Trackers in a Nutshell | 35 Trackers in a Nutshell |
| 36 ====================== | 36 ====================== |
| 37 | 37 |
| 38 Trackers have the following structure: | 38 Trackers have the following structure: |
| 39 | |
| 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 | |
| 39 | 47 |
| 40 =================== ======================================================== | 48 =================== ======================================================== |
| 41 Tracker File Description | 49 Tracker File Description |
| 42 =================== ======================================================== | 50 =================== ======================================================== |
| 43 config.ini Holds the basic `tracker configuration`_ | 51 config.ini Holds the basic `tracker configuration`_ |
| 54 html/ Web interface templates, images and style sheets | 62 html/ Web interface templates, images and style sheets |
| 55 lib/ optional common imports for detectors and extensions | 63 lib/ optional common imports for detectors and extensions |
| 56 =================== ======================================================== | 64 =================== ======================================================== |
| 57 | 65 |
| 58 | 66 |
| 67 .. index:: config.ini | |
| 68 .. index:: configuration; see config.ini | |
| 69 | |
| 59 Tracker Configuration | 70 Tracker Configuration |
| 60 ===================== | 71 ===================== |
| 61 | 72 |
| 62 The ``config.ini`` located in your tracker home contains the basic | 73 The ``config.ini`` located in your tracker home contains the basic |
| 63 configuration for the web and e-mail components of roundup's interfaces. | 74 configuration for the web and e-mail components of roundup's interfaces. |
| 98 | 109 |
| 99 Example configuration settings are below. This is a partial | 110 Example configuration settings are below. This is a partial |
| 100 list. Documentation on all the settings is included in the | 111 list. Documentation on all the settings is included in the |
| 101 ``config.ini`` file. | 112 ``config.ini`` file. |
| 102 | 113 |
| 103 .. index:: configuration; sections main | 114 .. index:: config.ini; sections main |
| 104 | 115 |
| 105 Section **main** | 116 Section **main** |
| 106 database -- ``db`` | 117 database -- ``db`` |
| 107 Database directory path. The path may be either absolute or relative | 118 Database directory path. The path may be either absolute or relative |
| 108 to the directory containig this config file. | 119 to the directory containig this config file. |
| 184 reader has a limit on the size of individual fields | 195 reader has a limit on the size of individual fields |
| 185 starting with python 2.5. Set this to a higher value if you | 196 starting with python 2.5. Set this to a higher value if you |
| 186 get the error 'Error: field larger than field limit' during | 197 get the error 'Error: field larger than field limit' during |
| 187 import. | 198 import. |
| 188 | 199 |
| 200 .. index:: config.ini; sections tracker | |
| 201 | |
| 189 Section **tracker** | 202 Section **tracker** |
| 190 name -- ``Roundup issue tracker`` | 203 name -- ``Roundup issue tracker`` |
| 191 A descriptive name for your roundup instance. | 204 A descriptive name for your roundup instance. |
| 192 | 205 |
| 193 web -- ``http://host.example/demo/`` | 206 web -- ``http://host.example/demo/`` |
| 203 language -- default *blank* | 216 language -- default *blank* |
| 204 Default locale name for this tracker. If this option is not set, the | 217 Default locale name for this tracker. If this option is not set, the |
| 205 language is determined by the environment variable LANGUAGE, LC_ALL, | 218 language is determined by the environment variable LANGUAGE, LC_ALL, |
| 206 LC_MESSAGES, or LANG, in that order of preference. | 219 LC_MESSAGES, or LANG, in that order of preference. |
| 207 | 220 |
| 208 .. index:: configuration; sections web | 221 .. index:: config.ini; sections web |
| 209 | 222 |
| 210 Section **web** | 223 Section **web** |
| 211 allow_html_file -- ``no`` | 224 allow_html_file -- ``no`` |
| 212 Setting this option enables Roundup to serve uploaded HTML | 225 Setting this option enables Roundup to serve uploaded HTML |
| 213 file content *as HTML*. This is a potential security risk | 226 file content *as HTML*. This is a potential security risk |
| 230 | 243 |
| 231 debug -- ``no`` | 244 debug -- ``no`` |
| 232 Setting this option makes Roundup display error tracebacks | 245 Setting this option makes Roundup display error tracebacks |
| 233 in the user's browser rather than emailing them to the | 246 in the user's browser rather than emailing them to the |
| 234 tracker admin."), | 247 tracker admin."), |
| 248 | |
| 249 .. index:: config.ini; sections rdbms | |
| 250 single: config.ini; database settings | |
| 235 | 251 |
| 236 Section **rdbms** | 252 Section **rdbms** |
| 237 Settings in this section are used to set the backend and configure | 253 Settings in this section are used to set the backend and configure |
| 238 addition settings needed by RDBMs like SQLite, Postgresql and | 254 addition settings needed by RDBMs like SQLite, Postgresql and |
| 239 MySQL backends. | 255 MySQL backends. |
| 284 | 300 |
| 285 cache_size -- `100` | 301 cache_size -- `100` |
| 286 Size of the node cache (in elements) used to keep most recently used | 302 Size of the node cache (in elements) used to keep most recently used |
| 287 data in memory. | 303 data in memory. |
| 288 | 304 |
| 305 .. index:: config.ini; sections logging | |
| 306 see: logging; config.ini, sections logging | |
| 307 | |
| 289 Section **logging** | 308 Section **logging** |
| 290 config -- default *blank* | 309 config -- default *blank* |
| 291 Path to configuration file for standard Python logging module. If this | 310 Path to configuration file for standard Python logging module. If this |
| 292 option is set, logging configuration is loaded from specified file; | 311 option is set, logging configuration is loaded from specified file; |
| 293 options 'filename' and 'level' in this section are ignored. The path may | 312 options 'filename' and 'level' in this section are ignored. The path may |
| 302 level -- ``ERROR`` | 321 level -- ``ERROR`` |
| 303 Minimal severity level of messages written to log file. If above 'config' | 322 Minimal severity level of messages written to log file. If above 'config' |
| 304 option is set, this option has no effect. | 323 option is set, this option has no effect. |
| 305 Allowed values: ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR`` | 324 Allowed values: ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR`` |
| 306 | 325 |
| 326 .. index:: config.ini; sections mail | |
| 327 | |
| 307 Section **mail** | 328 Section **mail** |
| 308 Outgoing email options. Used for nosy messages, password reset and | 329 Outgoing email options. Used for nosy messages, password reset and |
| 309 registration approval requests. | 330 registration approval requests. |
| 310 | 331 |
| 311 domain -- ``localhost`` | 332 domain -- ``localhost`` |
| 367 Add the mail address of the author to the author information at the | 388 Add the mail address of the author to the author information at the |
| 368 top of all messages. If this is false but add_authorinfo is true, | 389 top of all messages. If this is false but add_authorinfo is true, |
| 369 only the name of the actor is added which protects the mail address | 390 only the name of the actor is added which protects the mail address |
| 370 of the actor from being exposed at mail archives, etc. | 391 of the actor from being exposed at mail archives, etc. |
| 371 | 392 |
| 393 .. index:: config.ini; sections mailgw | |
| 394 single: mailgw; config | |
| 395 see: mail gateway; mailgw | |
| 396 | |
| 372 Section **mailgw** | 397 Section **mailgw** |
| 373 Roundup Mail Gateway options | 398 Roundup Mail Gateway options |
| 374 | 399 |
| 375 keep_quoted_text -- ``yes`` | 400 keep_quoted_text -- ``yes`` |
| 376 Keep email citations when accepting messages. Setting this to ``no`` strips | 401 Keep email citations when accepting messages. Setting this to ``no`` strips |
| 447 text/plain part it finds. If this part is inside a | 472 text/plain part it finds. If this part is inside a |
| 448 multipart/alternative, and this option is set, all other | 473 multipart/alternative, and this option is set, all other |
| 449 parts of the multipart/alternative are ignored. The default | 474 parts of the multipart/alternative are ignored. The default |
| 450 is to keep all parts and attach them to the issue. | 475 is to keep all parts and attach them to the issue. |
| 451 | 476 |
| 477 .. index:: config.ini; sections php | |
| 478 | |
| 452 Section **pgp** | 479 Section **pgp** |
| 453 OpenPGP mail processing options | 480 OpenPGP mail processing options |
| 454 | 481 |
| 455 enable -- ``no`` | 482 enable -- ``no`` |
| 456 Enable PGP processing. Requires gpg. | 483 Enable PGP processing. Requires gpg. |
| 460 processing on. If not specified, it happens for all users. | 487 processing on. If not specified, it happens for all users. |
| 461 | 488 |
| 462 homedir -- default *blank* | 489 homedir -- default *blank* |
| 463 Location of PGP directory. Defaults to $HOME/.gnupg if not | 490 Location of PGP directory. Defaults to $HOME/.gnupg if not |
| 464 specified. | 491 specified. |
| 492 | |
| 493 | |
| 494 .. index:: config.ini; sections nosy | |
| 465 | 495 |
| 466 Section **nosy** | 496 Section **nosy** |
| 467 Nosy messages sending | 497 Nosy messages sending |
| 468 | 498 |
| 469 messages_to_author -- ``no`` | 499 messages_to_author -- ``no`` |
| 513 | 543 |
| 514 Configuration variables may be referred to in lower or upper case. In code, | 544 Configuration variables may be referred to in lower or upper case. In code, |
| 515 variables not in the "main" section are referred to using their section and | 545 variables not in the "main" section are referred to using their section and |
| 516 name, so "domain" in the section "mail" becomes MAIL_DOMAIN. | 546 name, so "domain" in the section "mail" becomes MAIL_DOMAIN. |
| 517 | 547 |
| 548 .. index:: pair: configuration; extensions | |
| 549 pair: configuration; detectors | |
| 550 | |
| 518 Extending the configuration file | 551 Extending the configuration file |
| 519 -------------------------------- | 552 -------------------------------- |
| 520 | 553 |
| 521 You can't add new variables to the config.ini file in the tracker home but | 554 You can't add new variables to the config.ini file in the tracker home but |
| 522 you can add two new config.ini files: | 555 you can add two new config.ini files: |
| 569 The initial_data.py module sets up the initial state of your | 602 The initial_data.py module sets up the initial state of your |
| 570 tracker. It’s called exactly once - by the ``roundup-admin initialise`` | 603 tracker. It’s called exactly once - by the ``roundup-admin initialise`` |
| 571 command. See the start of the section on database content for more | 604 command. See the start of the section on database content for more |
| 572 info about how this works. | 605 info about how this works. |
| 573 | 606 |
| 607 .. index:: schema; classic - description of | |
| 574 | 608 |
| 575 The "classic" schema | 609 The "classic" schema |
| 576 -------------------- | 610 -------------------- |
| 577 | 611 |
| 578 The "classic" schema looks like this (see section `setkey(property)`_ | 612 The "classic" schema looks like this (see section `setkey(property)`_ |
| 604 issue = IssueClass(db, "issue", keyword=Multilink("keyword"), | 638 issue = IssueClass(db, "issue", keyword=Multilink("keyword"), |
| 605 status=Link("status"), assignedto=Link("user"), | 639 status=Link("status"), assignedto=Link("user"), |
| 606 priority=Link("priority")) | 640 priority=Link("priority")) |
| 607 issue.setkey('title') | 641 issue.setkey('title') |
| 608 | 642 |
| 643 .. index:: schema; allowed changes | |
| 609 | 644 |
| 610 What you can't do to the schema | 645 What you can't do to the schema |
| 611 ------------------------------- | 646 ------------------------------- |
| 612 | 647 |
| 613 You must never: | 648 You must never: |
| 688 | 723 |
| 689 The actual data entered into the database, using ``class.create()``, are | 724 The actual data entered into the database, using ``class.create()``, are |
| 690 called items. They have a special immutable property called ``'id'``. We | 725 called items. They have a special immutable property called ``'id'``. We |
| 691 sometimes refer to this as the *itemid*. | 726 sometimes refer to this as the *itemid*. |
| 692 | 727 |
| 728 | |
| 729 .. index:: schema; property types | |
| 693 | 730 |
| 694 Properties | 731 Properties |
| 695 ~~~~~~~~~~ | 732 ~~~~~~~~~~ |
| 696 | 733 |
| 697 A Class is comprised of one or more properties of the following types: | 734 A Class is comprised of one or more properties of the following types: |
| 724 class. The value is a list of integers. | 761 class. The value is a list of integers. |
| 725 | 762 |
| 726 Properties can have additional attributes to change the default | 763 Properties can have additional attributes to change the default |
| 727 behaviour: | 764 behaviour: |
| 728 | 765 |
| 766 .. index:: triple: schema; property attributes; required | |
| 767 triple: schema; property attributes; default_value | |
| 768 triple: schema; property attributes; quiet | |
| 769 | |
| 729 * All properties support the following attributes: | 770 * All properties support the following attributes: |
| 730 | 771 |
| 731 - ``required``: see `design documentation`_. Adds the property to | 772 - ``required``: see `design documentation`_. Adds the property to |
| 732 the list returned by calling get_required_props for the class. | 773 the list returned by calling get_required_props for the class. |
| 733 - ``default_value``: see `design documentation`_ Sets the default | 774 - ``default_value``: see `design documentation`_ Sets the default |
| 745 user). Making properties that are updated as an indirect result of | 786 user). Making properties that are updated as an indirect result of |
| 746 a user's change (e.g. updating a blockers property, counting | 787 a user's change (e.g. updating a blockers property, counting |
| 747 number of times an issue was reopened or reassigned etc.) should | 788 number of times an issue was reopened or reassigned etc.) should |
| 748 not be displayed to the user as they can be confusing. | 789 not be displayed to the user as they can be confusing. |
| 749 | 790 |
| 791 .. index:: triple: schema; property attributes; indexme | |
| 792 | |
| 750 * String properties can have an ``indexme`` attribute that defines if the | 793 * String properties can have an ``indexme`` attribute that defines if the |
| 751 property should be part of the full text index. The default is 'no' but this | 794 property should be part of the full text index. The default is 'no' but this |
| 752 can be set to 'yes' to allow a property's contents to be in the full | 795 can be set to 'yes' to allow a property's contents to be in the full |
| 753 text index. | 796 text index. |
| 797 | |
| 798 .. index:: triple: schema; property attributes; use_double | |
| 799 | |
| 754 * Number properties can have a ``use_double`` attribute that, when set | 800 * Number properties can have a ``use_double`` attribute that, when set |
| 755 to ``True``, will use double precision floating point in the database. | 801 to ``True``, will use double precision floating point in the database. |
| 756 * Link and Multilink properties can have several attributes: | 802 * Link and Multilink properties can have several attributes: |
| 757 | 803 |
| 804 .. index:: triple: schema; property attributes; do_journal | |
| 805 | |
| 758 - ``do_journal``: By default, every change of a link property is | 806 - ``do_journal``: By default, every change of a link property is |
| 759 recorded in the item being linked to (or being unlinked). A typical | 807 recorded in the item being linked to (or being unlinked). A typical |
| 760 use-case for setting ``do_journal='no'`` would be to turn off | 808 use-case for setting ``do_journal='no'`` would be to turn off |
| 761 journalling of nosy list, message author and message recipient link | 809 journalling of nosy list, message author and message recipient link |
| 762 and unlink events to prevent the journal from clogged with these | 810 and unlink events to prevent the journal from clogged with these |
| 763 events. | 811 events. |
| 812 | |
| 813 .. index:: triple: schema; property attributes; try_id_parsing | |
| 814 | |
| 764 - ``try_id_parsing`` is turned on by default. If entering a number | 815 - ``try_id_parsing`` is turned on by default. If entering a number |
| 765 into a Link or Multilink field, roundup interprets this number as an | 816 into a Link or Multilink field, roundup interprets this number as an |
| 766 ID of the item to link to. Sometimes items can have numeric names | 817 ID of the item to link to. Sometimes items can have numeric names |
| 767 (like, e.g., product codes). For these roundup needs to match the | 818 (like, e.g., product codes). For these roundup needs to match the |
| 768 numeric name and should never match an ID. In this case you can set | 819 numeric name and should never match an ID. In this case you can set |
| 769 ``try_id_parsing='no'``. | 820 ``try_id_parsing='no'``. |
| 821 | |
| 822 .. index:: triple: schema; property attributes; rev_multilink | |
| 823 | |
| 770 - The ``rev_multilink`` option takes a property name to be inserted | 824 - The ``rev_multilink`` option takes a property name to be inserted |
| 771 into the linked-to class. This property is a Multilink property that | 825 into the linked-to class. This property is a Multilink property that |
| 772 links back to the current class. The new Multilink is read-only (it | 826 links back to the current class. The new Multilink is read-only (it |
| 773 is automatically modified if the Link or Multilink property defining | 827 is automatically modified if the Link or Multilink property defining |
| 774 it is modified). The new property can be used in normal searches | 828 it is modified). The new property can be used in normal searches |
| 817 assigned_to = Link("user", rev_multilink="responsibleFor"), | 871 assigned_to = Link("user", rev_multilink="responsibleFor"), |
| 818 ... ) | 872 ... ) |
| 819 | 873 |
| 820 This makes it easy to list all issues that the user is responsible | 874 This makes it easy to list all issues that the user is responsible |
| 821 for (aka assigned_to). | 875 for (aka assigned_to). |
| 876 | |
| 877 .. index:: triple: schema; property attributes; msg_header_property | |
| 822 | 878 |
| 823 - The ``msg_header_property`` is used by the mail gateway when sending | 879 - The ``msg_header_property`` is used by the mail gateway when sending |
| 824 out messages. When a link or multilink property of an issue changes, | 880 out messages. When a link or multilink property of an issue changes, |
| 825 roundup creates email headers of the form:: | 881 roundup creates email headers of the form:: |
| 826 | 882 |
| 881 for emails sent on issues where joe_user has been assigned to the issue. | 937 for emails sent on issues where joe_user has been assigned to the issue. |
| 882 | 938 |
| 883 If this property is set to the empty string "", it will prevent | 939 If this property is set to the empty string "", it will prevent |
| 884 the header from being generated on outgoing mail. | 940 the header from being generated on outgoing mail. |
| 885 | 941 |
| 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 | |
| 886 All Classes automatically have a number of properties by default: | 947 All Classes automatically have a number of properties by default: |
| 887 | 948 |
| 888 *creator* | 949 *creator* |
| 889 Link to the user that created the item. | 950 Link to the user that created the item. |
| 890 *creation* | 951 *creation* |
| 893 Link to the user that last modified the item. | 954 Link to the user that last modified the item. |
| 894 *activity* | 955 *activity* |
| 895 Date the item was last modified. | 956 Date the item was last modified. |
| 896 | 957 |
| 897 | 958 |
| 959 .. index:: triple: schema; class property; content | |
| 960 triple: schema; class property; type | |
| 961 | |
| 898 FileClass | 962 FileClass |
| 899 ~~~~~~~~~ | 963 ~~~~~~~~~ |
| 900 | 964 |
| 901 FileClasses save their "content" attribute off in a separate file from | 965 FileClasses save their "content" attribute off in a separate file from |
| 902 the rest of the database. This reduces the number of large entries in | 966 the rest of the database. This reduces the number of large entries in |
| 904 allows us to use command-line tools to operate on the files. They are | 968 allows us to use command-line tools to operate on the files. They are |
| 905 stored in the files sub-directory of the ``'db'`` directory in your | 969 stored in the files sub-directory of the ``'db'`` directory in your |
| 906 tracker. FileClasses also have a "type" attribute to store the MIME | 970 tracker. FileClasses also have a "type" attribute to store the MIME |
| 907 type of the file. | 971 type of the file. |
| 908 | 972 |
| 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 | |
| 909 | 977 |
| 910 IssueClass | 978 IssueClass |
| 911 ~~~~~~~~~~ | 979 ~~~~~~~~~~ |
| 912 | 980 |
| 913 IssueClasses automatically include the "messages", "files", "nosy", and | 981 IssueClasses automatically include the "messages", "files", "nosy", and |
| 927 created, and the value of the "activity" property is the date when any | 995 created, and the value of the "activity" property is the date when any |
| 928 property on the item was last edited (equivalently, these are the dates | 996 property on the item was last edited (equivalently, these are the dates |
| 929 on the first and last records in the item's journal). The "creator" | 997 on the first and last records in the item's journal). The "creator" |
| 930 property holds a link to the user that created the issue. | 998 property holds a link to the user that created the issue. |
| 931 | 999 |
| 1000 .. index: triple: schema; class method; setkey | |
| 932 | 1001 |
| 933 setkey(property) | 1002 setkey(property) |
| 934 ~~~~~~~~~~~~~~~~ | 1003 ~~~~~~~~~~~~~~~~ |
| 935 | 1004 |
| 936 Select a String property of the class to be the key property. The key | 1005 Select a String property of the class to be the key property. The key |
| 946 | 1015 |
| 947 roundup-admin set issue23 assignedto=richard | 1016 roundup-admin set issue23 assignedto=richard |
| 948 | 1017 |
| 949 Note, the same thing can be done in the web and e-mail interfaces. | 1018 Note, the same thing can be done in the web and e-mail interfaces. |
| 950 | 1019 |
| 1020 .. index: triple: schema; class method; setlabelprop | |
| 1021 | |
| 951 setlabelprop(property) | 1022 setlabelprop(property) |
| 952 ~~~~~~~~~~~~~~~~~~~~~~ | 1023 ~~~~~~~~~~~~~~~~~~~~~~ |
| 953 | 1024 |
| 954 Select a property of the class to be the label property. The label | 1025 Select a property of the class to be the label property. The label |
| 955 property is used whereever an item should be uniquely identified, e.g., | 1026 property is used whereever an item should be uniquely identified, e.g., |
| 966 | 1037 |
| 967 You should make sure that users have View access to this property or | 1038 You should make sure that users have View access to this property or |
| 968 the id property for a class. If the property can not be viewed by a | 1039 the id property for a class. If the property can not be viewed by a |
| 969 user, looping over items in the class (e.g. messages attached to an | 1040 user, looping over items in the class (e.g. messages attached to an |
| 970 issue) will not work. | 1041 issue) will not work. |
| 1042 | |
| 1043 .. index: triple: schema; class method; setorderprop | |
| 971 | 1044 |
| 972 setorderprop(property) | 1045 setorderprop(property) |
| 973 ~~~~~~~~~~~~~~~~~~~~~~ | 1046 ~~~~~~~~~~~~~~~~~~~~~~ |
| 974 | 1047 |
| 975 Select a property of the class to be the order property. The order | 1048 Select a property of the class to be the order property. The order |
| 983 * the label property (see `setlabelprop(property)`_ above) | 1056 * the label property (see `setlabelprop(property)`_ above) |
| 984 | 1057 |
| 985 So in most cases you can get away without specifying setorderprop | 1058 So in most cases you can get away without specifying setorderprop |
| 986 explicitly. | 1059 explicitly. |
| 987 | 1060 |
| 1061 .. index: triple: schema; class method; create | |
| 1062 | |
| 988 create(information) | 1063 create(information) |
| 989 ~~~~~~~~~~~~~~~~~~~ | 1064 ~~~~~~~~~~~~~~~~~~~ |
| 990 | 1065 |
| 991 Create an item in the database. This is generally used to create items | 1066 Create an item in the database. This is generally used to create items |
| 992 in the "definitional" classes like "priority" and "status". | 1067 in the "definitional" classes like "priority" and "status". |
| 993 | 1068 |
| 1069 .. index: schema; item ordering | |
| 994 | 1070 |
| 995 A note about ordering | 1071 A note about ordering |
| 996 ~~~~~~~~~~~~~~~~~~~~~ | 1072 ~~~~~~~~~~~~~~~~~~~~~ |
| 997 | 1073 |
| 998 When we sort items in the hyperdb, we use one of a number of methods, | 1074 When we sort items in the hyperdb, we use one of a number of methods, |
| 1073 .. index:: detectors; writing api | 1149 .. index:: detectors; writing api |
| 1074 | 1150 |
| 1075 Detector API | 1151 Detector API |
| 1076 ------------ | 1152 ------------ |
| 1077 | 1153 |
| 1154 .. index:: pair: detectors; auditors | |
| 1155 single: auditors; function signature | |
| 1156 single: auditors; defining | |
| 1157 single: auditors; arguments | |
| 1158 | |
| 1078 Auditors are called with the arguments:: | 1159 Auditors are called with the arguments:: |
| 1079 | 1160 |
| 1080 audit(db, cl, itemid, newdata) | 1161 audit(db, cl, itemid, newdata) |
| 1081 | 1162 |
| 1082 where ``db`` is the database, ``cl`` is an instance of Class or | 1163 where ``db`` is the database, ``cl`` is an instance of Class or |
| 1089 | 1170 |
| 1090 For a ``set()`` operation, newdata contains only the names and values of | 1171 For a ``set()`` operation, newdata contains only the names and values of |
| 1091 properties that are about to be changed. | 1172 properties that are about to be changed. |
| 1092 | 1173 |
| 1093 For a ``retire()`` or ``restore()`` operation, newdata is None. | 1174 For a ``retire()`` or ``restore()`` operation, newdata is None. |
| 1175 | |
| 1176 .. index:: pair: detectors; reactor | |
| 1177 single: reactors; function signature | |
| 1178 single: reactors; defining | |
| 1179 single: reactors; arguments | |
| 1094 | 1180 |
| 1095 Reactors are called with the arguments:: | 1181 Reactors are called with the arguments:: |
| 1096 | 1182 |
| 1097 react(db, cl, itemid, olddata) | 1183 react(db, cl, itemid, olddata) |
| 1098 | 1184 |
| 1142 things with a .eml attachment, as they deem it 'unsafe'. Worse yet, | 1228 things with a .eml attachment, as they deem it 'unsafe'. Worse yet, |
| 1143 they'll just give you an incomprehensible error message. For more | 1229 they'll just give you an incomprehensible error message. For more |
| 1144 information, see the detector code - it has a length explanation. | 1230 information, see the detector code - it has a length explanation. |
| 1145 | 1231 |
| 1146 | 1232 |
| 1233 .. index:: auditors; rules for use | |
| 1234 single: reactors; rules for use | |
| 1235 | |
| 1147 Auditor or Reactor? | 1236 Auditor or Reactor? |
| 1148 ------------------- | 1237 ------------------- |
| 1149 | 1238 |
| 1150 Generally speaking, the following rules should be observed: | 1239 Generally speaking, the following rules should be observed: |
| 1151 | 1240 |
| 1193 messages which only consist of a change note (ie. the message id parameter | 1282 messages which only consist of a change note (ie. the message id parameter |
| 1194 is not required - this is referred to as a "System Message" because it | 1283 is not required - this is referred to as a "System Message" because it |
| 1195 comes from "the system" and not a user). | 1284 comes from "the system" and not a user). |
| 1196 | 1285 |
| 1197 | 1286 |
| 1287 .. index:: extensions | |
| 1288 .. index:: extensions; add python functions to tracker | |
| 1289 | |
| 1198 Extensions - adding capabilities to your tracker | 1290 Extensions - adding capabilities to your tracker |
| 1199 ================================================ | 1291 ================================================ |
| 1200 .. _extensions: | 1292 .. _extensions: |
| 1201 | 1293 |
| 1202 While detectors_ add new behavior by reacting to changes in tracked | 1294 While detectors_ add new behavior by reacting to changes in tracked |
| 1265 * a file named rss.xml will be cached for 5 minutes | 1357 * a file named rss.xml will be cached for 5 minutes |
| 1266 * a file named local.js will be cached for 2 hours | 1358 * a file named local.js will be cached for 2 hours |
| 1267 | 1359 |
| 1268 Note that a file name match overrides the mime type settings. | 1360 Note that a file name match overrides the mime type settings. |
| 1269 | 1361 |
| 1362 | |
| 1270 Example: Implement password complexity checking | 1363 Example: Implement password complexity checking |
| 1271 ----------------------------------------------- | 1364 ----------------------------------------------- |
| 1365 | |
| 1366 .. index:: tracker; lib directory (example) | |
| 1272 | 1367 |
| 1273 This example uses the zxcvbn_ module that you can place in the zxcvbn | 1368 This example uses the zxcvbn_ module that you can place in the zxcvbn |
| 1274 subdirectory of your tracker's lib directory. | 1369 subdirectory of your tracker's lib directory. |
| 1275 | 1370 |
| 1276 If you add this to the interfaces.py file in the root directory of | 1371 If you add this to the interfaces.py file in the root directory of |
| 4767 | 4862 |
| 4768 | 4863 |
| 4769 Changes to Tracker Behaviour | 4864 Changes to Tracker Behaviour |
| 4770 ---------------------------- | 4865 ---------------------------- |
| 4771 | 4866 |
| 4867 .. index:: single: auditors; how to register (example) | |
| 4868 single: reactors; how to register (example) | |
| 4869 | |
| 4772 Preventing SPAM | 4870 Preventing SPAM |
| 4773 ~~~~~~~~~~~~~~~ | 4871 ~~~~~~~~~~~~~~~ |
| 4774 | 4872 |
| 4775 The following detector code may be installed in your tracker's | 4873 The following detector code may be installed in your tracker's |
| 4776 ``detectors`` directory. It will block any messages being created that | 4874 ``detectors`` directory. It will block any messages being created that |
| 5292 In the auditor, there is a loop over all users. For a site with | 5390 In the auditor, there is a loop over all users. For a site with |
| 5293 only few users this will pose no serious problem; however, with | 5391 only few users this will pose no serious problem; however, with |
| 5294 many users this will be a serious performance bottleneck. | 5392 many users this will be a serious performance bottleneck. |
| 5295 A way out would be to link from the keywords to the users who | 5393 A way out would be to link from the keywords to the users who |
| 5296 selected these keywords as nosy keywords. This will eliminate the | 5394 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. | |
| 5298 | 5397 |
| 5299 Restricting updates that arrive by email | 5398 Restricting updates that arrive by email |
| 5300 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 5399 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 5301 | 5400 |
| 5302 Roundup supports multiple update methods: | 5401 Roundup supports multiple update methods: |
