AW: [Zope3-Users] Python Package Construction

Roger Ineichen dev at
Thu Jun 19 17:15:43 EDT 2008

Hi Tim

> Betreff: [Zope3-Users] Python Package Construction
> Hi All,
> I would like feedback on the proper/best 'Pythonic' approach.
> This is a rather subjective question. Where is the trade-off 
> between package name lengths and faithfulness to the specifications?
> [Discussion follows]
> I am implementing a set of specifications for healthcare IT 
> for Python programmers to be able to develop interoperable 
> healthcare applications.
> I am using ZCA (aka.Zope3) extensively.  
> My desire is to implement the specs as faithfully as possible for two
> reasons:
> 1) teachability -  how easy/difficult is it to teach the 
> framework and specifications to new developers?
> 2) maintainability - which approach, if either, will make it 
> easier to maintain the framework if/when the specifications change?
> My first pass was to develop a skeleton of the specs using 
> Interfaces from the ZCA approach and then the implementations 
> following the document structure of the specs.  
> The specs are available via SVN at:
> itecture/ 
> It is best to probably use real examples. Following the 
> document structure for packaging AND using the ZCA convention 
> of having a sub-directory for interfaces caused massive 
> circular import issues due to some classes being used in the 
> interface definition of classes inside the same interface 
> file being imported into the implementation file.  If that 
> sounds confusing; it is.  It was confusing to write too. :-)  
> If anyone has questions I'll try to expand.
> It is best to probably use specific, real examples.
> itecture/rm/data_types_im.pdf
> (note class names are converted from the upper case, 
> underscore separated style to CamelCase)
> The package openehr.rm.datatypes.text defines the 
> implementation class CodePhrase.  The associated interface 
> file openehr.rm.datatypes.interfaces.text needed CodePhrase 
> as an attribute type in  DvCodedText and TermMapping needs 
> both CodePhrase and DvCodedText.  This quickly got out of control.
> So my solution to solving the circular imports is to take 
> each interface and implementation and put them into one file. 
> Research tells me that this is probably the second mostly 
> popular ZCA approach.  So, ICodePhrase and CodePhrase are now 
> in openehr/rm/datatypes/, DvCodeText and 
> IDvCodedText in openehr/rm/datatypes/, etc.  
> But wait, now I don't have a 'text package'.  So if 
> and were in 
> openehr/rm/datatypes/text/ that would solve the problem.  
> BUT! Throughout the specs many of the names are VERY long 
> already.  Adding another package name that is from 4 - 15 (or 
> more) characters long adds to the length of already long 
> import statements, i.e.
> (sorry for the email line wraps)
> from import 
> ICReferenceObject,CReferenceObject
> should really be
> from 
> import ICReferenceObject,CReferenceObject
> Thoughts, opinions and jeers all gratefully accepted.  :-)

For a usecase like this, I personaly recommend to 
defina all interfaces in one module which probably
is a namespace if you need alot of interfaces to define.



the reason why:

- spearate interface from implementation. That's an 
  important aspect in a component architecture. If you
  define your implementation and interfaces in one file,
  then you don't need a component architecture.

- interfaces are separated in a well know place.

This means if you define a module and you like to import 
an interface you can import just one line:

from openehr import interfaces

Which makes it very simple.

Roger Ineichen

> --Tim
> --
> Timothy Cook, MSc
> Health Informatics Research & Development Services LinkedIn 
> Profile:
> Skype ID == timothy.cook
> **************************************************************
> *You may get my Public GPG key from  popular keyservers or   *
> *from this link*
> **************************************************************

More information about the Zope3-users mailing list