ANN: ClientForm 0.0.11 and 0.1.5a released

John J. Lee jjl@pobox.com
15 Jul 2003 01:05:26 +0100


http://wwwsearch.sourceforge.net/ClientForm/

A new stable and development release.


Changes from 0.0.10 to 0.0.11:

 * Default selection for RADIO with no explictly selected items in
   HTML now correctly follows browser behaviour.  This browser behaviour
   is in conflict with HTML 4.01.  The various select_default arguments,
   as before, make everything follow HTML 4.01.
 * RadioControls now no longer have to have exactly one item selected:
   zero items can now be selected, in accordance with browser
   behaviour.


Changes from 0.1.3a to 0.1.5a:

This may be the last alpha release.

A lot of interface changes.  I don't recommend upgrading to 0.1.x from old
0.0.x code unless you want the new features.  Everything is now much more
consistent and, I hope, convenient.  Also, direct use of Control objects
should now be needed only rarely.  Instead, just call methods on HTMLForm
objects.

Note that the web page above refers to the old interface.  See here for
the new one:

http://wwwsearch.sourceforge.net/ClientForm/src/README-0_1_5a.html

 * Equivalent changes to those listed above for the stable release.
 * File upload now actually seems to work (replaced \n with \r\n).
 * Multiple file upload has been implemented (not yet tested on the web).
 * ListControls now always take sequence values, never string-like values
   or None.
 * Exceptions raised have now changed completely.
 * disabled attribute is now handled differently: if any item is disabled,
   the control's value can only be set directly if no attempt is made to
   select a disabled item (deselection is OK).  The set and .toggle
   methods can still be used, but again, individual items can't be
   selected if they're disabled.  There are several new methods to
   manipulate the disabled state of items.  OPTGROUP is taken account of
   when parsing, to determine which items are disabled.
 * All controls now have the readonly attribute.
 * clear methods are gone, to be replaced by selected argument to set
   methods.
 * The HTMLForm.set and .toggle methods now take value as second and
   first arguments respectively, with the other arguments reflecting
   those of find_control (ie. name, type, kind, nr).
 * New argument to various HTMLForm methods: by_label.
 * Lots of new methods on HTMLForm.  HTMLForm.find_control shouldn't be
   needed any more (rarely, anyway).  All these methods take the same
   style of arguments as .set and .toggle.
 * New argument to HTMLForm.find_control: kind.  Allows you to request
   controls that satisfy particular interfaces without specifying the
   exact type string.  Values are "list", "singlelist", "multilist",
   "text", "file", "clickable".  Also in HTMLForm methods, where
   appropriate.
 * New argument to HTMLForm.find_control: predicate.  Not exposed in
   other HTMLForm methods.
 * Renamed HTMLForm.find_item --> get_item_attrs.
 * Renamed HTMLForm.click_items --> click_pairs.
 * Renamed items --> pairs everywhere.
 * Renamed get_value_as_label --> get_value_by_label.
 * Renamed possible_values --> possible_items.
 * Renamed possible_labels --> possible_item_labels.
 * Removed nr argument from all methods related to get_item_attrs.
 * SelectControl.set_by_label and .toggle_by_label have now gone, to be
   replaced by by_label arguments to .set and .toggle.
 * HTML attribute dictionaries now contain *all* original HTML attributes,
   including those that are exposed elsewhere in the ClientForm API (such
   as name, type, multiple, selected).
 * HTMLForm.set and .toggle methods have been extended to work with
   single-selection controls.
 * HTMLForm now has toggle_single and set_single methods.  This is useful
   when you have a single-item list control (usually a single checkbox
   that you want to check), and you want to select that item without
   having to know what the item's name is (it's usually something
   meaningless like "1" or "on").
 * Empty SelectControl can now be constructed.
 * Moved most documentation from Control objects into HTMLForm.  The class
   docstring for HTMLForm now contains most of what you need to know.
 * Assorted code cleanup and minor bugfixes.



Requires Python >= 1.5.2.

ClientForm is a Python module for handling HTML forms on the client
side, useful for parsing HTML forms, filling them in and returning the
completed forms to the server.  It has developed from a port of Gisle
Aas' Perl module HTML::Form, from the libwww-perl library, but the
interface is not the same.

Simple example:

 from urllib2 import urlopen
 from ClientForm import ParseResponse

 forms = ParseResponse(urlopen("http://www.acme.com/form.html"))
 form = forms[0]
 print form
 form["author"] = "Gisle Aas"

 # form.click returns a urllib2.Request object
 # (see HTMLForm.click_request_data.__doc__ if you're not using urllib2)
 response = urlopen(form.click("Thanks"))


John