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.
The following features have been implemented:
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 either the PyContainerConfig or the PythonConfig to plugin your object definition to an ApplicationContext.
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.
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.
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.
Security - Plugin security interceptors to lock down access to your methods, utilizing both authentication and domain authorization.
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.
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.
Plug-ins/command-line tool - Use the plugin system designed to help you rapidly develop applications.
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.
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.
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 How to become a team member
If you want a release, check out Spring's download site for Spring Python.
If you want the latest source code type:
svn co https://src.springframework.org/svn/se-springpython-py/trunk/springpython
That will create a new springpython folder. This includes both the source code and the demo applications (PetClinic and SpringWiki).
You can browse the code at https://fisheye.springframework.org/browse/se-springpython-py.
Spring Python is released under the Apache Server License 2.0 and the copyright is held by SpringSource.
Spring Python's official team (those with committer rights):
Project Lead: Greg L. Turnquist
SpringSource Sponsor: Mark Pollack
Project Contributor: Russ Miles
Project Contributor: Dariusz Suchojad
Many others have also contributed through reporting issues, raising questions, and even sending patches.
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.
If we decide to commit your changes, we may choose to create a new branch for your feature, based on the scope of the work, or simply commit it to the trunk. After testing, evaluation, and prioritization, we may eventually merge your patch to the trunk. After a few patches, if things are looking good, we will 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.
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.
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!
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.