This file is indexed.

/usr/share/pyshared/schooltool/devmode/devmode.txt is in python-schooltool 1:2.1.0-0ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
=============================
Developer Mode User Interface
=============================

The developer mode of the user interface is intended to help SchoolTool
developers and people using SchoolTool as a development platform to debug
their code and find documentation as quickly as possible.

To start, open the SchoolTool site in your browser::

    >>> browser = Browser('manager', 'schooltool')

Error Reporting
---------------

Even though error reporting is always available, it is usually not easily
accessible via the Web UI. By clicking on the `Errors` menu option

    >>> browser.getLink('Manage').click()
    >>> browser.getLink('Errors').click()

you are brought to the root error reporting utility.

Here you can configure the utility and view errors:

    >>> print browser.contents
    <BLANKLINE>
    ...
    ...<a href="http://localhost/++etc++site/default/RootErrorReportingUtility/@@configure.html">Configure</a>...
    ...<a href="http://localhost/++etc++site/default/RootErrorReportingUtility/@@index.html">Error List</a>...
    ...

In the configuration

    >>> browser.getLink('Configure').click()

you can specify how many exceptions to keep, whether to copy the errors to the
event log and what exceptions can be ignored::

    >>> keep_entries = browser.getControl(name='keep_entries')
    >>> keep_entries.value
    '20'
    >>> keep_entries.value = '30'

    >>> copy_to_zlog = browser.getControl(name='copy_to_zlog')
    >>> copy_to_zlog.value = True

    >>> ignored_exceptions = browser.getControl(name='ignored_exceptions:lines')
    >>> ignored_exceptions.value
    'Unauthorized'
    >>> ignored_exceptions.value += '\nNotImplementedError'

    >>> browser.getControl('Save Changes').click()

    >>> browser.getControl(name='keep_entries').value
    '30'
    >>> browser.getControl(name='copy_to_zlog').value
    True
    >>> print browser.getControl(name='ignored_exceptions:lines').value
    Unauthorized
    NotImplementedError

Let's now make sure that we can get to the error list. First let's create a
``NotFound`` error::

    >>> browser.open('http://localhost/foo')
    Traceback (most recent call last):
    ...
    NotFound: Object: <schooltool.app.app.SchoolToolApplication object at ...>, name: u'foo'

Now let's see the report::

    >>> browser.open('http://localhost/'
    ...              '++etc++site/default/RootErrorReportingUtility')
    >>> browser.getLink('Error List').click()
    >>> print browser.contents
    <BLANKLINE>
    ...
    <tr>
      <td valign="top" nowrap="nowrap">
        <span>...</span>
      </td>
      <td>
        <span>unauthenticated, sb.person.manager, SchoolTool Manager, </span>
      </td>
      <td valign="top">
        <a href="showEntry.html?id=...">
          <span>NotFound</span>:
          <span>Object: &lt;schooltool.app.app.SchoolToolApplication ...</span>
        </a>
      </td>
    </tr>
    ...


Sample Data
-----------

SchoolTool also features a data generator, which will fill your SchoolTool
instance with a lot of random data, which is perfect for performing and
advanced functional testing. So let's have a look::

    >>> browser.open('http://localhost/')
    >>> browser.getLink('Manage').click()
    >>> browser.getLink('Sample data').click()

You are now presented with a screen in which you can choose a random seed key
for the data and a "Generate" button. The purpose of the seed is that you can
reproduce a particular set of generated data. Since the generation process
takes a very long time, I am refraining from a demonstration.