Overview
========
Spring Python intends to take the concepts that were developed, tested, and
proven with the Spring Framework, and carry them over to the language of Python.
If anyone has developed a solution using multiple technologies including Java,
C#/.NET, and Python, they will realize that certain issues exist in all these
platforms.
This is not a direct port of existing source code, but rather, a port of proven
solutions, while still remaining faithful to the style, idioms, and overall
user community of Python.
.. note::
*Spring Python is an offshoot of the Java-based Spring Framework and Spring
Security Framework, targeted for Python. Spring provides many useful features,
and I wanted those same features available when working with Python.*
--Greg Turnquist, Spring Python project lead
Key Features
++++++++++++
The following features have been implemented:
* :doc:`Inversion Of Control ` - The idea is to decouple two classes
at the interface level. This lets you build many reusable parts in your
software, and your whole application becomes more pluggable. You can use
PythonConfig, YamlConfig or XMLConfig to plugin your object
definition to an ApplicationContext.
* :doc:`Aspect Oriented Programming ` - Spring Python provides great ways
to wrap advice around objects. It is utilized for remoting. Another use is for
debug tracers and performance tracing.
* :doc:`DatabaseTemplate ` - Reading from the database requires a
monotonous cycle of opening cursors, reading rows, and closing cursors, along
with exception handlers. With this template class, all you need is the SQL query
and row-handling function. Spring Python does the rest.
* :doc:`Database Transactions ` - Wrapping multiple database calls
with transactions can make your code hard to read. This module provides multiple
ways to define transactions without making things complicated.
* :doc:`Security ` - Plugin security interceptors to lock down access
to your methods, utilizing both authentication and domain authorization.
* :doc:`Remoting ` - It is easy to convert your local application
into a distributed one. If you have already built your client and server pieces
using the IoC container, then going from local to distributed is just a
configuration change.
* :doc:`JMS Messaging ` - Connect to Java or Python applications using
queueing middleware. Spring Python can act as a standalone client of a JMS
provider with no Java EE infrastructure needed on Python side.
* :doc:`Plug-ins/command-line tool ` - Use the plugin system designed
to help you rapidly develop applications.
* :doc:`Samples ` - to help demonstrate various features of Spring
Python, some sample applications have been created:
* PetClinic - Everybody's favorite Spring sample application has been rebuilt
from the ground up using various web containers including: CherryPy. Go
check it out for an example of how to use this framework.
* Spring Wiki - Wikis are powerful ways to store and manage content, so we
created a simple one as a demo!
* Spring Bot - Use Spring Python to build a tiny bot to manage the IRC channel
of your open source project.
What Spring Python is NOT
+++++++++++++++++++++++++
Spring Python is NOT another web framework. I think there are plenty that are
fine to use, like Django, TurboGears, Zope, CherryPy, Quixote, and more.
Spring Python is meant to provide utilities to support any python application,
including a web-based one.
So far, the demos have been based on CherryPy, but the idea is that these
features should work with any python web framework. The Spring Python team is
striving to make things reusable with any python-based web framework. There
is always the goal of expanding the samples into other frameworks, whether
they are web-based, `RIA `_, or thick-client.
Support
+++++++
Spring Python 1.1 book
----------------------
.. image:: gfx/0660_small.png
You can order either a printed or electronic version of the
`Spring Python 1.1 book `_
written by project creator Greg Turnquist. This contains a lot of code
samples, diagrams, and descriptions of the concepts behind Spring Python. This
book was completed right as Spring Python 1.1 was released, and 1.2.x was
started, so it contains up-to-date information on the project.
Forums and Email
----------------
* You can read the messages on `Spring Python's forums `_
at the official Spring forum site.
* If you are interested, you can sign up for the
`springpython-developer mailing list `_.
* You can read the
`current archives of the spring-users mailing list `_.
* You can also read the
`old archives of the retired spring-developer mailing list `_.
* If you want to join this project, see :ref:`how to become a team member `
IRC
---
Join us on the #springpython IRC channel at `Freenode `_.
Downloads / Source Code
+++++++++++++++++++++++
If you want a release, check out
`Spring's download site for Spring Python `_.
Spring Python has migrated to `git `_, the distributed version control system.
If you want the latest source code type::
git clone git://git.springsource.org/spring-python/spring-python.git
That will create a new spring-python folder containing the entire repository.
This includes both the source code and the demo applications (PetClinic and
SpringWiki). You will be on the master branch. From there, you can switch
to various branches the team is working on, or create your own branch to
experiment and develop patches.
You can browse the code at https://fisheye.springsource.org/browse/se-springpython-py.
Installation
++++++++++++
This section is focused on helping you set up Spring Python.
#. Go to `Spring's download site for Spring Python `_.
#. Click on **Spring Python**.
#. Download **springpython-[release].tar.gz** to get the core library.
#. Unpack the tarball, and go to the directory containing setup.py. (NOTE: This has been tested on Mac OSX 10.5/10.6, and Ubuntu Linux 9.04+)
#. Type **python setup.py install** to install Spring Python. (NOTE: You may need administrative power to do this!)
This installs the core library of Spring Python. Version 1.3 supports Python 2.6+ (but not Python 3).
To use other features like CherryPy and Pyro, you need to execute some of the following extra steps.
#. Go to setuptools and follow the steps for your platform to install setuptools.
#. Install CherryPy for web app development by typing **easy_install cherrypy**. This should install CherryPy 3.2.
#. Install Pyro for RPC functionality by typing **easy_install pyro**. This should install Pyro (not Pyro 3).
#. Install PyYAML if you want the YAML-based IoC configuratin options by typing **easy_install pyyaml**.
#. Install MySQLdb by typing **easy_install mysql-python**.
#. Install PySqlite by typing **easy_install pysqlite**.
#. Install ElementTree if you are using a version of Python that doesn't incluee it by default by typing **easy_install elementtree**.
You may not need all of these libraries. Determine what you need and then install it.
Another feature which is very useful, is to install everything (including Spring Python) inside a virtual environment. You can read A Primer on virtualenv to get an introduction to virtualenv. After installing easy_install, you simply type **easy_install virtualenv** to install this tool. From there, you can create an virtual installation by typing **virtualenv --no-site-packages name_of_your_folder**. On UNIX systems, to activate it, type **. name_of_your_folder/bin/activate**. The virtualenv will manipulate your path settings and point you to a different location of the python executable, a different easy_install and pip, and a different PYTHON_PATH. Essentially, python setup.py foobar will install into this folder you just created instead of the system version. For isolation, this is a highly recommended way to install everything.
.. note::
**Using easy_install and pip vs. OS package installation tools**
A lot of operating systems, like Ubuntu Linux, offer the same python libraries through tools like
RPM, APT, etc. Due to personal experience, it is recommended to NOT use these when it comes to using
Spring Python. Using OS package management can result in library upgrades when performing system upgrades.
Using virtualenv is the best way to control the version of library installed and also shield your system from system upgrades.
Licensing
+++++++++
Spring Python is released under the
`Apache Server License 2.0 `_
and the copyright is held by SpringSource.
Spring Python's team
++++++++++++++++++++
Spring Python's official team (those with committer rights):
* Project Lead: Greg L. Turnquist
* Project Contributor: Dariusz Suchojad
* Project Contributor: Sven Wilhelm
Many others have also contributed through reporting issues, raising questions,
and even sending patches.
.. _how-to-become-a-team-member:
How to become a team member
---------------------------
We like hearing about new people interesting in joining the project. We are
also excited in hearing from people interested in working on a particular
jira feature.
The way we do things around here, we like to work through a few patches before
granting you any committer rights. You can checkout a copy of the code
anonymously, and then work on your patch. Email your patch to one of the
official team members, and we will inspect things. From there we will consider
committing your patch, or send you feedback.
Before sending us a patch, we ask you to sign the
`SpringSource Individual Contributor Agreement `_.
After a few patches, if things are looking good, we may evaluate giving you
committer rights.
Spring Python is a `TDD-based `_
project, meaning if you are working on code,
be sure to write an automated test case and write the test case FIRST. For
insight into that, take a trip into the code repository's test section to
see how current things are run. Your patch can get sold off and committed
much faster if you include automated test cases and a pasted sample of your
test case running successfully along with the rest of the baseline test suite.
You don't have to become a team member to contribute to this project, but if
you want to contribute code, then we ask that you follow the details of this
process, because this project is focused on high quality code, and we want to
hold everyone to the same standard.
.. rubric:: Getting started with contributing
#. First of all, I suggest you sign up on our
`springpython-developer `_
mailing list. That way, you'll get notified about big items as well be on the inside
for important developments that may or may not get published to the web site.
*NOTE: Use the springsource list, NOT the sourceforge one.*
#. Second, I suggest you register for a `jira account `_,
so you can leave comments, etc. on the ticket. I think that works (I don't manage
jira, so if it doesn't let me know, and we will work from there) NOTE: I like
notes and comments tracking what you have done, or what you think needs to be done.
It gives us input in case someone else eventually has to complete the ticket.
That would also be the place where you can append new files or patches to existing code.
#. Third, register at the `SpringSource community forum `_,
and if you want to kick ideas around or float a concept, feel free to start a thread in our Spring
Python forum.
#. Finally, we really like to have supporting documentation as well as code.
That helps other people who aren't as up-to-speed on your piece of the
system. Go ahead and start your patch, but don't forget to look into the
docs folder and update or add to relevant documentation. Our documentation
is part of the source code, so you can submit doc mods as patches also.
Include information such as dependencies, design notes, and whatever else
you think would be valuable.
With all that said, happy coding!
Deprecated Code
+++++++++++++++
To keep things up-to-date, we need to deprecate code from time to time.
Python has built in functionality to put warnings into certain sections of
code, so that if you import a deprecated module, you will be properly warned.
With each major release (1.0, 2.0, 3.0, etc.), the Spring Python team has the
option to remove any and all deprecated code.