Saturday, January 10, 2009

Announcing jsonpickle-0.2.0

jsonpickle 0.2.0 has been tagged and released.

There are a huge number of changes improving jsonpickle's ability to work with other Python objects.

David Aguilar also added a superb json backend loader that allows the user to specify which json module to use (simplejson, demjson, cjson, json).

Please check out the new documentation

Thanks so much everyone who submitted issues to the mailing list and contributed time and effort!


Announcing stopwatch 0.3.1

There is a new release of stopwatch, a simple utility for measuring time in Python. The release addes a simple decorator for functions to print the execution time of each call to that function.

>>> from stopwatch import clockit
>>> @clockit
def multiply(a, b):
return a * b
>>> r = multiple(4, 5)
multiple in 1.38282775879e-05 sec
>>> print r

You can obtain the new release with easy_install
easy_install -U stopwatch

or download the appropriate release.

Friday, January 9, 2009

Announcing python-hl7

python-hl7 is a simple Python library for parsing Health Level 7 version 2.x messages. The library allows for easy, key-based access of all the elements in an HL7 message.

HL7 is a communication protocol and message format for health care data. It is the de facto standard for transmitting data between clinical information systems and between clinical devices. The version 2.x series, which is often is a pipe delimited format is currently the most widely accepted version of HL7 (version 3.0 is an XML-based format).

The current implementation of python-hl7 does not completely follow the HL7 specification, but is good enough to parse the most commonly seen HL7 messages. The library could potentially evolve into being fully complainant with the spec. The library could eventually also contain the ability to create HL7 v2.x messages.

As an example, let's create a HL7 message:

>>> message = 'MSH|^~\&|GHH LAB|ELAB-3|GHH OE|BLDG4|200202150930||ORU^R01|CNTRL-3456|P|2.4\r'
>>> message += 'PID|||555-44-4444||EVERYWOMAN^EVE^E^^^^L|JONES|196203520|F|||153 FERNWOOD DR.^^STATESVILLE^OH^35292||(206)3345232|(206)752-121||||AC555444444||67-A4335^OH^20030520\r'
>>> message += 'OBR|1|845439^GHH OE|1045813^GHH LAB|1554-5^GLUCOSE|||200202150730||||||||555-55-5555^PRIMARY^PATRICIA P^^^^MD^^LEVEL SEVEN HEALTHCARE, INC.|||||||||F||||||444-44-4444^HIPPOCRATES^HOWARD H^^^^MD\r'
>>> message += 'OBX|1|SN|1554-5^GLUCOSE^POST 12H CFST:MCNC:PT:SER/PLAS:QN||^182|mg/dl|70_105|H|||F\r'

We call the hl7.parse() command with string message:

>>> import hl7
>>> h = hl7.parse(message)

We get a n-dimensional list back:

>>> type(h)

There were 4 segments (MSH, PID, OBR, OBX):

>>> len(h)

We can extract individual elements of the message:

>>> h[3][3][1]
>>> h[3][5][1]

We can look up segments by the segment identifer:

>>> pid = hl7.segment('PID', h)
>>> pid[3][0]


python-hl7 will work with Python 2.5, 2.6, and 3.0. It is under a BSD license.

The easiest way to obtain the package is with easy_install
easy_install hl7

An egg and tar.gz file can be downloaded from PyPi

You can always clone or fork the source:
hg clone

Thursday, August 21, 2008

jsonpickle 0.1.0 released

Thanks to Adam for finding the bug that missed longs as a primitive type.

In addition to that quick bugfix, jsonpickle has undergone a major API change. At the core of this change is jsonpickle's new preference for python-cjson over simplejson. While python-cjson is not a requirement, if it is installed on the machine, jsonpickle will use python-cjson. python-cjson is faster for jsonpickle (see the benchmarks), but simplejson is still useful on Google's App Engine.

So the API change moves away from the load/loads/dump/dumps functions in the tradition of simplejson towards a simple encode/decode set of functions. If you need to save the output or read a file, you can do that on your own, then send that data into the encode/decode methods. While it may have been smart to deprecate these functions first, I want to get the API correct early on and prevent cruft.

The update example:

>>> import jsonpickle
>>> from jsonpickle.tests.classes import Thing

Create an object.
>>> obj = Thing('A String')
>>> print
A String

Use jsonpickle to transform the object into a JSON string.
>>> pickled = jsonpickle.encode(obj)
>>> print pickled
{"classname__": "Thing", "child": null, "name": "A String", "classmodule__": "jsonpickle.tests.classes"}

Use jsonpickle to recreate a Python object from a JSON string
>>> unpickled = jsonpickle.decode(pickled)
>>> print
A String

Grab the new version.

Thanks also go out to the Joose developers for integrating jsonpickle into their product!

Friday, August 8, 2008

Announcing stopwatch 0.3.0 and the 7 Oars code repository

The 7 Oars code repository is a centralized location for small python programs and modules from 7 Oars, instead of having multiple wikis and source control systems for relatively small projects.

The first module as part of the code repository is stopwatch. stopwatch is a very simple python module for measuring time. I typically use it to measure the execution time of specifc parts of code or data processing threads. For example:

>>> import stopwatch
>>> t = stopwatch.Timer() # immediately starts the clock
>>> t.elapsed # elapsed time in seconds
>>> t.elapsed
>>> str(t) # pretty print
1.8 sec
>>> for i in xrange(0, 10000)
>>> pass
>>> t.elapsed # still going
>>> t.stop() # stop the timer
>>> t.elapsed
>>> t.elapsed # it will not go any more


via PyPi:
easy_install -U stopwatch

via subversion:
svn checkout stopwatch

Monday, July 21, 2008

jsonpickle 0.0.5 released

Thanks to Dean for pointing the incompatibility with CouchDB keys. This release breaks backwards compatibility by removing the two leading underscores from the special "class*__" keys.

Install / Upgrade:

The easiest path is with PyPi:
easy_install -U jsonpickle

Other installation candidates are on Google.

This release also marks a switch to Google Code's Subversion repository:
svn checkout jsonpickle

Feel free to help out or find bugs!

Thursday, June 12, 2008

jsonpickle 0.0.4 released

The 0.0.4 release of jsonpickle is a bugfix release. One user, Ian Kallen, noted an issue using Paver, so we have switched back to regular setuptools. Thanks Ian! If you have 0.0.2 already installed, you do not have to upgrade.

You can download the new release via
easy_install -U jsonpickle

or from google: