186 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
==============================================
 | 
						|
Why, who, what and how do you do *the py lib*? 
 | 
						|
==============================================
 | 
						|
 | 
						|
.. contents::
 | 
						|
.. sectnum::
 | 
						|
 | 
						|
 | 
						|
Why did we start the py lib? 
 | 
						|
============================
 | 
						|
 | 
						|
Among the main motivation for the py lib and its flagship
 | 
						|
py.test tool were: 
 | 
						|
 | 
						|
- to test applications with a testing tool that provides 
 | 
						|
  advanced features out of the box, yet allows full customization 
 | 
						|
  per-project. 
 | 
						|
 | 
						|
- distribute applications in an ad-hoc way both for testing
 | 
						|
  and for application integration purposes. 
 | 
						|
 | 
						|
- help with neutralizing platform and python version differences 
 | 
						|
 | 
						|
- offer a uniform way to access local and remote file resources
 | 
						|
 | 
						|
- offer some unique features like micro-threads (greenlets) 
 | 
						|
 | 
						|
 | 
						|
What is the py libs current focus? 
 | 
						|
==================================
 | 
						|
 | 
						|
testing testing testing
 | 
						|
----------------------- 
 | 
						|
 | 
						|
Currently, the main focus of the py lib is to get a decent
 | 
						|
`test environment`_, indeed to produce the best one out there.  
 | 
						|
Writing, distributing and deploying tests should become
 | 
						|
a snap ... and fun! 
 | 
						|
 | 
						|
On a side note: automated tests fit very well to the dynamism
 | 
						|
of Python.  Automated tests ease development and allow fast
 | 
						|
refactoring cycles.  Automated tests are a means of
 | 
						|
communication as well. 
 | 
						|
 | 
						|
 | 
						|
ad-hoc distribution of programs
 | 
						|
------------------------------------
 | 
						|
 | 
						|
The py lib through its `py.execnet`_ namespaces offers
 | 
						|
support for ad-hoc distributing programs across
 | 
						|
a network and subprocesses.  We'd like to generalize
 | 
						|
this approach further to instantiate and let whole
 | 
						|
ad-hoc networks communicate with each other while
 | 
						|
keeping to a simple programming model. 
 | 
						|
 | 
						|
.. _`py.execnet`: execnet.html
 | 
						|
 | 
						|
 | 
						|
allowing maximum refactoring in the future ... 
 | 
						|
---------------------------------------------- 
 | 
						|
 | 
						|
explicit name export control 
 | 
						|
............................
 | 
						|
 | 
						|
In order to allow a fast development pace across versions of
 | 
						|
the py lib there is **explicit name export control**.  You
 | 
						|
should only see names which make sense to use from the outside
 | 
						|
and which the py lib developers want to guarantee across versions. 
 | 
						|
However, you don't need to treat the ``py`` lib as
 | 
						|
anything special.  You can simply use the usual ``import`` 
 | 
						|
statement and will not notice much of a difference - except that 
 | 
						|
the namespaces you'll see from the ``py`` lib are relatively
 | 
						|
clean and have no clutter. 
 | 
						|
 | 
						|
Release policy & API maintenance
 | 
						|
........................................ 
 | 
						|
 | 
						|
We'll talk about major, minor and micro numbers as the three 
 | 
						|
numbers in "1.2.3" respectively.  These are the 
 | 
						|
the rough release policies: 
 | 
						|
 | 
						|
- Micro-releases are bug fix releases and should not introduce 
 | 
						|
  new names to the public API. They may add tests and thus
 | 
						|
  further define the behaviour of the py lib. They may
 | 
						|
  completly change the implementation but the public API 
 | 
						|
  tests should continue to run (unless they needed to 
 | 
						|
  get fixed themselves). 
 | 
						|
 | 
						|
- No **tested feature** of the exported py API shall vanish
 | 
						|
  across minor releases until it is marked deprecated.  
 | 
						|
 | 
						|
  For example, pure API tests of a future version 1.0 are to
 | 
						|
  continue to fully run on 1.1 and so on.  If an API gets
 | 
						|
  deprecated with a minor release it goes with the next minor
 | 
						|
  release.  Thus if you don't use deprecated APIs you should 
 | 
						|
  be able to use the next two minor releases.  However, if 
 | 
						|
  you relied on some untested implementation behaviour, 
 | 
						|
  you may still get screwed.  Solution: add API tests to the
 | 
						|
  py lib :-)  It's really the tests that make the difference. 
 | 
						|
 | 
						|
