Like every serious project, there are guidelines.
Oooooo. "Coding Standards".

Guidelines
----------

1. When using dirnames, don't expect the dir to end
   with a trailing slash, and please use the dirnames
   in pisiconfig
2. Python indentation is usually 4 chars.
3. Follow python philosophy of 'batteries included'

Suggestions
------------
In OO programming, try to invoke Demeter's law.
One of the "rules" there is not directly accessing any
objects that are further than, 2/3 refs, away. So the
following code is OK.
   destroy_system(a.system().name())
but the following isn't as robust
   destroy_system(object_store.root().a.system.name())
As you can tell, this introduces too many implementation
dependencies. The rule of thumb is that, in these cases
this statement must have been elsewhere.... It may be a
good idea to not count the object scope in this case,
so in Python self.a means only one level of reference,
not two.

One quibble with this: it may be preferable not to insist
on this where it would be inefficient. So if everything
is neatly packed into one object contained in another
object, why replicate everything in the upper level? If
the semantics prevents dependency changes, then chains
of 3 or even 4 could be acceptable.

OTOH, in Python and C++, it's not always good to implement 
accessor/modifier pairs for every property of an object.
It would be much simpler if you are not doing any special
processing on the property (e.g. if what the type system
does is sufficient).

The main rule of thumb in Demeter's Law is avoiding
putting more than, say, 10 methods in a class. That works
really well in practice, forcing refactoring every now
and then.

Unittests
---------
Unittests are located in unittests directory. Running the tests are
trivial. But you must syncronize your code and data with the test
code, which can be a tedious work if you lose discipline.

Sample data files are located in samples/ directory.

For running all test suites, use the following command:

$ ./unittests/run.py

If you know what you are doing, you can run the tests seperately. But
keep in your mind that test can depend each other. The following
command will run tests in specfiletests and archivetests:

$ ./unittests/run.py specfiletests archivetests

