Chapter 1. Overview of Pyrite

Table of Contents
Rationale and Organization
The Module Tree

Rationale and Organization

When I started work on the code that would eventually become Pyrite, my goal was simply to improve upon the Python language interface that came with pilot-link, updating it for Python 1.5 and adding broader support for the built-in applications. Since then, Pyrite has expanded into a complex architecture which has very little in common with either the original Python module, or with the Palm Conduit SDK. With Pyrite, I am attempting to design and implement a new architecture for Palm Computing platform compatible desktop applications, one which takes advantage of the power of dynamic object oriented languages like Python.

Pyrite is different than most of the other conduit programming kits that are currently available. Rather than focusing on the synchronization aspect of working with the Palm Computing platform, Pyrite attempts to provide a broad framework of high-level storage and communication services to applications on the desktop side of the link.

Pyrite's overall design is strongly based on class inheritance; there are about 100 classes in Pyrite already, with more on the way. A set of base classes provides Pyrite's core functionality, and those classes are specialized to create the individual conduits, filters, and database objects that applications interact with. As a result, the amount of code needed to support a new application or create a new conduit is quite small.

An additional type of organization is provided by Pyrite's plug-in architecture, which is used to organize similar kinds of objects together. For example, all conduit objects are interchangeable, because they are subclasses of a common conduit class. But conduits are also plug-ins, meaning that they are collected together in a common location so that they can be easily located and used by applications. Pyrite can, as a result, be viewed as two separate but related sets of modules: the core, which provides common behavior, and a collection of plug-ins that implement application specific extensions of that behavior.