- Pure API tests are not allowed to access any implementation
 | 
						|
  level details.  For example, accessing names starting with 
 | 
						|
  a single leading '_' is generally seen as an implementation 
 | 
						|
  level detail. 
 | 
						|
 | 
						|
- major releases *should*, but are not required to, pass 
 | 
						|
  all API tests of the previous latest major released 
 | 
						|
  version. 
 | 
						|
 | 
						|
 | 
						|
the need to find the right *paths* ...
 | 
						|
--------------------------------------
 | 
						|
 | 
						|
Another focus are well tested so called *path* implementations
 | 
						|
that allow you to seemlessly work with different backends,
 | 
						|
currently a local filesystem, subversion working copies and
 | 
						|
subversion remote URLs.  
 | 
						|
 | 
						|
How does py development work? 
 | 
						|
=============================
 | 
						|
 | 
						|
Communication and coding style 
 | 
						|
------------------------------ 
 | 
						|
 | 
						|
We are discussing things on our `py-dev mailing list`_ 
 | 
						|
and collaborate via the codespeak subversion repository. 
 | 
						|
 | 
						|
We follow a `coding style`_ which strongly builds on `PEP 8`_,
 | 
						|
the basic python coding style document.  
 | 
						|
 | 
						|
It's easy to get commit rights especially if you are an
 | 
						|
experienced python developer and share some of the
 | 
						|
frustrations described above. 
 | 
						|
 | 
						|
Licensing
 | 
						|
-----------------
 | 
						|
 | 
						|
The Py lib is released under the MIT license and all
 | 
						|
contributors need to release their contributions 
 | 
						|
under this license as well. 
 | 
						|
 | 
						|
connections with PyPy_ 
 | 
						|
---------------------------------
 | 
						|
 | 
						|
A major motivation for writing the py lib stems from needs
 | 
						|
during PyPy_ development, most importantly testing and 
 | 
						|
file system access issues.  PyPy puts a lot of pressure 
 | 
						|
on a testing environment and thus is a good **reality test**. 
 | 
						|
 | 
						|
Who is "we"? 
 | 
						|
============================= 
 | 
						|
 | 
						|
Some initial code was written from *Jens-Uwe Mager* and *Holger
 | 
						|
Krekel*, after which Holger continued on a previous
 | 
						|
incarnations of the py.test tool (known first as 'utest', then
 | 
						|
as 'std.utest', now for some 2 years 'py.test'). 
 | 
						|
 | 
						|
Helpful discussions took place with *Martijn Faassen*, *Stephan
 | 
						|
Schwarzer*, *Brian Dorsey*, *Grigh Gheorghiu* and then 
 | 
						|
*Armin Rigo* who contributed important parts.
 | 
						|
He and Holger came up with a couple of iterations of the
 | 
						|
testing-code that reduced the API to basically nothing: just the
 | 
						|
plain assert statement and a ``py.test.raises`` method to 
 | 
						|
check for occuring exceptions within tests. 
 | 
						|
 | 
						|
Currently (as of 2007), there are more people involved 
 | 
						|
and also have worked funded through merlinux_ and the
 | 
						|
PyPy EU project, Carl Friedrich Bolz, Guido Wesdorp
 | 
						|
and Maciej Fijalkowski who contributed particularly
 | 
						|
in 2006 and 2007 major parts of the py lib. 
 | 
						|
 | 
						|
.. _`talk at EP2004`: http://codespeak.net/svn/user/hpk/talks/std-talk.txt 
 | 
						|
.. _`coding style`: coding-style.html 
 | 
						|
.. _`PEP 8`: http://www.python.org/peps/pep-0008.html
 | 
						|
.. _`py-dev mailing list`: http://codespeak.net/mailman/listinfo/py-dev 
 | 
						|
.. _`test environment`: test.html 
 | 
						|
.. _`PyPy`: http://codespeak.net/pypy
 | 
						|
.. _future: future.html
 | 
						|
.. _`py.test tool and library`: test.html
 | 
						|
.. _merlinux: http://merlinux.de
 | 
						|
 | 
						|
-- 
 | 
						|
 | 
						|
.. [#] FOSS is an evolving acronym for Free and Open Source Software
 | 
						|
 |