* Coming Soon (or maybe not): - BTS->ToDo conduit for Debian developers - new configuration file format - BBDB import/export example applications - CORBA - true synchronization - "smart" installation (e.g. automatically converting docs) - additional local database format, maybe based on gdbm - useful things for the "test" package * Changes in 0.9.3: - The configure script now tests for the existence of the gettext utilities, and will not attempt to install translations if they are not found. Use "--disable-nls" to explicitly disable NLS support. - Sulfur bugfixes: Doc Toolkit will no longer crash if you have never installed a product before, and the state will now be saved properly. * Changes in 0.9.2: - Fixed bugs in the configuration script and Makefile. * Changes in 0.9.1: - Now using GNU autoconf for configuration; to build and install, do "./configure; make; make install". Options to configure: --with-locale-dir=DIR specify where to install translations --disable-sulfur disable automatic installation of Sulfur - The "sync" application now disconnects when it is supposed to. - Disconnecting when no databases are open will no longer cause an exception. - Removed '//' comments from glue/pisock.i; the generated code should compile on non-gcc compilers now. - In Application objects, the user_list method now returns only numeric UIDs, not tuples. - New Application methods: please use them instead of hardcoding paths. user_path(name=None, uid=None) app_path(name=None) app_user_path(name=None, uid=None) These have to do with the location of data within the repository. Each returns the pathname of a particular directory of interest: user_path - the user directory (normally something like '/home/rob/Palm/22061') app_path - an application-specific but NOT user-specific location (eg. '/home/rob/Palm/Pyrite') app_user_path - an application-specific AND user-specific location (eg. '/home/rob/Palm/22061/Pyrite') If the 'name' parameter is supplied, it is considered to be a file or path name that is appended to the base path that would otherwise be returned. The idea here is that if your app needs to save a bit of information, you should not hardcode a path but use these instead. user_open(name, mode='r', uid=None) app_open(name, mode='r') app_user_open(name, mode='r', uid=None) These functions correspond to the three described above, and open files in the appropriate location. Note that these use your application's app_prefix, so make sure to change it to something other than the default (which is 'Pyrite'). - Another new Application tool: products. See doc/README.products for more information. - Pyrite now binds its '_' function to its message catalog explicitly, rather than using gettext.gettext and gettext.textdomain(). This should make it possible to more easily internationalize Sulfur, Doc Toolkit, etc. * Changes in 0.9.0: - SIGNIFICANT CHANGES - read doc/README.0.9.0. - Removed some old, no longer used code: DBTypes.py, DLP.py, Config.py (and remnants in Conduit/Install.py), and a big chunk of prc.py. - Rearranged the innards of the Backup conduit slightly, to make the "should this file be backed up" logic slightly less complicated. This should have no visible effect, but if you notice a problem please report it. - Fixed a problem in prc.py that would occasionally cause it to write prc files that aren't openable by POSE (and probably by the Palm Desktop). * Changes in 0.7.9: - Store internals are being reorganized slightly, mainly to make it easier to graft a distributed object layer into Pyrite at that point. This only affects developers of new Store modules, so if you are developing applications or just using Pyrite, you won't notice any difference. (The changes, inasmuch as they don't break backward compatibility, are not being made to the old File and Directory Stores, since they are going to be deprecated soon.) - A "test" subpackage has been added, to contain test scripts. See doc/README.tests for more information. For convenience, the generated Makefile now has a "test" target that runs all provided tests. - Pyrite will now look in environment variables for some defaults: PYRITEPORT - the port to which the cradle is connected PILOTPORT - (same, but used only if PYRITEPORT is not specified) PYRITEPATH - the path to the data directory PYRITEUSER - the default user name PYRITEUID - the default UID Combined with the automatic state-saving introduced in 0.7.8, this should allow Pyrite to be used in many situations without a configuration file. If you set one of these variables, it will override the corresponding value read from the configuration file, if one is present. * Changes in 0.7.8: - There is now some support for internationalized text using gettext. - All original parts of Pyrite are now under a license like that of the Python interpreter. (The pilot-link glue and internationalization support are still under the LGPL, though.) - The Application object now saves some information in a pickle between runs. - The current user name and ID are stored between runs, so that any change to the "current user" (including synchronization) will be persistent. If the defaults::user or defaults::uid configuration options are present, they will override the corresponding saved data when the application is first run. (Pyrite will always change its notion of the "current user" when a handheld is synchronized.) - Pyrite now creates a sync ID (to put in the "lastSyncPC" field in the palmtop user structure) and saves it in the state pickle. - The Backup conduit has a new option, "skip-old-applications". If true, which is the default, applications on the palmtop will not be backed up if they already exist in the backup directory. This should hopefully speed things up on those occasions when the Palm OS decides to change the modification date/number on everything. * Changes in 0.7.7: - There is now a '--debug' command line option to all Pyrite applications. At present, it is only used by the sync.py utility; if set, exceptions during sync result in full tracebacks, rather than one-line error messages. - Bug fix: iteration over categories and/or modified records should now work. * Changes in 0.7.6: - The Backup conduit now scans the backup directory in the presync pass, to save connection time. - The C module now properly throws Python 1.5 exception objects. - The presync method of a conduit must now return true if the conduit has any work to be done while the connection is open. If the return is false, the conduit's __call__ method won't even be called during the sync pass. - The sync.py utility has been modified to work with the above changes, and to force the connection open before the sync pass. - The "fetchusa.py" utility is back, more or less. * Changes in 0.7.5: - The 'open' method in the Application class has been enhanced: - the default mode is now 'rs'; if you want write access, you have to explicitly ask for it. This more closely mimics the normal Python semantics for 'open', and should cause fewer problems with Stores that can't open existing databases for write. - there is now an explicit 'dbclass' parameter, which is passed along to the Store when the database is opened. - the supplied filename may be a http: or ftp: URL, in which case it will be fetched via the new URL Store (see below). - file: URLs will be treated identically to plain filenames if they refer to localhost (or no host at all), otherwise they will be handled by the URL Store. - a URL of the form user:[//username/][path/]dbname can be used to refer to a database in the Pyrite repository. If the username is not specified, the default is the current user; if the path is not specified, the default is "backup". - if a local filename isn't found, Pyrite will attempt to open the specified *database* name instead. That is, if you specify "MemoDB" and there is no file called "MemoDB", the open method will create a Directory store and search it for a database called "MemoDB" instead. As new storage methods are added, the "open" method will be extended to handle them; a "create" method is coming soon, too. - If None (instead of a Store) is passed as the first argument to the open method of an App plug-in, the Application's open method will be called instead. - There is now a URL Store, which reads prc/pdb format databases from arbitrary URLs using the standard Python urllib module. It is currently read-only; the first time you touch it (open, list, info, etc.) it fetches the content of the URL and caches it. The URL Store uses the pure-Python prc/pdb code, regardless of the value of the 'pure' option. - The default application class now defines a 'pure' option; if true, it causes the user_directory and open methods to use the pure-Python prc/pdb code. That is, if you run any standard Pyrite application with the '--pure' command line option, the new code will be used. Please test the pure code and report any problems! In a future release, the sense of the 'pure' option will be reversed, and some time after that the C prc/pdb access code will cease to exist... - The pure file code in prc.py has been rewritten again. The new version (in the "File" class; the old stuff is still there under the "OFile" class) wraps record/resource data into objects which can be compared by id or type/id. This allows the data to be kept in a single list (instead of parallel lists) while still allowing easy lookups with "in", "index", etc. (Of course, any id-based operations are still O(n), so there is still a need for a better data structure... more work is ahead.) - There is now a pure-Python version of the Doc compress/uncompress routines (in doc_compress.py), which will be used if the C module cannot be loaded for some reason. Please read doc/doc_compress.txt for some more comments on this code. - The configuration option Pyrite::plugin-packages can be used to add packages to the plugin search path. * Changes in 0.7.4: - Synchronization is now a three-pass process. In the first pass, conduits' "presync" methods are called, in the second their "__call__" methods are called, and in the last their "postsync" methods are called. The "presync" and "postsync" methods may not do anything that activates the DLP connection; the idea is that conduits with lots of work to do (fetching web pages, for example) can do it in "presync" or "postsync" with the connection closed, making the actual synchronization as fast as possible. (Note: conduits that do pre-sync stuff should watch out, in light of the change mentioned below... the current username could change between pre-sync and sync passes!) - If the palmtop has a different user name than the default, no exception will be thrown; instead, the user name on the palmtop will be configured, created if necessary, and used. - The default data-directory is now ~/Palm, if you don't put one in the configuration file. - Yet more friendliness, I hope: whenever possible, directories will be auto-created if they don't exist. This includes: the data directory (at the beginning of the run), users (any time the user name is changed & configured), and user subdirectories (eg. backup, install). It should now be possible to something semi-useful with Pyrite even with seriously hosed (or nonexistent!) configuration files, except that no default username still means that you can't do stuff offline. (Perhaps I will save the last synchronized username in a pickle, and use it when no other default is provided, or something.) - Some changes to the Backup conduit, two of them much-requested: 1. if the 'archive' option is set, databases deleted from the backup will be copied to the 'backup-archive' directory. 2a. the 'exclude' option is a list of database names, which are skipped during the backup. 2b. the 'exclude-regexps' option is a list of regular expressions, which match names of databases to be skipped during the backup. 3. the 'delete_old' option now controls whether old databases will be deleted; this used to be a part of 'incremental', but is logically separate. (Note: Lists are specified in {} in the configuration file; see doc/sample.conf for an example.) * Changes in 0.7.3: - New plug-in for the built-in Mail app, with database and preference support. A conduit will follow. - Added some preference support to stores and app plug-in base class. The DLP store supports reading and writing of preferences, and the Directory store supports reading only. - Various fixes which should make Pyrite a little more user-friendly. (Real end-user support will come in the 0.9.x cycle, however.) * Changes in 0.7.2: - The prc.py module has been examined and refined, and it now (hopefully) does everything the old pilot-link based pi-file databases do, and it will be expanded to provide even more flexibility in the future. Because this is a rather fundamental chunk of code, I encourage everyone to test it in their own applications, and to report any bugs or unexpected behavior. To this end, the "PureDirectory" and "PureFile" stores work just like "Directory" and "File", but return prc.py-based databases instead of the usual pi-file based ones. At some point in the future (0.8?), once the prc.py code appears stable, the "Pure" versions will become the default, and the pi-file interface will be deprecated. - Database objects now have properties which describe the little differences in their behavior, such as their handling of ID values or extensions to their interface. See the top of Database.py for a list of meaningful values. Database properties can be tested with the has_property method. Also, Stores now support a "properties" argument to the open and create methods, and a "test_db_properties" method. These take a tuple or list describing the desired properties of a database. If the combination is impossible or unavailable, test_db_properties will return None and open/create will raise an exception. - There is the barest beginnings of a Filter API... no filters yet, though. - IRIX compilation patches to _pdapalm.c, courtesy of Sjoerd Mullender <sjoerd@oratrix.nl> who reported lots of things that need to be casted to satisfy a picky compiler. - Removed the try/except import in Platform/__init__.py. Red Hat Linux users should have no more strange SyntaxError exceptions... - The C module now uses and returns all type & creator values as 4-character strings. Previously it could return an integer if the value as a string would contain unprintable characters. * Changes in 0.7.1: - The "Databases" chapter in the documentation has been updated to reflect the new 0.7.x Database object. - Database objects now have "new_record", "new_resource", and "new_appblock" functions, so that applications can obtain ready-to-use blocks without explicitly importing the module they are defined in. - The Doc plug-in now has "open_stream" and "create_stream" methods which mimic "open" and "create", except that the returned object is not a database but a pseudo-file which can be used in many places that expect a regular Python file object. - The makefile no longer uses '-e', but uses '-d' instead. * Changes in 0.7.0: Pyrite 0.7.0 is, for all practical purposes, a completely different product than previous versions. Almost everything has been either replaced or rewritten. Much reorganization has taken place. Many APIs have changed. **Please read doc/README.0.7.0 for full details.** * Changes in 0.6.1: [March 11, 1999] - New heuristic for incremental backup, which should eliminate the unwanted full backups that would sometimes occur when the OS rearranged memory on the handheld. The Backup conduit should also properly deal with data from BackupBuddy Certified applications. See doc/backup.txt for more information. - Fixed a date conversion bug which occurs on some Unix platforms. - The Backup conduit now removes partial files when there is an error. (Fixes Debian bug #27540) - Cleaned up the C module a bit more, and rearranged it to avoid static forward references in the interest of portability. * Changes in 0.6.0: [February 1, 1999] - Name changed to Pyrite, and various trademark conformance changes made: * The "HotSync" conduit module is now called "Sync" * The "hotsync" utility is now called "sync" * Pyrite now uses the [Pyrite] section of config files (but will read the [PalmPython] section for backward compatibility) * The list of conduits is now in the "Sync.conduits" config option (but the old "HotSync.conduits" option under [PalmPython] will still work). - Documentation! At least a start on it, anyway... - Introduced the Store API. As it reaches completion, the old methods of accessing databases will be deprecated. - Introduced a plug-in API for application support modules. It does very little at present, but more will be added in this development cycle. - Added a way to find plug-ins (see Plugin.find_plugins). - Moved registry-related and Block-related stuff to separate modules, to reduce the size and logical complexity of DLP.py. (This general trend will continue in upcoming releases.) - Purified the various App modules by replacing the pack/unpack code in the _pdapalm C module with equivalent Python code. Although this may slow things down a little bit, it is ultimately more portable; my goal is to reduce PalmPython's dependence on pilot-link (and C in general) to the minimum possible. - Added "dump" methods to all the basic Block classes, for use in debugging or other general data-viewing applications. - Assorted cleanup. * Changes in 0.5.5: [October 25, 1998] - Made App.XWord more robust with respect to wierdly formatted USA Today puzzle headers. - To Do bugfixes. * Changes in 0.5.4: [September 13, 1998] - Removed the backup_dir and install_dir options from the Backup and Install conduits respectively. - Minor conduit and option bugfixes. * Changes in 0.5.3: [September 10, 1998] - Added appinfo support to App.Doc, and fixed a bug in the DOCReader. - Fixed a small bug in _pdapalm.c. * Changes in 0.5.2: [September 1, 1998] - Packaged for Debian GNU/Linux (finally). - Added util/configsetup.py, a script to semi-intelligently set the options in the system-wide and user configuration files, make default user directories, and the like. - Added code to the Registry to add, delete, rename, and list available users, plus a Tk GUI dialog and a command-line utility that uses it (see util/palmuser.py) * Changes in 0.5.1: [August 28, 1998] - Changed license to LGPL. - Moved the functionality of util/install.py into the Install conduit, for use by other applications. - Added category support to the DOCWriter. - Fixed a couple of stupid bugs. * Changes in 0.5.0: [August 25, 1998] - More common code added to the sync manager, meaning less code in user utilities which need to use it. - New option configuration file layout, per discussions on the Pilot-Unix mailing list. See doc/config.txt for more details. Because discussion is ongoing, please note that there may be further changes in weeks to come. - Created a "Plugin" class to hold common code for conduits and other pluggable modules. Look for import/export filters using this API in an upcoming version. - Major changes to the Block API. Blocks (and thus Records et. al.) now have an internal data dictionary which can be used by other code to discover the contents of an arbitrary block. Blocks now have a dictionary-like interface, instead of treating data members as attributes, and all data members must be accessed through it. (As a side effect, this means things like keys() and get() work on Blocks.) - Various extensions to the DOCWriter class. Since it has to buffer the entire document in memory anyway, it now waits to open its database until the document is closed. This also means that some database header information can be passed to the DOCWriter for later use. The "remote" initialization argument is no more; it now uses a generic "target" instead of a database handle, and uses isinstance() et. al. to determine whether it is an open database, an DLP connection, or a filename. - Fixed a minor bug in the Address module. * Changes in 0.4.0: [June 8, 1998] - Complete overhaul of conduit option handling. Options are now defined by objects (class definitions in the "Options" module), each of which can have validation criteria, documentation, etc. Tk.ConfigDialog is a general-purpose GUI option editor which constructs a dialog on the fly based on available options. - Fixed bug in configure script which caused it to incorrectly identify the Python library directory on 1.5.1 installations (and, more generally, on installations with a 3+ level version number). - Distribution archive now no longer untars to PDA/Palm, but to palmpython-<version>; use the "install" target of the Makefile to install it. * Changes in 0.3.0: [May 13, 1998] - First signs of GUI support, in the "Tk" subpackage. - Added command-line install utility (util/install.py). If called with no arguments, it will pop up a Tk-based file selection dialog. - Renamed all references to "Pilot" to read "Palm", and changed the name of the product from "PDA.Pilot" to "PalmPython". Sorry about the mess, but I thought it would be better to get this out of the way now, before too much code gets written using the old names. - Improvements to the configuration script; it now generates a simple Makefile. * Changes in 0.2.3: - Fixed bug in Doc creation which caused the resulting databases to be un-installable using the official Palm/Pilot Desktop. * Changes in 0.2b: - Added class registration of creator 'TlDc' (TealDoc) to App.Doc module. TealDoc documents should now open with the proper database class. The default type/creator when creating new Docs are still the standard ones. - Removed xmldoc et. al. for separate distribution. * Changes in 0.2: - Binary modules are now in a platform-specific directory, to enable the package to be shared among multiple architectures. - Many internal changes in the C module, to eliminate most of the C code's dependencies on Python, and corresponding Python-level changes. - Added xmldoc. - Added the conduit configuration registry. * Changes in 0.1b: - Bug fixes in App.Datebook, App.Todo, & App.Doc. - Updated C module to pilot-link 0.8.11, plus various bug fixes and cleanup. Added Datebook support. - Added App.MoneyManager. * Changes in 0.1a: - Made util/hotsync.py useful. - "from PDA.Pilot.Conduit import *" now works. - Added Install and TimeSync conduits. - Various changes to Backup and SyncManager conduits. - Started keeping track of changes :-) ;; Local Variables: ;; mode: outline ;; End: